我尝试使用WinAPI在D中进行一些gui编程。我的问题是按钮看起来像the question another user asked.中那样丑陋。为了解决这个问题,我想在我的D应用程序中嵌入一个清单。只要我可以将资源包含到我的可执行文件中,我也应该能够根据this Microsoft documentation.手动添加清单
所以我的问题是:如何在Visual Studio上的D应用程序中包含资源?甚至可以这样做吗?如果没有,还有其他方法让按钮看起来不错吗?
答案 0 :(得分:1)
有点难看,但它完成了工作,没有任何清单:
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);
}
只需确保在程序启动时调用一次。
答案 1 :(得分:1)
我不熟悉将dmd集成到Visual Studio中,但实现所需的一种方法是将已编译的.res文件添加到传递给dmd.exe的文件列表中。例如:
dmd.exe main.d manifest.res
我希望您的VS集成中有一些方法可以将文件添加到IDE用来编译代码的dmd命令中。
答案 2 :(得分:1)
如果您不关心它实际上是“资源”,只需要从嵌入到二进制文件中的文件中获取数据blob;看看“import expressions”
答案 3 :(得分:0)
点击此处查看'VisualStyles'示例:https://github.com/AndrejMitrovic/DWinProgramming/tree/master/Samples/Extra
'ThemedSimpleWakeUp'示例使用资源文件,而'ThemedWakeUp'动态启用视觉样式。
答案 4 :(得分:0)
查看使用 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 ...