相关类
CView及其子类,父类为CWnd类,封装了关于视图窗口的各种操作,以及和文档类的数据交互。
视图窗口的使用
1.定义一个自己的视图类(CMyView),派生自CView,并重写父类成员纯虚函数OnDraw。
2.其余框架类和应用程序类代码不变(可以参考前面的文章)
3.在处理框架窗口的WM_CREATE消息时,定义CMyView类对象,并调用Create函数创建视图窗口。
代码示例
cpp
#include <afxwin.h>
#include "resource.h"
class CMyView : public CView {
public:
void OnDraw(CDC* pDC);
DECLARE_MESSAGE_MAP()
afx_msg void OnNew();
};
//如果想要使用OnDraw方法的话,将ON_WM_PAINT()注释掉
void CMyView::OnDraw(CDC* pDC) {
pDC->TextOut(100, 100, _T("CMyView::OnDraw()"));
}
class CMyFrameWnd :public CFrameWnd {
DECLARE_MESSAGE_MAP()
public:
afx_msg int OnCreate(LPCREATESTRUCT pcs);
};
BEGIN_MESSAGE_MAP(CMyFrameWnd, CFrameWnd)
ON_WM_CREATE()
END_MESSAGE_MAP()
int CMyFrameWnd::OnCreate(LPCREATESTRUCT pcs) {
CMyView* pView = new CMyView;
// AFX_IDW_PANE_FIRST : 将视图窗口平铺到框架窗口
pView->Create(NULL, _T("MFCView"), WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(0, 0, 200, 200), this, AFX_IDW_PANE_FIRST);
//加上这行代码之后默认就会将视图激活,表示CMyView中的OnNew函数生效
m_pViewActive = pView;
return CFrameWnd::OnCreate(pcs);
}
class CMyWinApp : public CWinApp {
public:
virtual BOOL InitInstance();
};
BOOL CMyWinApp::InitInstance() {
CMyFrameWnd* pFrame = new CMyFrameWnd;
pFrame->Create(NULL, "MFCView", WS_OVERLAPPEDWINDOW, CFrameWnd::rectDefault, NULL, (CHAR*)IDR_MENU1);
m_pMainWnd = pFrame;
pFrame->ShowWindow(SW_SHOW);
pFrame->UpdateWindow();
return TRUE;
}
CMyWinApp theApp; BEGIN_MESSAGE_MAP(CMyView, CView)
ON_COMMAND(ID_NEW, &CMyView::OnNew)
END_MESSAGE_MAP()
void CMyView::OnNew()
{
AfxMessageBox("ON_NEW");
}