MFC文档视图

简介: MFC文档视图

一、作用


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


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


二、实例


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


2、添加类


class CMyDoc :public CDocument {
};
//派生CEditView不用重写Ondraw
class 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、运行结果


0a2653c851af460fa595bd959398a8f1.png


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);
}
目录
相关文章
|
7月前
|
数据库 索引
【qt】初识模型和视图1
【qt】初识模型和视图
35 0
|
7月前
|
索引
【qt】初识模型和视图2
【qt】初识模型和视图
30 0
|
7月前
|
Windows
MFC多文档视图
MFC多文档视图
36 0
|
7月前
MFC单文档视图架构
MFC单文档视图架构
62 0
|
7月前
MFC的视图窗口
MFC的视图窗口
42 0
|
7月前
MFC文档类视图接收字符串
MFC文档类视图接收字符串
43 0
MFC文档视图
MFC文档视图
54 0
MFC文档视图
|
C语言 Perl
博途软件的基本操作,快捷操作有哪些?什么是博途视图和项目视图?
博途软件开发之初就把直观、高效、可靠作为非常重要的关键因素,持续走访了世界多数国家的工程师并着眼未来,博途软件在界面设置、窗口规划布局等多方面进行优化布置。如何快速了解博途软件的界面、操作规则是提高效率的关键环节。本节我们主要来介绍博途软件的基本操作。
博途软件的基本操作,快捷操作有哪些?什么是博途视图和项目视图?
|
索引
MFC 树型视图三个结构:TVINSERTSTRUCT、TVITEM、NMTREEVIEW
MFC 树型视图三个结构:TVINSERTSTRUCT、TVITEM、NMTREEVIEW
356 0
MFC 树型视图三个结构:TVINSERTSTRUCT、TVITEM、NMTREEVIEW
|
C#
艾伟_转载:WPF/Silverlight陷阱:XAML自定义控件的嵌套内容无法通过名称访问
为了说明这个问题,假定我们需要实现一个具有特殊功能的按钮控件。编写Xaml文件如下: Button> 对 Code Behind类,唯一的改动是把向导生成的基类从UserControl改成Button: public partial class XamlButton : Button{    ...
1085 0