c++ - 设置背景颜色 CMDIFrameWnd

标签 c++ user-interface mfc colors

有没有办法在 MFC (2005) 中更改 MDIParent 窗口的背景颜色?

我试过拦截 ON_WM_CTLCOLOR 和 ON_WM_ERASEBKGND 但都不起作用。 OnEraseBkgnd 确实有效,但随后它会被标准的 WM_CTL 颜色覆盖。

干杯

最佳答案

创建一个派生CWnd的类(例如CClientWnd)

在您的 CWnd 派生类句柄中

afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnPaint(void);
afx_msg void OnSize(UINT nType, int cx, int cy);

您需要以下消息映射条目:

ON_WM_ERASEBKGND()
ON_WM_PAINT()
ON_WM_SIZE()

在 OnEraseBkgnd 中只需返回 TRUE,您将完成 OnPaint 中的所有工作

在 OnPaint 中,随心所欲。要填充颜色,您可以这样做

CBrush brush;
brush.CreateSolidBrush(COLORREF(RGB( 80, 160, 240 )));

CRect clientRect;
GetClientRect(clientRect);

CPaintDC dc(this);
dc.FillRect(clientRect, &brush);

在 OnSize 中,调用基类,然后无效以强制重绘:

CWnd::OnSize(nType, cx, cy);
Invalidate(FALSE);

在你的主机中,声明一个成员CClientWnd(例如m_clientWnd)

在你的主机的OnCreate中,首先调用父类(super class),然后

m_clientWnd.SubclassWindow(m_hWndMDIClient);

关于c++ - 设置背景颜色 CMDIFrameWnd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/199876/

相关文章:

windows - 如何从 PreTranslateMessage(MSG*pMsg) 中的 WM_KEYDOWN 中提取字符

c++ - CAsyncSocket receive()返回值

winapi - 如何在禁用组框时禁用组框文本?

C++ struct直接跟括号组成仿函数?

c++ - Matrix 中没有 'operator *' 的匹配运算符

c++ - 将图像添加到 Pong 游戏

ios - 根据每个段中的标题更改分段控件的宽度?

c++ - 使用结构作为私有(private)成员在链接列表类中定义 ListNode

python - WxPython:符合“确定”/“取消”按钮顺序的跨平台方式

user-interface - Modelica:检查可替换包或模型的相等性