我正在使用Visual 2008专业版。我在对话框编辑器中设计了以下对话框-:

请密切关注对话框中的“任务”组框。这里看起来很好,但是当我将它显示为应用程序中的非模态对话框时,GroupBox的外观和感觉突然变成了-:

突然,对话框编辑器中指定的原始蓝色标题和圆角边消失了,取而代之的是黑色前景和方形边缘。--我想知道为什么会突然发生这种情况,我希望它以对话框编辑器.中指定的外观和感觉显示出来。
对话框的资源文件(Timer.rc)中有以下代码-:
IDD_FORMVIEW DIALOGEX 0, 0, 204, 118
STYLE DS_ABSALIGN | DS_SETFONT | DS_SETFOREGROUND | DS_CENTER | WS_MINIMIZEBOX | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW | WS_EX_NOACTIVATE
CAPTION "SR-Timer(Work in Progress)"
FONT 10, "Verdana", 400, 0, 0x0
BEGIN
CONTROL "Shutdown",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,73,37,48,10
CONTROL "Restart",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,73,54,39,10
CONTROL "Stand By",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON,73,70,44,10
CONTROL "Hibernate",IDC_RADIO4,"Button",BS_AUTORADIOBUTTON,73,87,47,10
GROUPBOX "Tasks",IDC_STATIC,59,28,90,78
END提前谢谢。
发布于 2012-04-18 10:33:34
您应该启用XP通用控件样式。
实现此操作的最简单方法是将其包含在清单文件中,例如将其添加到链接器中,或者在代码中添加一个实用程序,如下所示:
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")编辑:可能还需要显式初始化公共控件(不是100%确定),如下所示:
INITCOMMONCONTROLSEX InitStr;
InitStr.dwSize = sizeof(InitStr);
InitStr.dwICC = ICC_WIN95_CLASSES|ICC_DATE_CLASSES|ICC_COOL_CLASSES;
// Other classes are: ICC_COOL_CLASSES, ICC_INTERNET_CLASSES, ICC_PAGESCROLLER_CLASS, ICC_USEREX_CLASSES
InitCommonControlsEx(&InitStr);还可能需要使用正确的windows版本定义进行编译。我使用以下命令行选项进行编译:
/D_WIN32_WINNT#0x0501 /DWINVER#0x0501 /D_WIN32_IE#0x0500但这始终意味着应用程序需要的是最低限度的Windows。
EDIT2 (作为对sreyan评论的答复):
我尝试编译以下源文件(称为test.cpp):
#include <iostream>
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
void main()
{
std::cout << "Hello World" << std::endl;
}使用以下命令:
cl /EHsc /MD /c test.cpp
link test.obj并生成了以下文件:
23-04-12 10:49 9 728 test.exe
23-04-12 10:49 638 test.exe.manifest
23-04-12 10:49 16 812 test.objtest.exe.manifest文件包含以下内容:
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level='asInvoker' uiAccess='false' />
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*' />
</dependentAssembly>
</dependency>
</assembly>所以这似乎是正确的。
重新检查您在Visual中填写的选项以及您添加的实用程序。先尝试一个小应用程序(就像上面的那个),直到你让它正常工作为止。然后转到您的大型应用程序。如果它不起作用,比较一下这个小应用程序的不同之处。
成功。
发布于 2012-04-18 10:24:49
显然,这需要一个清单和/或对InitCommonControls()的调用。有关详细信息,请参阅启用视觉样式。
https://stackoverflow.com/questions/10207368
复制相似问题