我尝试使用 WinAPI 在 D 中进行一些 gui 编程。我的问题是按钮看起来很丑,就像另一个用户提出的问题一样。为了解决这个问题,我想将清单嵌入到我的 D 应用程序中。一旦我可以将资源包含到我的可执行文件中,我也应该能够根据此 Microsoft 文档手动添加清单。
所以我的问题是:如何在 Visual Studio 上将资源包含到我的 D 应用程序中?甚至有可能做到这一点吗?如果没有,还有其他方法可以使按钮看起来不错吗?
我尝试使用 WinAPI 在 D 中进行一些 gui 编程。我的问题是按钮看起来很丑,就像另一个用户提出的问题一样。为了解决这个问题,我想将清单嵌入到我的 D 应用程序中。一旦我可以将资源包含到我的可执行文件中,我也应该能够根据此 Microsoft 文档手动添加清单。
所以我的问题是:如何在 Visual Studio 上将资源包含到我的 D 应用程序中?甚至有可能做到这一点吗?如果没有,还有其他方法可以使按钮看起来不错吗?
我不熟悉将 dmd 集成到 Visual Studio 中,但实现所需的一种方法是将编译的 .res 文件添加到传递给 dmd.exe 的文件列表中。例如:
dmd.exe main.d manifest.res
我希望您的 VS 集成中有一些方法可以将文件添加到 IDE 用来编译代码的 dmd 命令。
有点难看,但它完成了工作,没有清单:
auto enableVisualStyles()
{
TCHAR dir[MAX_PATH];
dir[GetSystemDirectory(dir.ptr, dir.length)] = '\0';
auto actCtx = ACTCTX(
ACTCTX.sizeof, 0x0C, "shell32.dll", PROCESSOR_ARCHITECTURE_INTEL,
0, dir.ptr, MAKEINTRESOURCE(124), null, HMODULE.init);
ULONG_PTR ulpActivationCookie;
return ActivateActCtx(CreateActCtx(actCtx), ulpActivationCookie);
}
只需确保在程序启动时调用它一次。
如果您不关心它实际上是“资源”,而只需要嵌入到二进制文件中的文件中的数据块;看看“导入表达式”
在此处查看“VisualStyles”示例:https ://github.com/AndrejMitrovic/DWinProgramming/tree/master/Samples/Extra
此外,“ThemedSimpleWakeUp”示例使用资源文件,而“ThemedWakeUp”动态启用视觉样式。
查看使用dsss的旧项目:
$cat dsss.conf
[*]
buildflags+=-Jresources
version(Windows) {
version(gui) {
buildflags+= -L/SUBSYSTEM:windows:5
} else {
buildflags+= -L/SUBSYSTEM:console:5
}
buildflags+= -L/rc:.\resources\dwt
...
}
...
这应该转化为:
dmd -JRES_PATH -L/rc:.\RES_PATH\MANIFEST_WHITHOUT_RES_EXT ...