MFC第七天

来源:互联网 发布:汇贷天下网络贷款 编辑:程序博客网 时间:2024/05/22 01:32

多文档视图应用程序
    1,概念
    可以同时管理多个文档,例如:word excel office等
    2.相关类
    CWinApp
    CMDIFrameWnd   ---对文档主框架类
    CMDIChildWnd   ---多文档子框架类
    CView/CEditView
    CMultiDocTemplate  --多文档程序模板

    CDocument
    主框架 子框架 资源不一样 要两套资源

    3多文档视图程序创建过程
    3.1 创建多文档模板类,并且添加到应用程序
    3.2 创建和显示主框架窗口
    3.3 调用OnFileNew函数,创建其他文档(文档,子框架,视图)
       3.3.1使用多文档模板创建模板对象
       3.3.2创建子框架对象及窗口
       3.3.3在子框架窗口的OnCreate函数,创建视图对象和窗口
       3.3.4在视图窗口的OnCreate函数,文档与视图相互保存对方的地址。

常用函数:
    AfxGetMainWnd   获取程序主框架窗口
    AfxGetApp    获取theApp应用程序对象
    CFrameWnd::GetActiveFrame    在多文档中获取当前活动的子框架窗口
    CFrameWnd::GetActiveView                            视图窗口
        多文档  子框架
        单文档  主框架
    
    CView::GetDocument    获取视图关联的文档

    CDocument::GetDocTemplate  用于获取与文档关联的文档模板
    CDocTemplate::CreateNewFrame    创建框架窗口
    CDocTemplate::InitialUpdateFrame   初始化更新框架窗口

    CDocument::UpdateAllViews       用来通知所有视图数据更新
    引起所有视图的OnUpdate函数调用    当文档数据发生变化后调用
    CView::OnInitialUpdate       视图类初始化函数




MFC绘图
    CDC类 绘图设备类(纸),
    CGdiObject  绘图对象(笔)

    CDC使用
    1 创建    CDC::CreateDC
        virtual BOOL CreateDC( LPCTSTR lpszDriverName, LPCTSTR lpszDeviceName,
        LPCTSTR lpszOutput, const void* lpInitData );
    2 使用    
    3 删除    CDC::DeleteDC

    CWindowDC,    父类CDC类   表示窗口dc,包括窗口客户区和非客户去   FrameWnd
    CClientDC     父类CDC     表示窗口的客户区dc            Window
    CPaintDC     父类CDC      表示窗口客户区   只能在wm_PAINT消息中使用
    CMetaFileDC    父类是CDC    用来保存绘制命令

    CMetaFileDC    使用步骤    元文件dc
    创建  CMetaFileDC::Create
    绘制  CDC::TextOut/MoveTo/LineTo  等函数
    关闭  返回句柄
        HMETAFILE CMetaFileDC::Close( );
    使用    CDC::PlayMetaFile
    删除    BOOL DeleteMetaFile(
            HMETAFILE hmf   // handle to Windows-format metafile
            );



CPen 画笔  定义现款 线型  线的颜色
CBrush  画刷  颜色画刷 委托画刷
CFont  字体
CBitmap   位图
CRgn  复杂区域,可以讲两个图形进行稽核运算,课多次运算,形成复杂程序

CPalette  调色板,用来设置颜色


主要代码

MFCMDI.cpp

// MFCMDI.cpp : Defines the entry point for the application.//#include "stdafx.h"#include "resource.h"class CMdiDoc:public CDocument{DECLARE_DYNCREATE(CMdiDoc)public:CString m_strContent;};IMPLEMENT_DYNCREATE(CMdiDoc,CDocument)class CMdiView:public CEditView{DECLARE_DYNCREATE(CMdiView)DECLARE_MESSAGE_MAP()public:afx_msg void OnEnChange();virtual void OnUpdate( CView* pSender, LPARAM lHint, CObject* pHint ); };BEGIN_MESSAGE_MAP(CMdiView,CEditView)ON_CONTROL_REFLECT_EX(EN_CHANGE,OnEnChange)END_MESSAGE_MAP()IMPLEMENT_DYNCREATE(CMdiView,CEditView)void CMdiView::OnEnChange(){CMdiDoc *pMdiDoc=(CMdiDoc*)GetDocument();GetWindowText(pMdiDoc->m_strContent);pMdiDoc->UpdateAllViews(this);}void CMdiView::OnUpdate( CView* pSender, LPARAM lHint,   CObject* pHint ){CMdiDoc *pDoc=(CMdiDoc*)GetDocument();//get documentSetWindowText(pDoc->m_strContent);//show content}class CChildFrame:public CMDIChildWnd{DECLARE_DYNCREATE(CChildFrame)};IMPLEMENT_DYNCREATE(CChildFrame,CMDIChildWnd)class CMainFrame:public CMDIFrameWnd{DECLARE_MESSAGE_MAP()public:afx_msg void OnNewView();};BEGIN_MESSAGE_MAP(CMainFrame,CMDIFrameWnd)ON_COMMAND(ID_NEWVIEW,OnNewView)END_MESSAGE_MAP()void CMainFrame::OnNewView(){CFrameWnd* pFrameWnd=GetActiveFrame();if(!pFrameWnd->IsKindOf(RUNTIME_CLASS(CChildFrame))){return ;}CView *pView=pFrameWnd->GetActiveView();CDocument *pDoc=pView->GetDocument();CDocTemplate* pTemplate=pDoc->GetDocTemplate();CChildFrame *pNewFrame=(CChildFrame*)pTemplate->CreateNewFrame(pDoc,NULL);pTemplate->InitialUpdateFrame(pNewFrame,NULL);}class CMdiApp:public CWinApp{public:virtual BOOL InitInstance();DECLARE_MESSAGE_MAP()public:afx_msg void OnNew();};BEGIN_MESSAGE_MAP(CMdiApp,CWinApp)ON_COMMAND(ID_NEW,OnNew)END_MESSAGE_MAP()CMdiApp theApp;BOOL CMdiApp::InitInstance(){CMultiDocTemplate *pTemplate=new CMultiDocTemplate(IDR_MENUCHILD,RUNTIME_CLASS(CMdiDoc),RUNTIME_CLASS(CChildFrame),RUNTIME_CLASS(CMdiView));AddDocTemplate(pTemplate);CMainFrame *pFrame=new CMainFrame;pFrame->LoadFrame(IDR_MENUMAIN);m_pMainWnd=pFrame;pFrame->ShowWindow(SW_SHOW);pFrame->UpdateWindow();OnFileNew();//OnFileNew();return TRUE;}void CMdiApp::OnNew(){OnFileNew();}


0 0
原创粉丝点击