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);
}
目录
相关文章
|
C++ Windows
09 MFC - 创建基于对话框的 MFC 应用程序框架
09 MFC - 创建基于对话框的 MFC 应用程序框架
93 0
|
6月前
MFC视图窗口动态分割
MFC视图窗口动态分割
56 2
|
6月前
|
Windows
MFC多文档视图
MFC多文档视图
33 0
|
6月前
MFC单文档视图架构
MFC单文档视图架构
58 0
|
6月前
MFC的视图窗口
MFC的视图窗口
37 0
|
6月前
MFC文档类视图接收字符串
MFC文档类视图接收字符串
39 0
19 MFC - 标签控件 CTabCtrl
19 MFC - 标签控件 CTabCtrl
66 0
MFC文档视图
MFC文档视图
51 0
MFC文档视图
|
索引
MFC 树型视图三个结构:TVINSERTSTRUCT、TVITEM、NMTREEVIEW
MFC 树型视图三个结构:TVINSERTSTRUCT、TVITEM、NMTREEVIEW
327 0
MFC 树型视图三个结构:TVINSERTSTRUCT、TVITEM、NMTREEVIEW
QTQuick控件基础(3)视图
1、spliteview 2、stackview ApplicationWindow {visible: truewidth: 640height: 480MouseArea{anchors.fill: parentacceptedButtons: Qt.
1292 0