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
- MFC第七天
- MFC第七天
- 第七天
- 第七天
- 第七天
- 第七天
- 第七天
- 第七天
- 第七天
- 第七天
- 第七天
- 第七天
- 第七天
- 第七天
- 第七天
- php七天入门教程第七天
- 七天MFC速成
- 世界杯第七天
- 构造函数与其他类方法的区别
- Struts2的ActionContext
- 设计模式--工厂模式和抽象工厂模式
- MYSQL存储过程&&JAVA读取结果集
- c++builder 中设置 excel表中单元格为超链接
- MFC第七天
- AbstractQueuedSynchronizer
- java 将图片存入mysql数据库中
- 递归实现幂次方
- http请求/响应报文及工作原理
- 使用Camera实现三维动画
- 给定一个整数sum, 从有N个有序元素的数组中寻找元素a,b,使得a+b的结果最接近sum
- java特性
- P52 第26题 三角形的图案