C++ 更改选项卡颜色c和x2B中的静态背景+;

C++ 更改选项卡颜色c和x2B中的静态背景+;,c++,winapi,widget,C++,Winapi,Widget,我有“创建”选项卡 INITCOMMONCONTROLSEX icc; icc.dwSize = sizeof(INITCOMMONCONTROLSEX); icc.dwICC = (DWORD)ICC_TAB_CLASSES; InitCommonControlsEx(&icc); icc.dwICC = (DWORD)ICC_LISTVIEW_CLASSES; InitCommonControlsEx(&

我有“创建”选项卡

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具有灰色背景。我怎样才能给它上色呢。
谢谢

因为您已将静态控件设置为选项卡的子控件,它将向选项卡控件发送WM\u CTLCOLORSTATIC消息。如果对选项卡控件进行子分类,则可以捕获此消息并修改其颜色。但是,请注意,启用视觉样式后,选项卡控件不是单一的平面颜色,而是渐变色,因此即使返回匹配的纯色也不一定看起来很好。

选项卡控件并不意味着是父控件。对于每个选项卡页,您应该创建一个新的无模式对话框,并将静态控件放在其中。如果您遵守以下规则:

  • 在清单中引用通用控件v6
  • 启动时调用
    InitCommonControlsEx()
  • 主窗口中没有
    WS\u CLIPCHILDREN
  • 不处理
    WM\u擦除背景
  • 在无模式对话框的
    WM_INITDIALOG
    处理程序中调用
    enableMetedialogTexture()
  • 创建选项卡页面后,调用设置窗口位置(选项卡,HWND_TOP,0,0,0,SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE)(否则它将位于Z顺序的错误端)
  • …然后,您的静态控件将以正确的颜色渐变绘制,无模式对话框中的所有其他控件(复选框、滑块等)也将以正确的颜色渐变绘制,在XP到10的所有Windows版本上。

    -这是用于选项卡控件,用于静态控件=>子类控件,并实现WM_擦除背景,示例如下: