我正在编写一个基于C的WinAPI程序,它在主窗口的客户区域中有一个选项卡控件。此选项卡控件非常有效,但选项卡似乎存在某种渲染问题。选项卡的标题以粗体,非混淆字体呈现,因此浪费了大量的屏幕空间: 这是基本上每个其他应用程序中的选项卡:
我使用此代码设置我的标签控件:
RECT rcClient, rcTool, rcTab;
TCHAR tabTitleTmp[256]; // Temp string buffer
HWND hTool = GetDlgItem(hWnd, IDC_MAIN_TOOL);
GetWindowRect(hTool, &rcTool);
int iToolHeight = rcTool.bottom - rcTool.top;
// Get parent's client rect
GetClientRect(hWnd, &rcClient);
// Create tab control
HWND hwndTab = CreateWindowEx(NULL, WC_TABCONTROL, NULL, WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE,
0, iToolHeight, rcClient.right, rcClient.bottom - iToolHeight, hWnd, (HMENU) IDC_MAIN_TAB,
hInst, NULL);
// Create tab items
TCITEM tie;
tie.mask = TCIF_TEXT | TCIF_IMAGE;
tie.iImage = -1;
tie.pszText = tabTitleTmp;
// Set up tabs
for(int i = 0; i < 8; i++) {
LoadString(hInst, IDC_TAB_GENERAL + i, tabTitleTmp, sizeof(tabTitleTmp) / sizeof(tabTitleTmp[0]));
TabCtrl_InsertItem(hwndTab, i, &tie);
}
有谁知道这个问题的解决方案?我还没有在Google上找到它,我开始认为这可能只是WinAPI本身的一个错误。感谢您的回复!
编辑:在创建任何控件之前,我在程序开头调用InitCommonControlsEx(),以便注册公共控件类。
答案 0 :(得分:4)
您需要使用带有SendMessage()
消息的WM_SETFONT
在标签控件上设置字体。 您可以使用您可以使用GetStockObject(DEFAULT_GUI_FONT)
获取默认的GUI字体,SystemParametersInfo()
获取默认字体,也可以使用CreateFont()
设置不同的字体。
NONCLIENTMETRICS ncm;
ncm.cbSize = sizeof(NONCLIENTMETRICS);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, NULL);
HFONT hFont = CreateFontIndirect(&ncm.lfMessageFont);
SendMessage(hwndTab, WM_SETFONT, (WPARAM)hFont, true);