アプリケーションをLinuxからWindowsに移植しようとしていますが、テーマ設定に問題があります。 Linuxでは、これはそのまま使用できます。コンパイルするだけで、アプリケーションは適切なテーマを使用し、ネイティブに見えます。
MSYS2にgtkmm3とgtk3をインストールし、CMakeでビルドしています。これは問題ありません。実行できるようにするには、すべてのDLLをバイナリと共にディレクトリにコピーする必要がありました。他には何もコピーしませんでした。 「解凍して実行」パッケージを作成しようとしています。
私の問題は、そのアプリケーションが場違いに見えることです。それは全くネイティブに見えません。ウィンドウの周りに影があり、Windows10では問題ありませんが、Windows 7ではネイティブではありません。また、いくつかのアイコンがありません。
Gitk3-demoでもネイティブと同じように見えます(ただし、少なくとも最小化/最大化/閉じるアイコンは正しい)。
だから問題は:WindowsでGTK3アプリケーションのネイティブな外観を実現するにはどうすればよいですか?または、少なくともネイティブのウィンドウ装飾?
ありがとう
Theraには2つのサブ問題があります。アイコンの欠落と正しいテーマの設定です。
アイコンがない場合は、これらのアイコンをコピーするだけで十分でした
から:C:\ msys64\mingw32\share\icons\Adwaita\22x22\actions
宛先: "実行可能フォルダ"\share\icons\Adwaita\22x22\actions
GTK3には、実際には組み込みのようなテーマがあります。ネイティブのようなテーマを使用するには、ファイル「実行可能フォルダー」\ etc\gtk-3.0\settings.iniを作成し、これを含めます
[Settings]
gtk-theme-name=win32
win32テーマはGTK3に組み込まれており、前の手順の3つのアイコンのみが必要なようです。
Windows 7では、これは次のようになります。
問題は、装飾がWindows 10でも同じように見えることです(ウィンドウ装飾を含む)。
@andlabsからのコメントより:GTK + 3はuxtheme.dll APIを使用してWindowsのルックアンドフィールを取得していますが、残念ながらMicrosoftはこれらのWindows 7のようにウィンドウの境界線を保持しています。 (コメントでもっと)
ここで、win32
テーマのWindows 10 Gtk3アプリケーションを確認できます。
デフォルトまたはwin32テーマに満足できない場合は、インターネットからカスタムテーマ( this Flat-Pat など)を使用できます。 :)それを行うには、設定ファイルを作成する必要があります:
"あなたの実行可能フォルダ"\etc\gtk-3.0\settings.iniこの中に
[Settings]
gtk-theme-name=Flat-Plat
実行可能ファイルのパスのディレクトリにテーマファイルをコピーする必要があります
"実行可能フォルダ"\share\themes\Flat-Plat
そのフォルダーには、index.theme
ファイルとgtk-x.x
フォルダーが存在する必要があります。明らかにgtk-theme-name
とフォルダ名は一致する必要があります。
実行可能ファイルを実行すると、別のテーマを取得できるようになります。
編集:したがって、組み込みのwin32テーマがあります、ありがとう@andlabs
EDIT2:スクリーンショットを追加しました
EDIT3:Windows 10のスクリーンショットを追加し、事実を修正しました。
GTK_CSD = 0環境変数を設定して、クライアント側のウィンドウ装飾を無効にし、Windowsネイティブ装飾を有効にすることができます。これにより、醜いwin7のようなタイトルバーとAdwaitaのようなタイトルバーが取り除かれます。
GTK_CSD = 0はWindowsフレームアイコンに対して適切に機能しますが、デフォルトのドラッグアンドドロップ(DND)アイコンも欠落しているようです。
GtkEntryまたはGtkTreeViewのコンテンツをドラッグすると、ドラッグアイコンが表示されます。
Gtk + -3.24.4でドラッグソースとしてボタンを用意しました。ボタンをドラッグすると、マウスカーソルが消え、ドラッグアイコンは表示されません。
Gtk_drag_source_set_icon_pixbuf(bt、pixbuf)を使用すると、pixbufはドラッグアイコンとして表示されます。ただし、アイコンに移動/コピーインジケータがないため、この方法で行う作業は半分です。
(activestate)Perlを使用する私のような人々の場合、/ shareと/ etcはPerl.exeの1つのディレクトリに配置する必要があります(たとえば、Perl.exeがC:\ Perl64\binにある場合はC:\ Perl64に配置します)。
実際、Gtk + 3はWindows 10と互換性があり、これをデフォルトのテーマにすることでネイティブのWindowsテーマを使用できます。
gtk-theme-name = MS-Windows