我在通过CreateWindowEx创建一个简单的Group-Box-Control时遇到问题。其标题的font-size / -style看起来不正确。
我使用Visual Studio - 资源管理器创建了一个简单的Windows对话框(包含组框,按钮......)。当我用DialogBox(...)加载该对话框时,一切看起来都很正常但是当我通过CreateWindowEx(...)在同一个对话框上创建另一个group-box-control时,新控件的标题有不同的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/
请告诉我出错的地方以及我可以采取哪些措施来解决问题。
[EDIT-1]
关于Jonathan Potter和Superman,正如您所建议的那样,我将新组框的字体句柄设置为与其他控件相同。
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);
在此代码的末尾,我可以看到所有控件和对话框窗口都具有相同的字体句柄,但只有使用资源管理器创建的控件具有正确的字体(即系统字体)。 / p>
还有什么我可以做的吗?
[EDIT-2]
我无法相信......它现在有效!非常感谢你的帮助!
我只需要将CreateWindowEx(...)中的hWndParent值设置为对话框句柄,然后使用WM_GETFONT和WM_SETFONT复制正确的字体。
祝大家周末愉快。
答案 0 :(得分:3)
您手动创建的控件(通过CreateWindowEx)不会自动设置其字体,并默认为“系统字体”(这是您在屏幕截图中看到的)。相反,您需要在控件的字体创建后设置它。例如,
SendMessage(hGroup2, WM_SETFONT, (WPARAM)SendMessage(hGroup1, WM_GETFONT, 0, 0), TRUE);
答案 1 :(得分:1)
使用资源编辑器在对话框中放置控件时,默认情况下将使用设置为对话框的字体(控件的父级)。
如果您动态创建控件,将使用系统字体而不是对话框的字体。
要为动态创建的控件获取对话框的相同字体,请在WM_INITDIALOG处理程序中将对话框的字体设置为控件。
在下面的代码段中,将m_hWnd替换为父对话框的句柄。
HFONT font = (HFONT)::SendMessage(m_hWnd, WM_GETFONT, 0, 0);
::SendMessage(hGroup2, WM_SETFONT, (WPARAM)font, TRUE);