MFC入门培训手册范本_第1页
MFC入门培训手册范本_第2页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一.学习 MFC 所应具备的基础知识1. Wn32 程序基础.2. 面向对象与 C+语言基础.1.Win32 程序基础一)几个重要概念:API:系统开放出来给程序员调用的函数.SDK 开发工具包,以 API 编写的程序也叫 SDKS序.MFC 是一个构建在 Windows API 上的 C+类库.Application Framework: 指一个关连,包装良好的类库(MFC 就是一个 FrameWork). GUI:MDI:SDI:UI:二)Win dows 编程模型1) 以消息为基础,事件为驱动.(message base, eve nt drive n)2) 用 Win32 实现” He

2、llo World! ”.3)消息映射模型(message map)- 一个重要的 MFC 概念.1.定义一个消息实体 typdef struct MSGMAP_ENTRY_ 一 一UINT n Message;LONG (*pfn) (HWND, UINT, WPARAM, LPARAM); MSGMAP_ENTRY ;2. 把消息和消息处理函数关联起来 .MSGMAP_ENTRY messageEntries =ff :;Appfc? KmWhdviproE-c-dlLirWindows.ixt工:3:incr:jc::皿紳.:y.l.:L:.=畛祀卫如I.WM L0IJTTGNDOWH奎

3、曲hnn ripfl;lim iir*f尹 tie*WrAPPEXSHHiokhis JzthfeLITICLf!:Skr冃丽 了加问阴二工11也!EL平 :随KEYg/jM |-WM mJT卜iFloop_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 di

4、m(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,wPa

5、ram,lParam);LONG OnCommand(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam)int i;for(i = 0; i -Vncs :WFI I7B)4.Win dows 程序的生死5.空闲的处理 while(1)if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) if (msg.message = WM_QUIT)break;Tran slateMessage();DispatchMessage();elseOnl dle();4)第一个 MFC 程序-“Hello

6、 World!/Hello.hclass CMyApp : public CWinAppWi nMa n. (Tn. T notrlnPrwvr;RQgiist crClasu C 、FCr-*-*t4MZLdlw(4 . p ) jiSh-ewW 1 . . ) jULJ . -X1JW ( . .;) PWhlio (0ecM4iBaaa,ai(MUBO1*k)Trans.h rDliS-p-ELtckiZ-l-see-a.-gie仁 * *J /-._JreUXFI TM客讨田鼻苦鼻vniiUWK-CLOOBJ” -一 Dc&t r-yWri.dl.ovhx*Ak: jdi戸ra

7、 li 1 r :Rr ii m T* f W1 ii1 r a*P r乞巧t1Ca.ira-nEpublic :virtual BOOL InitInstance ();class CMainWindow : public CFrameWndpublic :CMainWindow ();afx_msg void OnLButtonDown(UINT nFlags,CPoint point); afx_msg void OnLButtonUp(UINT nFlags,CPoint point);afx_msg void OnMouseMove(UINT nFlags,CPoint point)

8、; 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 function

9、sBEGIN_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+语言基础.protectedafx_msgvoid OnPaint (

10、);1)成员变量与成员函数 - 封装 class CShapeprivate: int m_nColor; public:virture void Disp lay() cout ”shape n”; int SetColor(int nColor) m_nColor =nColor;2)代码复用 -继承 class CSquare : CShapepublic:virtual void Display() cout m_nColor = nColor;4)虚拟函数与多态1. 如何实现这样一个动作 :CShape shape5; / 包含五个对象分别为正方形 , 矩形,椭圆行, 圆形, 三角行

11、 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 找到虚

12、函数表,再从虚函数表中找出虚函数的地址。当从基类派生时会继承基类的虚函数表,而当派生类改写虚函数时,编译器会用派生类的虚函数地址改写虚函数表。6) 类的静态成员(静态成员函数与静态成员变量)静态成员属于类,而不属于对象。所以可以在还没创建对象之前就处理静态成员。1. 静态变量的初试化静态成员的初始化只能放在实现档中,类的外面。因为放在类的构造函数中或在头文件中都 可能被多次调用。Int Cshape:m_ nStatic = 0;mai n() .2. 静态函数因为静态函数在对象生成之前就已经存在,所以无法处理对象的非静态变量。7) 各种对象的生存周期(构造函数与解析函数)1. 在栈中的对象v

13、oid fun c()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)Jel

14、se if (typeid(CDocument) = typeid(*pObject)Jelse if (typeid(CMyDoc) = typeid(*pObject)JMFCl 勺实现方式DECLARE_DYNCREATE, IMPLEMENT_DYNCREATUntimeClass9)异常处理 try,catch,throwTRYCATCH(type, object)AND_CATCH(type,object)END_CATCHCATCH_ALL(object)AND_CATCH_ALL(object)END_CATCH_ALLEND_TRYTHROW()THROW_LAST()10)

15、 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

16、 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 versionAfxThrowArchiveException (CArchiveException:badSchema); bre

17、ak;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;/CLin

18、e must has a copy constructordelete pLine;更通用的方法是直接调用对象的 Serialize 方法:/SerializeCline line(CPoint(0,0), Cpoint(100,50);line.Serialize(ar); /Deserialize Cline line;line.Serialize(ar);3)Dynamci Creation( 动态生成 )DECLARE_DYNAMIC(CMyClass)IMPLEMENT_DYNAMIC(CMyClass, CBaseClass) run-time access to the clas

19、s name and its positionin the hierarchy diagnostic dumpingeg:dynamically create an object given its run-time class CRuntimeClass *pRuntimeClass =RUNTIME_CLASS(CMyClass); Cobject *pObject = pRuntimeClass-CreateObject();ASSERT(pObject-IsKindOf(RUNTIME_CLASS(CMyClass);4)Diagnostic( 错误诊断 )You must suppl

20、y a CdumpContext argument here the dump output will go. The Debug version of MFCsupplies a predefined CdumpContext object name afxDump that sends output to the debuggerWindow Cperson *pMyPerson = new Cperson;#ifdef _DEBUG pMyPerson-Dump(afxDump)#endif/dump to fileCFile f;if ( !f.Open(“dump.txt ”, Cf

21、ile:modeCreate | Cfile:modeWrite)afxDump “ unable to open file” GetActiveDocument()(CMainFrame *)(CMainFrame *)AfxGetMainWnd()-GetActiveFrame() (CMyView*)(CMainFrame *)AfxGetMainWnd()-GetActiveView()(CMainFrame *)(CMainFrame *)AfxGetMainWnd()-GetActiveWindow() (CMyApp *)AfxGetApp()CFrameWn(元 素CStautsBarCtoolBarCMe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论