3

我尝试使用 WinAPI 在 D 中进行一些 gui 编程。我的问题是按钮看起来很丑,就像另一个用户提出的问题一样。为了解决这个问题,我想将清单嵌入到我的 D 应用程序中。一旦我可以将资源包含到我的可执行文件中,我也应该能够根据此 Microsoft 文档手动添加清单。

所以我的问题是:如何在 Visual Studio 上将资源包含到我的 D 应用程序中?甚至有可能做到这一点吗?如果没有,还有其他方法可以使按钮看起来不错吗?

4

5 回答 5

1

我不熟悉将 dmd 集成到 Visual Studio 中,但实现所需的一种方法是将编译的 .res 文件添加到传递给 dmd.exe 的文件列表中。例如:

dmd.exe main.d manifest.res

我希望您的 VS 集成中有一些方法可以将文件添加到 IDE 用来编译代码的 dmd 命令。

于 2012-09-03T09:40:52.093 回答
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);
}

只需确保在程序启动时调用它一次。

于 2012-09-03T09:28:36.090 回答
1

如果您不关心它实际上是“资源”,而只需要嵌入到二进制文件中的文件中的数据块;看看“导入表达式

于 2012-09-04T14:38:09.487 回答
0

在此处查看“VisualStyles”示例:https ://github.com/AndrejMitrovic/DWinProgramming/tree/master/Samples/Extra

此外,“ThemedSimpleWakeUp”示例使用资源文件,而“ThemedWakeUp”动态启用视觉样式。

于 2012-09-03T21:11:56.477 回答
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 ...
于 2012-09-05T11:45:22.727 回答