C++ 如何在资源文件生成的Win32对话框上获取视觉主题?

C++ 如何在资源文件生成的Win32对话框上获取视觉主题?,c++,windows,resources,dialog,C++,Windows,Resources,Dialog,我在资源文件中定义了一个对话框。然而,它使用的是Windows95风格的按钮等等。如何为这些控件使用可视主题(即在XP和更高版本中添加的主题?您需要在可执行文件中嵌入一个清单文件,告诉Windows您想要启用主题的控件版本()。这确实是出于兼容性原因,因为 VisualC++中的P>可能最简单的方法是通过 > #pragma comment(linker,"/manifestdependency:\"" \ "type='win32' " \ "name='Microsoft.W

我在资源文件中定义了一个对话框。然而,它使用的是Windows95风格的按钮等等。如何为这些控件使用可视主题(即在XP和更高版本中添加的主题?

您需要在可执行文件中嵌入一个清单文件,告诉Windows您想要启用主题的控件版本()。这确实是出于兼容性原因,因为

VisualC++中的P>可能最简单的方法是通过<代码> >
#pragma comment(linker,"/manifestdependency:\"" \
    "type='win32' " \
    "name='Microsoft.Windows.Common-Controls' " \
    "version='6.0.0.0' " \
    "processorArchitecture='*' "  \
    "publicKeyToken='6595b64144ccf1df' " \
    "language='*'\"")
这会导致链接器向生成的清单文件中添加如下内容:

<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="*"
            publicKeyToken="6595b64144ccf1df"
            language="*" />
    </dependentAssembly>
</dependency>

注册相应的控件类,否则将不会显示对话框


正如Mark Ransom在下面的评论中所提到的,这在Windows 2000、Windows XP和更高版本中仍然可以使用。此外,一些框架(如MFC)定义了
#pragma
,并为您执行初始化。

在Windows 2000上运行的清单中添加对“6.0.0.0”版本的依赖是否会中断?我发现,在创建新的MFC项目时,这一切都已完成。
#pragma
位于
stdafx.h
中,
InitCommonControlsEx
位于
InitInstance
中。清单被Windows 2000忽略,因此您只需进行适当的初始化调用@马克·兰森:谢谢,我不知道。@马克:我没有使用MFC(因此我感到困惑)。