




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一.学习MFC所应具备的基础知识1.Win32程序基础.2.面向对象与C+语言基础.1.Win32程序基础一) 几个重要概念:API:系统开放出来给程序员调用的函数.SDK:开发工具包,以API编写的程序也叫SDK程序.MFC:是一个构建在Windows API上的C+类库.Application Framework:指一个关连,包装良好的类库(MFC就是一个FrameWork).GUI:MDI:SDI:UI:二)Windows 编程模型1)以消息为基础,事件为驱动.(message base, event driven)2)用Win32 实现”Hello World!”.3)消息映射模型(message map)-一个重要的MFC概念.1.定义一个消息实体typdef struct MSGMAP_ENTRY_UINT nMessage;LONG (*pfn) (HWND, UINT, WPARAM, LPARAM); MSGMAP_ENTRY ;2.把消息和消息处理函数关联起来.MSGMAP_ENTRY messageEntries =WM_CREATE, OnCreate,WM_PAINT, OnPaint,WM_SIZE, OnSize,WM_COMMAND, OnCommand,WM_CLOSE, OnClose,WM_DESTROY, OnDestroy;MSGMAP_ENTRY commandEntries =IDM_ABOUT, OnAbout,IDM_EXIT, OnExit,#define dim(x) (sizeof(x)/sizeof(x0);3.更好的消息处理函数LRESULT CALLBACK WndProc(HWND hWnd, UINT nMessage, WPARAM wParam,LPARAM lParam)int i;for (i = 0; i dim(messageEntries); i +)if (nMessage = messageEntriesi.nMessage)return (*messageEntriesi.pfn)(hWnd,nMessage,wParam,lParam);return DefWindowProc(hWnd,nMessage,wParam,lParam);LONG OnCommand(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam)int i;for(i = 0; i dim(commandEntries); i +)if (nMessage = commandEntriesi.nMessage)return (*commandEntriesi.pfn)(hWnd,nMessage,wParam,lParam);return DefWindowProc(hWnd, nMessage,wParam,lParam);LONG OnCreate(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam).LONG OnAbout(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam).4.Windows 程序的生死5.空闲的处理while(1)if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)if (msg.message = WM_QUIT)break;TranslateMessage();DispatchMessage(); elseOnIdle();4)第一个MFC程序- “Hello World!”/Hello.hclass CMyApp : public CWinApppublic: virtual BOOL InitInstance ();class CMainWindow : public CFrameWndpublic: CMainWindow ();protected: afx_msg void OnPaint ();afx_msg void OnLButtonDown(UINT nFlags,CPoint point);afx_msg void OnLButtonUp(UINT nFlags,CPoint point);afx_msg void OnMouseMove(UINT nFlags,CPoint point);afx_msg void OnNcDestroy(); DECLARE_MESSAGE_MAP ();#include #include #include Hello.hCMyApp myApp;/ CMyApp member functionsBOOL CMyApp:InitInstance () m_pMainWnd = new CMainWindow; m_pMainWnd-ShowWindow (m_nCmdShow); m_pMainWnd-UpdateWindow (); return TRUE;/ CMainWindow message map and member functionsBEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd) ON_WM_PAINT ()ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()ON_WM_MOUSEMOVE()ON_WM_NCDESTROY()END_MESSAGE_MAP ()CMainWindow:CMainWindow () Create (NULL, _T (The Hello Application);void CMainWindow:OnNcDestroy()delete this;2.面向对象与C+语言基础.1)成员变量与成员函数-封装class CShapeprivate:int m_nColor;public:virture void Display() cout ”shapen”;int SetColor(int nColor) m_nColor = nColor;2)代码复用-继承class CSquare : CShapepublic:virtual void Display() cout m_nColor = nColor;4)虚拟函数与多态1.如何实现这样一个动作:CShape shape5;/包含五个对象分别为正方形,矩形,椭圆行,圆形,三角行for (int i = 0; i SetPosition();pSquare = (CShape *)&shape;pSquare-SetColor(3);pShape = new CShape();pShape-Display();pSquare-Display();pShape = (CShape *)□pShape-Display();/为什么5)类型与实例剖析1.虚函数表(VTABLE-虚函数的实现基础)每个含虚函数的对象都有一个虚函数表,在内存中所占空间如下:每一个由此派生的类都有一个这样的虚函数表。当调用虚函数时,首先透过vptr找到虚函数表,再从虚函数表中找出虚函数的地址。当从基类派生时会继承基类的虚函数表,而当派生类改写虚函数时,编译器会用派生类的虚函数地址改写虚函数表。6)类的静态成员(静态成员函数与静态成员变量)静态成员属于类,而不属于对象。所以可以在还没创建对象之前就处理静态成员。1.静态变量的初试化静态成员的初始化只能放在实现档中,类的外面。因为放在类的构造函数中或在头文件中都可能被多次调用。Int Cshape:m_nStatic = 0;main().2.静态函数因为静态函数在对象生成之前就已经存在,所以无法处理对象的非静态变量。7)各种对象的生存周期(构造函数与解析函数)1.在栈中的对象 void func()Static int i;i +;Cfoo foo;/对象在栈(stack)中2.在堆中的对象void func()Cfoo *pfoo = new Cfoo;/对象在堆(heap)中3.全局对象(包括全局静态对象)Cfoo foo;在进入程序入口点之前创建;退出程序之前释放。4.局部静态对象 void func()static Cfoo foo;/局部静态对象8)执行期间类型识别C+ 的实现方式#include void process(CObject *pObject)if (typeid(CObject) = typeid(*pObject);else if (typeid(CDocument) = typeid(*pObject);else if (typeid(CMyDoc) = typeid(*pObject);MFC的实现方式DECLARE_DYNCREATE, IMPLEMENT_DYNCREATE与CRuntimeClass9)异常处理try,catch,throwTRYCATCH(type, object)AND_CATCH(type,object)END_CATCHCATCH_ALL(object)AND_CATCH_ALL(object)END_CATCH_ALLEND_TRYTHROW()THROW_LAST()10)template请参考C+手册二.MFC入门MFC概观一.MFC类的层次结构。1.CObject1)RTTI(执行期类型识别)CAge a;a.IsKindOf(RUNTIME_CLASS(CAge)2)Persistence(对象保存)DECLARE_SERIAL(CMYCLASS)IMPLEMENT_SERIAL(CMYCLASS, CBASECLASS, VERSIONABLE_SCHEMA | 2)void Cline:Serialize(CArchive &ar)Cobject:Serialize(ar);/must call parents serialize firstif (ar.IsStoring()arm_Point1;版本控制如下:void CLine:Serialize (CArchive& ar) CObject:Serialize (ar); if (ar.IsStoring () ar m_Point1 m_Point1; break; case 2: / Version 2 CLine ar m_Point1 m_Point2; break; default: / Unknown version AfxThrowArchiveException (CArchiveException:badSchema); break; PS.MFC的CArchives 可以插入和提取CObject的指针, 但不能处理CObject对象。这意味着下面可以正常工作:CLine *pLine = new Cline(CPoint(0, 0), Cpoint(100, 50);ar pLine;但下面不行CLine Line = Cline(CPoint(0, 0), Cpoint(100, 50);ar Line;但可以采用下面的变通方法:/serializeCLine line(CPoint(0, 0), Cpoint(100, 50);ar pLine;Cline line = *pLine; /CLine must has a copy constructordelete pLine;更通用的方法是直接调用对象的Serialize 方法:/SerializeCline line(CPoint(0,0), Cpoint(100,50);line.Serialize(ar);/DeserializeCline line;line.Serialize(ar);3)Dynamci Creation(动态生成)DECLARE_DYNAMIC(CMyClass)IMPLEMENT_DYNAMIC(CMyClass, CBaseClass)run-time access to the class name and its position in the hierarchydiagnostic dumpingeg:dynamically create an object given its run-time classCRuntimeClass *pRuntimeClass = RUNTIME_CLASS(CMyClass);Cobject *pObject = pRuntimeClass-CreateObject();ASSERT(pObject-IsKindOf(RUNTIME_CLASS(CMyClass);4)Diagnostic(错误诊断)You must supply a CdumpContext argument here the dump output will go. The Debug version of MFC supplies a predefined CdumpContext object name afxDump that sends output to the debugger WindowCperson *pMyPerson = new Cperson;#ifdef _DEBUGpMyPerson-Dump(afxDump)#endif/dump to fileCFile f;if ( !f.Open(“dump.txt”, Cfile:modeCreate | Cfile:modeWrite)afxDump “unable to open file” GetActiveDocument()(CMainFrame *)(CMainFrame *)AfxGetMainWnd()-GetActiveFrame()(CMyView *)(CMainFrame *)AfxGetMainWnd()-GetActiveView()(CMainFrame *)(CMainFrame *)AfxGetMainWnd()-GetActiveWindow()(CMyApp *)AfxGetApp()CFrameWnd 元素CStautsBarCtoolBarCMenu作
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仿古长廊翻修工程方案(3篇)
- 防火涂料工程维护方案(3篇)
- 揣摩《读书:目的和前提》的写作动机
- 方案指的是分部工程吧(3篇)
- 安全教育法规培训课件
- 安全教育案例培训课件
- 安全教育教师培训报道课件
- 牵引电机检修课件
- 农业供应链金融与智慧农业示范园发展评估报告
- 安全教育培训通过率课件
- 医疗质量 岗前培训课件
- (2025秋新版)二年级上册道德与法治全册教案
- 项目可行性研究报告评估咨询管理服务方案投标文件(技术方案)
- 2025年事业单位工勤技能-广东-广东水生产处理工一级(高级技师)历年参考题库典型考点含答案解析
- 2025年全国中小学校党组织书记网络培训示范班在线考试题库及答案
- 【暑假提前学】2025年秋初中语文八年级上册教学课件 第1单元 2《中国人首次进入自己的空间站》
- 重庆重庆中医药学院2025年第二季度考核招聘工作人员笔试历年参考题库附带答案详解
- 四川雅安市人力资源和社会保障局招考聘用编外工作人员【共500题附答案解析】模拟检测试卷
- 火力发电厂运煤设计规程
- 第十章DNA、RNA的生物合成ppt课件
- 3250变压器综合测试仪(共85页)
评论
0/150
提交评论