GTK 默认的主题风格是 Linux,可以将其设定为 Windows 和 Mac 相应的主题。主题设定完成后,窗口、按钮等构件的样式会发生变化。
1. 全局修改
将所有样式(包括 glade 内部所有样式)进行一次性修改。修改流程如下:
1)修改配置文件,将 GTK 样式设置为 Windows 样式。前往 msys 的安装路径,找到 msys\mingw64\etc\gtk-3.0 目录,打开 settings.ini 文件(如果没有就创建),写入如下内容。
[Settings]
gtk-theme-name=Windows10
gtk-font-name=Segoe UI 9
2)将配置文件中的样式对应的主题文件放置到指定路径下,供 GTK 调用。前往 msys 安装路径,找到 msys\mingw64\share\themes 文件夹,将主题文件放置其中。图中新增了 Mac 的 Desert-1.2 样式和 Windows10 样式。
3)运行程序,查看窗口样式是否发生变化。与上一节相比,窗口背景色和 Hello World 按钮样式都发生了变化,说明样式修改成功。
2. 局部修改
全局修改的副作用较大,会导致后续每个程序都是 Windows 样式。若仅仅修改一个程序的样式,全局修改不如局部修改,后者不会影响其他程序的样式。
局部修改的流程如下:
1)将全局修改的配置文件进行注释,恢复默认程序样式。前往 msys\mingw64\etc\gtk-3.0\settings.ini,将内容进行注释。
2)在程序编译后的文件夹下,移动可执行程序及新增主题文件。例如,在 cmake-build-debug-mingw 文件夹下,新建 test/bin 文件夹,将应用程序( 04.config_themes.c.exe 文件)移至此处;新建 test/share 文件夹,将主题文件复制此处。
3)在 powershell 中设定环境变量,将 bin 目录下的应用程序设置为 share 目录下的主题样式。在 powershell 中输入以下代码,并执行该程序,可以发现样式已经发生了变化。其中 'Windows10' 为 test/share/themes 下主题文件的名称。
$env:GTK_THEME='Windows10'
此外,将主题设置为 Mac 时,可以发现窗口上方样式并没有被修改(例如右上角的 x 号)。原因在于 Windows 系统默认设置了程序窗口自身的样式。
在 powershell 中输入以下代码,阻止 Windows 系统设置程序窗口样式。其最终结果如下所示。
$env:GTK_CSD=1
3. 局部修改方法二
仿照全局修改,利用 settings.ini 文件进行程序主题设置。不同之处在于此时配置文件不放在 mingw 文件夹下,而在程序编译后的目录中。具体修改流程如下:
1)将 mingw/bin/libgtk-3.0.dll 复制到执行程序目录下。原因在于并非执行程序读取配置文件,而是 libgtk-3.0.dll。
2)模仿全局修改时 settings.ini 的文件路径,创建 etc/gtk-3.0/settings.ini 文件。内容为:
[Settings]
gtk-theme-name=Desert-1.2
gtk-font-name=Segoe UI 9
3)运行程序,可发现主题成功修改。
4. 待定
局部修改还可以通过修改后台代码进行设置,暂且待定。