5 windows visual-studio-2008 visual-c++
我正在使用Visual C++的资源编辑器创建一个对话框.
当我运行编辑器的测试按钮时,对话框的组件以现代外观显示,而当运行创建并显示对话框的应用程序时,它以旧外观显示...我只是使用WINAPI调用显示对话框,而不是MFC.以下是截图(上图是设计时UI外观的示例,另一个是运行时的UI外观):
有谁知道我做错了什么???
提前谢谢,
亨利
您是否在项目中正确设置了清单以使用commctl32.dll的版本6?如果没有,您将无法获得主题控件.
在Visual Studio的更高版本中,通常使用#pragma完成此操作(这个用于x86,从使用VS2005生成的新项目中复制):
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
Run Code Online (Sandbox Code Playgroud)
如果将其添加到项目中的某个源文件并重建,则清单将由链接器生成并添加到应用程序中.对于其他处理器体系结构,您需要更改"processorArchitecture"值.(为什么VS无法解决这个问题,这是一个让读者无法解决的谜......)
(正如其他人已经注意到的那样,您也可以手动生成清单并将其添加到.rc文件中.这更加冗长,但确实可以让您完全控制清单的内容.)
您的应用程序清单是否指定您要使用 comctl32.dll 版本 6?这是在 Windows XP 中使用视觉样式和更现代的外观的要求之一。
创建清单并使您的应用程序能够使用视觉样式。
链接到 ComCtl32.lib 并调用 InitCommonControls(请参阅 MSDN 库中的 Platform SDK 文档)。
将名为 YourApp.exe.manifest 的文件添加到源树中,该文件具有以下 XML 格式:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="CompanyName.ProductName.YourApp"
type="win32"
/>
<description>Your application description here.</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
Run Code Online (Sandbox Code Playgroud)
将清单添加到应用程序的资源文件中,如下所示
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "YourApp.exe.manifest"
Run Code Online (Sandbox Code Playgroud)
注意:将上一个条目添加到资源时,必须将其格式化为一行。或者,您可以将 XML 清单文件放置在与应用程序的可执行文件相同的目录中。操作系统将首先从文件系统加载清单,然后检查可执行文件的资源部分。文件系统版本优先。