如何在CMDIFrameWnd 窗口中添加自绘图片呢?其实绘图很简单.
有两种方法:
第一种就是截取MDICLIENT窗口的消息,不过这种只适合ATL或者WTL程序中控制,要是在MFC中效果不是很好.
第二种方法就是自定义一个绘图类,来子类化MDICLIENT窗口这样就可以达到效果了.
方法如下:
1)定义一个类CMDIClient来用于子类化
#include "atlimage.h"
class CMDIClient : public CWnd
{
DECLARE_DYNAMIC(CMDIClient)
public:
CImage m_bmpBack;
public:
CMDIClient();
virtual ~CMDIClient();
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
};
//就在这里实现绘图,但一定要return TRUE,否则又被重画掉
BOOL CMDIClient::OnEraseBkgnd(CDC* pDC)
{
pDC->SetStretchBltMode(HALFTONE);
CRect rect;
GetClientRect(&rect);
m_bmpBack.Draw(pDC->m_hDC,rect);
return TRUE;
//return CWnd::OnEraseBkgnd(pDC);
}
2)那么有了这个类,如何子类化,方法如下:
在CMainFrame中定义这个类对象
class CMainFrame : public CMDIFrameWnd
{.....
CMDIClient m_MDIClient;
......
};
//在创建Frame的时候就子类化
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
.........
//子类化MDIClient窗口,使它使用CMDIClient类来处理数据
if(m_MDIClient.SubclassWindow(m_hWndMDIClient)==-1)
{
TRACE("Fail to subclass MDI client window\n");
return -1;
}
}
下载源代码