【问题标题】:c++ win32: how to set back color of a window?c++ win32:如何设置窗口的背景颜色?
【发布时间】:2011-03-19 01:56:18
【问题描述】:

我可以在注册课程时设置背景颜色,例如:

wincl.hbrBackground = CreateSolidBrush(RGB(202, 238, 255));
RegisterClassEx(&wincl);

但是我将如何对使用 CreateWindow 函数创建的任何窗口执行此操作? 就像我的主窗口上的按钮一样,我启用了视觉样式,我可以注意到按钮后面的窗口默认灰色背景色。

不要告诉我我必须为我的控件上的所有窗口过程设置 WindowsLong 并拦截 WM_PAINT :(

【问题讨论】:

    标签: c++ c winapi


    【解决方案1】:

    所有的 Windows 控件都会向其父级发送一条消息,以获取用于填充其背景的画笔。 假设您将画笔句柄的副本保存在某处,您可以在 WindowProc 或 DialogProc 中执行以下操作,以确保使用正确的背景画笔绘制所有内容。

    case WM_CTLCOLORSTATIC:
    case WM_CTLCOLORBTN:
      HDC hdc;
      HWND hwndCtl;
      POINT pt;
      hdc = (HDC)wParam;
      hwndCtl = (HWND)lParam;
      pt.x = 0;
      pt.y = 0;
      MapWindowPoints(hwndCtl,_hwnd,&pt,1);
      x = -pt.x;
      y = -pt.y;
      SetBrushOrgEx(hdc,x,y,NULL);
      return (INT_PTR)_skinBrush;
    

    【讨论】:

      【解决方案2】:

      如果您想要一个自定义窗口,您可以创建自己的窗口类来绘制该类型的窗口。为 wm_paint 实现一个处理程序并为窗口绘制任何你想要的东西。有很多教程可用。

      【讨论】:

        猜你喜欢
        • 2021-10-02
        • 1970-01-01
        • 2011-09-12
        • 2011-03-28
        • 1970-01-01
        • 2011-11-24
        • 1970-01-01
        • 2015-10-23
        • 2011-01-07
        相关资源
        最近更新 更多