哪些因素控制对话框按钮的外观?

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”推荐的步骤完全相同,但步骤更少。

【讨论】:

以上是关于哪些因素控制对话框按钮的外观?的主要内容,如果未能解决你的问题,请参考以下文章

对话框在时间设计上具有现代外观,但在运行时具有旧外观(使用 Visual C++ 和资源编辑器)

mfc中如何设置编辑框\按钮的外观

VC单击按钮弹出对话框都有哪些方法?

LabVIEW图形界面问题

SPSS如何进行单因素方差分析

jQuery cxDialog 对话框