MFC文档视图

女孩可以在社会上遇到比在学校更优秀的男生,而男生在社会上或许再也遇不到比学校里更优秀的女生了。。。

---- 网易云热评

一、作用

文档就是提供用于管理数据模块

文档类CDocument,父类CCmdTarget,封装了文档类和视图类关系

二、实例

1、创建桌面应用程序,导入头文件

2、添加类

class CMyDoc :public CDocument {};//派生CEditView不用重写Ondrawclass CMyView :public CEditView {    DECLARE_DYNCREATE(CMyView)};IMPLEMENT_DYNCREATE(CMyView, CEditView)class CMyFrameWnd :public CFrameWnd {};class CMyWinApp :public CWinApp {public:    virtual BOOL InitInstance();};CMyWinApp theApp;

3、重写InitInstance函数

BOOL CMyWinApp::InitInstance(){    CMyFrameWnd* pFrame = new CMyFrameWnd;    //文档类的对象地址    CCreateContext cct;    //视图类的静态变量    cct.m_pCurrentDoc = new CMyDoc;    cct.m_pNewViewClass = RUNTIME_CLASS(CMyView);//loadframe自动重写了Oncreate函数    pFrame->LoadFrame(IDR_MENU1,WS_OVERLAPPEDWINDOW,NULL,&cct);    m_pMainWnd = pFrame;    pFrame->ShowWindow(SW_SHOW);    pFrame->UpdateData();    return TRUE;}

4、运行结果

5、证明父类窗口帮我们处理了OnCreate函数:通过框架重写Oncreate函数,返回0,编辑窗口将不会出现

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) {        return CFrameWnd::OnCreate(pcs);    //return 0;}

6、证明视图类窗口帮我们绑定了视图类和文档类对象,在视图类创建消息机制

class CMyView :public CEditView {    DECLARE_MESSAGE_MAP()    DECLARE_DYNCREATE(CMyView)public:    afx_msg int OnCreate(LPCREATESTRUCT pcs);};BEGIN_MESSAGE_MAP(CMyView,CEditView)    ON_WM_CREATE()END_MESSAGE_MAP()IMPLEMENT_DYNCREATE(CMyView, CEditView)int CMyView::OnCreate(LPCREATESTRUCT pcs) {//必须调用父类,否则报错    return CEditView::OnCreate(pcs);    //return 0;}

三、命令消息(WM_COMMAND)的处理顺序,都写上函数,看看那个先弹出

View-->Document-->Frame-->App  class CMyDoc :public CDocument {    DECLARE_MESSAGE_MAP()public:    afx_msg void xinjian();};BEGIN_MESSAGE_MAP(CMyDoc, CDocument)    ON_COMMAND(ID_XJ,xinjian)END_MESSAGE_MAP()void CMyDoc::xinjian() {    AfxMessageBox("文档处理消息了");}

四、自己定义一个类,先执行消息处理函数

1、声明自己的类,并添加消息处理机制

class CGyb :public CCmdTarget {    DECLARE_MESSAGE_MAP()public:    afx_msg void xinjian();};BEGIN_MESSAGE_MAP(CGyb,CCmdTarget)    ON_COMMAND(ID_XJ,xinjian)END_MESSAGE_MAP()void CGyb::xinjian() {    AfxMessageBox("我自己处理了函数");}

2、在框架类声明OnCmdMsg函数

virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO*  pHandlerInfo);3、实现OnCmdMsg函数BOOL CMyFrameWnd::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO*  pHandlerInfo) {    CGyb  gyb;    if (gyb.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo)) {        return TRUE; //如果找到执行自己的函数    }    //如果没找到,执行父类函数,按原来顺序执行    return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);}

欢迎关注公众号:顺便编点程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web安全工具库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值