更改选项卡颜色c ++中的静态背景

时间:2012-08-28 06:54:16

标签: c++ winapi widget

我有创建标签

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具有灰色背景。我怎么能给它一个颜色。 感谢

2 个答案:

答案 0 :(得分:2)

因为您已将静态控件设置为选项卡的子级,所以它将向选项卡控件发送WM_CTLCOLORSTATIC消息。如果对选项卡控件进行子类化,则可以捕获此消息并修改其颜色。但请注意,在启用视觉样式的情况下,标签控件不是单一颜色 - 它更像是渐变,因此即使返回匹配的纯色也不一定非常好。

答案 1 :(得分:0)

制表符控件并不意味着要成为父母。对于每个标签页,您应该创建一个新的无模式对话框as a sibling to the tab并将静态控件放入其中。如果您遵守以下规则:

  1. 在清单中引用Common Controls v6
  2. 启动时致电InitCommonControlsEx()
  3. 主窗口中没有WS_CLIPCHILDREN
  4. 不处理WM_ERASEBACKGROUND
  5. 在无模式对话框的EnableThemeDialogTexture()处理程序中调用WM_INITDIALOG
  6. 在创建标签页后调用SetWindowPos(tab, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE)(否则它将位于Z顺序的错误末端)

…然后,在XP到10的所有Windows版本上,将使用正确的颜色渐变绘制静态控件,以及无模式对话框中的所有其他控件(复选框,滑块,…)。