2012-06-16 49 views
1

我通過CreateWindowEx創建一個簡單的組框控件有問題。其字幕的字體大小/樣式只是看起來不正確。Groupbox字體問題與WinAPI

我創建了一個簡單的Windows對話框(含組框,按鈕......)與Visual Studio - 資源管理器。當我用DialogBox(...)加載該對話框時,一切看起來很正常,但是當我通過CreateWindowEx(...)在同一個對話框上創建另一個組框控件時,新控件的標題具有不同的font-size/-style。

使用Microsoft Spy ++,我可以看到其他羣組框的dwExStyle和dwStyle值,但即使在CreateWindowEx中使用相同的值,我仍然會看到不同的外觀。

下面是我用它來創建新組框代碼:

HWND hGroup1 = GetDlgItem(_hWnd, IDC_GROUPBOX1); 
HWND hGroup2 = CreateWindowEx(   
    WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | WS_EX_NOPARENTNOTIFY, 
    L"Button", 
    L"Hallo", 
    WS_CHILDWINDOW | WS_VISIBLE | BS_GROUPBOX, 
    20, 20, 250, 250, 
    hGroup1, 
    nullptr, 
    _hInstance, 
    nullptr); 

下面是對話的截屏:

http://imageshack.us/photo/my-images/856/groupboxfontissue.png/

請讓我知道我在哪裏去了錯了,我能做些什麼來解決它。

[編輯-1]

在問候喬納森·波特與超人,你建議我新的組框的字體句柄設置爲相同的其他控件。

HFONT hFont1 = (HFONT)SendMessage(hGroup1, WM_GETFONT, 0, 0); 
HFONT hFont2 = (HFONT)SendMessage(hGroup2, WM_GETFONT, 0, 0); 
HFONT hFont3 = (HFONT)SendMessage(_hWnd, WM_GETFONT, 0, 0); 
SendMessage(hGroup2, WM_SETFONT, (WPARAM)hFont1, TRUE); 

hFont2 = (HFONT)SendMessage(hGroup2, WM_GETFONT, 0, 0); 

這段代碼的最後,我可以看到,所有的控制和對話窗口有相同的字體句柄但只將其用在資源管理器中創建的控件具有正確的字體(這是系統字體)。

還有什麼我可以做嗎?

[EDIT-2]

我不敢相信它......它現在可以工作了!非常感謝你的幫助!

我不得不設置CreateWindowEx(...)的對話框手柄hWndParent值,然後使用WM_GETFONT和WM_SETFONT複製合適的字體。

祝你週末愉快。您手動創建(通過CreateWindowEx)

+0

你很可能需要一個'IDC_GROUPBOX2'或其他東西來代替你的第一個'nullptr',因爲它是一個孩子。 – chris

回答

3

控制沒有得到他們的字體自動設置,並且默認爲「系統字體」(這是你在截圖中看到)。相反,您需要在創建控件字體後設置它。例如,

SendMessage(hGroup2, WM_SETFONT, (WPARAM)SendMessage(hGroup1, WM_GETFONT, 0, 0), TRUE); 
+0

我試過了,但沒有幫助。我還比較了Text-Metrics和Text-Faces,但我找不到任何區別。還有什麼我可以做的嗎? – user667967

1

當您將使用資源編輯器,字體設置爲對話框,這是控制的家長將默認使用它的對話控制。

如果你動態創建一個控制,系統字體將被用來代替對話框的字體。

要獲得對話框的相同的字體爲你動態創建控件,對話框的字體設置爲在WM_INITDIALOG處理程序的控制。

在下面的代碼片段中,將m_hWnd替換爲父對話框的句柄。

HFONT font = (HFONT)::SendMessage(m_hWnd, WM_GETFONT, 0, 0); 
::SendMessage(hGroup2, WM_SETFONT, (WPARAM)font, TRUE);