[英]MFC: How do I change background color in MFC?
默认情况下,颜色为灰色,我想更改它。我在MainFarm.h
中使用OnEraseBkgnd
,这可以工作,它会更改颜色,但是当代码 mfc 更远的地方再次将其更改为灰色时。
BOOL CMainFrame::OnEraseBkgnd(CDC* pDC)
{
CBrush backBrush(RGB(0, 0, 0));
CBrush* pPrevBrush = pDC->SelectObject(&backBrush);
CRect rect;
pDC->GetClipBox(&rect);
pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(),
PATCOPY);
pDC->SelectObject(backBrush);
return TRUE;
}
MDI 应用程序不仅有框架 windows 和子框架 windows。 它还有一个客户端 window。 客户端 window 处理大部分管理子 windows。
但它也绘制了框架 window 的客户区。 这是在您在框架 window 中处理OnEraseBkgnd
时绘制背景后绘制灰色背景的原因。
假设你的框架是从CMDIFrameWndEx
派生的,你应该有一个OnEraseMDIClientBackground
虚拟 function ,你可以覆盖它来做你想要的绘图。
如果您正在修改旧代码,则它可能使用了足够旧的 MFC 版本,但该版本不存在。 If so, you need to create a window class and do the correct drawing in its onEraseBkgnd
, create an instance of that in your frame window class, and in the frame window's onCreate
, you subclass the MDI child window:
class MyBkgndErase : public CWnd {
public:
BOOL OnEraseBkgnd(CDC* pDC) {
// drawing code here
}
};
class MyFrameWnd : public CMDIFrameWnd {
MyBkgndErase eraser;
int OnCreate(LPCREATESTRUCT lpCreateStruct) {
// there's probably existing code you'll want to preserve here
eraser.SubclassWindow(m_hWndMDIClient);
return 0;
}
};
或者,如果您可以切换到更新版本的 MFC,您可能只需将框架窗口的父 class 从CMDIFrameWnd
更改为CMDIFrameWndEx
,并使用OnEraseMDIClientBackground
(这无疑更容易)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.