簡體   English   中英

群組框外觀

[英]Group Box look and feel

我正在使用Visual Studio 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

提前致謝。

您應該啟用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 XP。

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.obj

test.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 Studio中填寫的選項以及已添加的編譯指示。 首先嘗試使用一個小型應用程序(如上面的應用程序),直到使其正常工作為止。 然后轉到大型應用程序。 如果不起作用,請與小型應用程序進行比較。

成功。

顯然,這需要清單和/或對InitCommonControls()的調用。 有關更多信息,請參見啟用視覺樣式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM