注册 登录
编程论坛 VC++/MFC

更改MDI中主框架窗口MainFrame的背景

hlmzrdongdong 发布于 2011-11-29 19:41, 2350 次点击
应用Wizard生成的MDI程序中Frame的背景是黑色的,本文将讨论如何更改该背景。需要之处的是Frame的客户区并不是由MainFrame维护的,其背景窗口的句柄为m_hWndMDIClient。故而更改背景的思路是将该句柄指向我们自行设计的窗口类。
首先新建一个窗口类,继承于CWnd,然后重写OnEreaseBkgnd()函数。
程序代码:
class CFmBk : public CWnd  
{  
// Construction  
public:  
    CFmBk();  
  
// Attributes  
public:  
  
// Operations  
public:  
  
// Overrides  
   
// ClassWizard generated virtual function overrides  
   
//{{AFX_VIRTUAL(CFmBk)  
   
//}}AFX_VIRTUAL  
  
// Implementation  
public:  
    virtual ~CFmBk();  
  
    // Generated message map functions  
protected:  
    //{{AFX_MSG(CFmBk)  
    afx_msg BOOL OnEraseBkgnd(CDC* pDC);  
    //}}AFX_MSG  
    DECLARE_MESSAGE_MAP()  
};  



程序代码:
#include "stdafx.h"  
#include "ChgFrmBk.h"  
#include "FmBk.h"  
  
#ifdef _DEBUG  
#define new DEBUG_NEW  
#undef THIS_FILE  
static char THIS_FILE[] = __FILE__;  
#endif  
  
/////////////////////////////////////////////////////////////////////////////  
// CFmBk  
  
CFmBk::CFmBk()  
{  
}  
  
CFmBk::~CFmBk()  
{  
}  
  
  
BEGIN_MESSAGE_MAP(CFmBk, CWnd)  
    //{{AFX_MSG_MAP(CFmBk)  
    ON_WM_ERASEBKGND()  
    //}}AFX_MSG_MAP  
END_MESSAGE_MAP()  
  
  
/////////////////////////////////////////////////////////////////////////////  
// CFmBk message handlers  
  
BOOL CFmBk::OnEraseBkgnd(CDC* pDC)   
{  
    // TODO: Add your message handler code here and/or call default  
    CRect rt;  
    GetClientRect(&rt);  
    pDC->FillSolidRect(&rt,RGB(255,0,0));//设置背景为红色  
    return true;  
}  

准备该类后,在CMainFrame中重写OnCreateClient()函数:
程序代码:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)   
{  
    // TODO: Add your specialized code here and/or call the base class  
    if(CMDIFrameWnd::OnCreateClient(lpcs,pContext))  
    {  
        m_FmClient.SubclassWindow(m_hWndMDIClient);  
        return TRUE;  
    }  
  
      
    return FALSE;  
}
0 回复
1