我有创建标签
INITCOMMONCONTROLSEX icc;
icc.dwSize = sizeof(INITCOMMONCONTROLSEX);
icc.dwICC = (DWORD)ICC_TAB_CLASSES;
InitCommonControlsEx(&icc);
icc.dwICC = (DWORD)ICC_LISTVIEW_CLASSES;
InitCommonControlsEx(&icc);
hwndTab = CreateWindow(WC_TABCONTROL,L"",WS_CHILD|WS_VISIBLE|WS_DLGFRAME|WS_CLIPSIBLINGS
,10,10,780,271,hwnd,(HMENU)3,hInstance,NULL);
TCITEM tcitem; tcitem.mask = TCIF_TEXT;
tcitem.pszText = L"Tab1";
TabCtrl_InsertItem(hwndTab,0,&tcitem);
并将静态控件放入选项卡
CreateWindow(L"STATIC",L"Static control 1",
WS_CHILD|WS_VISIBLE,50,30,65,24,hwndTab,(HMENU)NULL,hInstance,NULL);
但是静态控件1具有灰色背景。我怎么能给它一个颜色。 感谢
答案 0 :(得分:2)
因为您已将静态控件设置为选项卡的子级,所以它将向选项卡控件发送WM_CTLCOLORSTATIC消息。如果对选项卡控件进行子类化,则可以捕获此消息并修改其颜色。但请注意,在启用视觉样式的情况下,标签控件不是单一颜色 - 它更像是渐变,因此即使返回匹配的纯色也不一定非常好。
答案 1 :(得分:0)
制表符控件并不意味着要成为父母。对于每个标签页,您应该创建一个新的无模式对话框as a sibling to the tab并将静态控件放入其中。如果您遵守以下规则:
InitCommonControlsEx()
WS_CLIPCHILDREN
WM_ERASEBACKGROUND
EnableThemeDialogTexture()
处理程序中调用WM_INITDIALOG
SetWindowPos(tab, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE)
(否则它将位于Z顺序的错误末端)…然后,在XP到10的所有Windows版本上,将使用正确的颜色渐变绘制静态控件,以及无模式对话框中的所有其他控件(复选框,滑块,…)。