繁体   English   中英

MFC:如何更改 MFC 中的背景颜色?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM