哪些因素控制对话框按钮的外观?
Posted
技术标签:
【中文标题】哪些因素控制对话框按钮的外观?【英文标题】:What factors control dialog button appearance? 【发布时间】:2013-04-14 05:53:17 【问题描述】:我对影响 Windows 对话框上 UI 元素(如按钮)外观的因素有些困惑。我的困惑来自以下观察:
1- 我在我的系统上安装了 Visual Studio 2010,当我创建 MFC 对话框时,.rc 上的按钮具有精致的外观、略微圆角等。当我构建 MFC 应用程序时,会出现相同的外观可执行程序。
2- 现在我得到一个在 VC 6 中开发的应用程序,将其转换为新的 vs 2010 项目。当我打开 .rc 文件时,UI 外观与上述相同
但是当我构建和运行应用程序时,按钮的 ui 外观是旧的、简单的。
3- 我在旧代码中包含 InitcommonControlEx() ,但没有任何改变。也许它与此无关。
我的问题是什么在控制 ui 元素的这种外观和感觉?它与指示应用程序应使用哪个版本的 Windows 库的清单文件有关吗?
如果是这样,如何更新旧项目的清单文件,以便获得新的 UI 外观?
【问题讨论】:
【参考方案1】:在 VS2010 中,使用 New Project 向导创建一个 MFC 对话框应用程序(实际上任何 MFC 应用程序都可以)。为所有选项选择默认值并让向导生成代码。
完成后,查看文件stdafx.h
并将以下块复制/粘贴到您的stdafx.h
#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif
您也可以通过 Project/Properties 执行此操作,但通过在代码中执行此操作,如果您与其他项目共享源代码,它不会中断。
请注意,其中有一个#ifdef _UNICODE
,因为少数通用控件仅适用于 UNICODE 构建。但是,如果您需要非 UNICODE 构建并且仅使用“标准”Windows 控件(例如,没有列表视图或树视图等),则可以删除 #ifdef
。
【讨论】:
【参考方案2】:你是对的。您需要嵌入清单文件。
proper 使用 VS2010 将 manifest 嵌入到 MFC 应用程序中的方法是通过 Properties->Linker->Manifest File->Generate Manifest。要启用 XP 主题,只需在 Additional Manifest Dependencies
字段中使用以下内容:
type='Win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='X86' publicKeyToken='6595b64144ccf1df' language='*'
【讨论】:
【参考方案3】:如果您不想删除#ifdef _UNICODE 语句,您可以复制该行
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
并将其放在 stdafx.h 文件的末尾。这与上面“cha”推荐的步骤完全相同,但步骤更少。
【讨论】:
以上是关于哪些因素控制对话框按钮的外观?的主要内容,如果未能解决你的问题,请参考以下文章