如何将对话框项的样式更改为测试模式下出现的样式?

Posted

技术标签:

【中文标题】如何将对话框项的样式更改为测试模式下出现的样式?【英文标题】:How to change the style of dialog box items into what appears in test mode? 【发布时间】:2012-03-28 22:45:01 【问题描述】:

当我在 Visual Studio 2008 中通过 CTRL+T 快捷键测试我的对话框时,我可以看到带有整齐光滑边框的对话框项目。但是当我编译项目并通过程序本身启动它时,它看起来像“3d”风格:每个对话框都有像旧的 Windows 98 风格的阴影。

我想使用测试模式显示的光滑的 1 像素边框。如何在这两种样式之间启用/禁用?

这是这两种样式的示例,我想使用上面的样式:

【问题讨论】:

【参考方案1】:

您需要启用 ComCtl32 版本 6,以便将正确的视觉样式应用于控件。 Microsoft 在此链接中提供了完整说明:Enabling Visual Styles

【讨论】:

我尝试使用#pragma 方法,但它没有做任何事情,有什么想法吗? @Rookie,这本身是不够的,您还必须在程序启动时调用InitCommonControls。我建议阅读整篇文章。 我链接到 ComCtl32.lib 并调用 InitCommonControls() 但没有什么不同。我不知道还能做什么......它说我不需要使用这种方法的清单,但它不起作用。 @Rookie,我的错误 - 你必须调用 InitCommonControlsEx,而不是 InitCommonControls。 我认为我不需要那个 Ex 版本,因为我没有使用这些类。无论如何,我试过了,但无法让它工作,无论我在 LPINITCOMMONCONTROLSEX 中输入什么,它都会崩溃。奇怪的是编译器抱怨我没有得到的未初始化变量。这是我的代码:LPINITCOMMONCONTROLSEX a; a->dwSize = sizeof(INITCOMMONCONTROLSEX); a->dwICC = 0xFFFFFFFF; InitCommonControlsEx(a);,当它没有崩溃时,init func 返回 false。【参考方案2】:

STEP1 将此代码添加到您的 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_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

方法 InitInstance() 的第 2 步:

    BOOL Ctest_stylesApp::InitInstance()

    INITCOMMONCONTROLSEX InitCtrls;
    InitCtrls.dwSize = sizeof(InitCtrls);
    InitCtrls.dwICC = ICC_WIN95_CLASSES;
    InitCommonControlsEx(&InitCtrls);

我使用的是 Visual Studio 2010,它可以工作。

【讨论】:

嗯,我得到了它,但我不得不删除#ifdef _UNICODE。我不确定为什么会有那行代码,但是没有它它就可以工作。谢谢! (我需要等待 19 小时才能提供 +50 赏金)。 #ifdef _UNICODE 的原因是新的(第 6 版)通用控件库适用于 UNICODE。它没有 ASCII 版本 如果 WIN32_LEAN_AND_MEAN 已定义且 commctrl 不是预编译头文件的一部分或尚未在任何地方提及,您还需要 #include <CommCtrl.h> 以不同的方式命名库,comctl32.lib

以上是关于如何将对话框项的样式更改为测试模式下出现的样式?的主要内容,如果未能解决你的问题,请参考以下文章

将样式应用于jqgrid

如何将 ProgressBar 的样式更改为小?

word一种样式和格式如何设置两种字体

如何将窗体边框更改为 Windows Basic 而不是 Aero 样式?

在 XAML 样式中,如何将纯色背景更改为渐变?

word一种样式和格式如何设置两种字体