MFC的视图View

来源:互联网 发布:蒙泰打印不追加数据 编辑:程序博客网 时间:2024/06/05 11:32

概述

MFC视图(View类)提供一个显示数据的窗口,用于和客户交互,父类是CWnd。

视图的使用:1.定义CView类的子类,实现OnDraw()函数 2.调用Create()函数创建,视图的ID用系统提供的AFX_IDW_PANE_FIRST

视图的销毁:CView::PostNcDestroy()会销毁窗口,delete this;

命令消息的映射:

1.Frame窗口首先收到菜单等命令消息,调用CFrameWnd::OnCmdMsg()函数,在函数中获取Frame窗口的活动视图,调用活动视图的OnCmdMsg()函数。

2.调用Frame的窗口本身的OnCmdMsg()函数,获取当前的App,调用App的OnCmdMsg()函数    View->Frame->App

实例

class CMyView:public CView{virtual void OnDraw(CDC* pDC);DECLARE_MESSAGE_MAP()protected:afx_msg void OnPaint(); };BEGIN_MESSAGE_MAP(CMyView,CView) ON_WM_PAINT()END_MESSAGE_MAP()void CMyView::OnDraw(CDC* pDC) {pDC->TextOutW(100,100,L"Hello OnDraw");}void CMyView::OnPaint(){PAINTSTRUCT ps={0};CDC* pDC=BeginPaint(&ps);OnDraw(pDC);pDC->TextOutW(100,200,L"Hello OnPrint");EndPaint(&ps);} class CMainFrame:public CFrameWnd{public:DECLARE_MESSAGE_MAP()afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);};BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)ON_WM_CREATE()END_MESSAGE_MAP()int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){if (-1==CFrameWnd::OnCreate(lpCreateStruct)){return -1;}//添加视图CMyView* mpWndView=new CMyView;mpWndView->Create(NULL,L"MyView",WS_CHILD|WS_VISIBLE|WS_BORDER,CRect(0,0,100,100),this,AFX_IDW_PANE_FIRST);SetActiveView(mpWndView);//设置为活动窗口return 0;}class MFCViewApp :public CWinApp { public: virtual BOOL InitInstance();  }; BOOL MFCViewApp::InitInstance() { CMainFrame* pFrame=new CMainFrame; pFrame->Create(NULL,L"MFCView"); m_pMainWnd=pFrame; m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); return TRUE; } MFCViewApp theApp;

结果:

原创粉丝点击