有没有办法在 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/