1

我有创建标签

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

4

2 回答 2

2

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

于 2012-08-28T07:43:49.207 回答
0

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

  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 版本上。

于 2019-10-19T01:16:10.377 回答