1.深入浅出MFC内容简介
2.深入浅出谈MFC内容简介
3.å¦ä½çMFCç¨åºä»£ç
深入浅出MFC内容简介
深入浅出MFC的深入内容可以分为四个部分。首先,浅出第一篇旨在建立学习MFC程序设计的码深基础,涵盖了Windows程序的入浅核心概念以及C++的高级主题。这个"学前基础"可能因人而异,出程但根据作者的深入莱州小程序生成平台源码经验和教学,这一部分的浅出建议具有相当的说服力。
第二篇主要介绍Visual C++集成开发环境。码深尽管篇幅简要,入浅主要目的出程是提供基本的环境概述,而不是深入替代Visual C++的完整手册。对于熟悉软件开发的浅出读者,这部分已经足够让他们掌握Visual C++集成环境的码深关键,尽管工具的入浅使用看似简单,但在可视化软件开发中却扮演着至关重要的出程源码起名角色,不容忽视。
接着是第三篇,主要讲解application framework的概念以及MFC的核心结构,这部分关注的是Visual C++工具AppWizard生成的程序代码。作者基于大众化的选项进行讲解,这些选项生成的代码是大多数学习者的基础。
第四部分的feed源码核心是围绕微软附赠的Scribble范例程序展开。通过逐步添加新功能,深入探讨了Runtime Type Information(RTTI)、Dynamic Creation、Persistence(Serialization)、Message Mapping和Command Routing等关键技术。这些技术通常在其他书籍中被略过,因此这部分内容尤其独特和深入。云集 源码
最后几章,作者从Scribble程序中抽离出来,开辟了新的学习领域,为读者提供了更广阔的视野和实践机会。
深入浅出谈MFC内容简介
本书分为四个核心章节,旨在引导读者理解MFC程序设计。首先,蓝牙 源码“学前基础”章节概述了Windows程序的基本概念和C++高级主题,虽然这可能因人而异,但基于作者的个人经验和教学实践,这些内容极具参考价值。 紧接着是第二部分,Visual C++整合环境介绍。虽然篇幅简要,但对软件开发的老手来说,它足以使你熟悉Visual C++集成开发环境。尽管看似基础,但在软件开发中,它却扮演着至关重要的角色,不容忽视。 第三部分深入讨论了application framework的理念以及MFC的核心组件——AppWizard生成的程序代码。我们关注的是大众化选项下的典型产品,以便于理解。 最后,核心技术探索部分以微软附赠的范例程序Scribble为基础,逐步添加新功能,涵盖了Runtime Type Information(RTTI)、Dynamic Creation、Persistence(Serialization)、Message Mapping和Command Routing等关键技术。这些内容在其他书籍中往往被忽视,是本书的独特亮点。 书中还附有一张光盘,其中包含所有原始代码和可执行文件,为读者提供了实践操作的机会。å¦ä½çMFCç¨åºä»£ç
å¦ä½çMFC ç¨åºä»£ç çä¸é¢å 容ä¹åï¼å»ºè®®ä½ å¦å¦ãæ·±å ¥æµ åºMFCãï¼è¿æ¬ä¹¦å¼ºçæ¨èï¼ ç°å¨åªæ¯å个äºè§£ãä¸å¦¨å个ç¥è¯å¤ä»½ï¼ å¨MFC ç¨åºä¸,æ们并ä¸ç»å¸¸ç´æ¥è°ç¨Windows API,èæ¯ä»MFC ç±»å建对象并è°ç¨å±äºè¿äºå¯¹è±¡çæåå½æ°.ä¹å°±æ¯è¯´MFC å°è£ äºWindows API ä½ è¯´ä½ å欢C++èMFC æ¢ä¸ç§è¯´æ³å°±æ¯ä¸ä¸ªç¨C++åçä¸ä¸ªå½æ°åºç¶åä½ æ¥è°ç¨åªä¸è¿è¿ä¸ªç±»ä¸æ¯ä½ åçMFC æä¾æ°ç¾ä¸ªç±»ï¼æéè¦çãä¹æ¯ç¼åä»»ä½VC++åºç¨ç¨åºé½å¿ ä¸å¯å°ç两个类CWinApp åCFrameWnd,è¿ä¸¤ä¸ªç±»æ¯ç¼åå¤æåºå¤§åºç¨ç¨åºçåºç³ã1 å°è£ ç¹æ§ï¼ææMFC æ¡æ¶çæ¯MFC ç±»åºèMFC ç±»åºåæ¯C++çä¸ä¸ªç±»åºãè¿äºç±»å°è£ WIN åºç¨ç¨åºç¼ç¨æ¥å£ï¼OLE(Object Link Embed 对象é¾æ¥åµå ¥) ç¹æ§ï¼ODBC åDAO æ°æ®è®¿é®çåè½ã2 继æ¿ç¹æ§ï¼MFC æ½è±¡åºäºä¼å¤ç±»çå ±åç¹æ§ï¼å¹¶è®¾è®¡åºä¸äºåºç±»ä½ä¸ºå®ç°å ¶ä»ç±»çåºç¡ï¼è¿äºç±»ä¸æéè¦çç±»æ¯ CObject ç±»åCCmdTarget ç±»ï¼ç¨åºåå¯ä»¥ä»éå½çMFC ç±»ä¸æ´¾çåºèªå·±çç±»ï¼å®ç°ç¹å®çåè½è¾¾å°ç¼ç¨çç®çã3 èæåæ¶æ¯æ å°ï¼MFC æ¯ä»¥C++为åºç¡ï¼å½ç¶æ¯æèå½æ°ï¼ä½ä½ä¸ºä¸ä¸ªç¼ç¨æ¡æ¶å¿ é¡»è¦è§£å³çæ¯æçé®é¢ï¼å¦æMFC ä» ä» éè¿èå½æ°æ¥æ¯æå¨æ约æå¿ ç¶ä¼äº§ç大éçèå½æ°è¡¨è¿æ ·ç¼ç¨æ¡æ¶è¿äºèè¿èä¸æ¶èæ´å¤çå åãä½æ¯MFC 建ç«äºæ¶æ¯æ å°æºå¶è¿æ ·éä½äºå åç使ç¨å´å¤§å¤§æé«äºæçæ¶æ¯æ å°æ¯ä¸ä¸ªå°æ¶æ¯åæåå½æ°ç¸äºå ³èç表,å½åºç¨ç¨åºçæ¡æ¶çªå£æ¥æ¶å°ä¸ä¸ªæ¶æ¯æ¶,MFC å°æ索该çªå£çæ¶æ¯æ å°,å¦æåå¨ä¸ä¸ªå¤çæ¶æ¯çå¤çç¨åº,é£ä¹å°±è°ç¨è¯¥å¤çç¨åº.å®éè¿å®æ¥å®ç°æ¶æ¯å°æåå½æ°çæ å°ï¼èä¸è¿äºå½æ°ä¸å¿ æ¯èæçæåå½æ°ï¼è¿æ ·ä¸éè¦ä¸ºæ¶æ¯æ å°å½æ°çæä¸ä¸ªå¾å¤§çèæå½æ°è¡¨(V 表)ï¼èçå åãMFC æ¶æ¯æ å°æºå¶ï¼å°æ¶æ¯ä¸æ¶æ¯å¤çå½æ°è系起æ¥ï¼å½¢æä¸ä¸å¯¹åºçæºå¶ãæ¶æ¯æ å°å®å£°æï¼DECLARE_MESSAGE_MAP å®ä¹ï¼BEGIN_MESSAGE_MAP ON_COMMAND ON_CONTROL ON_MESSAGE END_MESSAGE_MAP MFC 主è¦ç»æé¨åï¼ç±»ãå®åå ¨å±å½æ°ãç±»æ¯MFC ä¸æ主è¦çå 容ãMFC ç±»æ¯ä»¥å±æ¬¡ç»ææ¹å¼ç»ç»èµ·æ¥çãMFC ä¸çç±»åæ两é¨åï¼é¤äºä¸äºè¾ å©ç±»ï¼å¤§å¤æ°çMFC ç±»æ¯ç´æ¥æé´æ¥ä»æ ¹ç±»CObject æ´¾çèæ¥ãMFC å®ä¸»è¦åè½ï¼æ¶æ¯æ å°ãè¿è¡æ¶å¯¹è±¡ç±»åæå¡ãè¯ææå¡ãå¼å¸¸å¤çãMFC 约å®ï¼å ¨å±å½æ°ä»¥"Afx"为åç¼ï¼å ¨å±åé以"afx"为åç¼MFC ç±»çå±æ¬¡å ³ç³»CObject 项ç®ç±»)-CCmdTarget(æ¶æ¯ååºç±»)-{ CWinThread(线ç¨ç±»)-CWinApp(Window åºç¨ç¨åºç±»)CDocument(æ档类)CWnd(çªä½ç±»)-[CFrameWnd(æ¡æ¶ç±»)CView(è§å¾ç±»)]}CObject ç±»ç±äºMFC ä¸å¤§é¨åç±»æ¯ä»CObject 类继æ¿èæ¥çï¼CObject ç±»æè¿°äºå ä¹ææçMFC ç±»çä¸äºå ¬å ±ç¹æ§ï¼CObject 类为ç¨åºåæä¾äºå¯¹è±¡è¯æãè¿è¡æ¶ç±»åè¯å«ååºååçåè½ãCCmdTarget ç±»ç±CObject ç±»ç´æ¥æ´¾çèæ¥ï¼å®è´è´£å°æ¶æ¯åéå°è½å¤ååºè¿äºæ¶æ¯ç对象ãå®æ¯ææè½è¿è¡æ¶æ¯æ å°çMFC ç±»çåºç±»ãCWinApp ç±»å¨ä»»ä½MFC åºç¨ç¨åºä¸æä¸ä» æä¸ä¸ªCWinApp æ´¾çç±»ç对象ï¼å®ä»£è¡¨äºç¨åºä¸è¿è¡ç主线ç¨ï¼ä¹ä»£è¡¨äºåºç¨ç¨åºæ¬èº«ãCWinApp ç±»å代äºWinMain()主å½æ°å¨SDK åºç¨ç¨åºä¸çå°ä½ãä¼ ç»SDK åºç¨ç¨åº WinMain()å½æ°å®æçå·¥ä½ãç°å¨ç±ç±»CWinApp çInitApplication()ï¼ InitInstance()åRun()ä¸ä¸ªæåå½æ°æ¿æ ãCWnd ç±»ç±CCmdTarget ç±»ç´æ¥æ´¾çèæ¥ï¼è¯¥ç±»åå ¶æ´¾çç±»çå®ä¾æ¯ä¸ä¸ªçªå£ãCWnd 类代表äºMFC ä¸æåºæ¬çGUI 对象ï¼å®æ¯ä¸ä¸ªåè½æå®åãæåå½æ°æå¤çMFC ç±»ãCFrameWnd ç±»æ¯CWnd ç±»çæ´¾çç±»ï¼ä¸»è¦ç¨æ¥æ管ä¸ä¸ªçªå£ï¼å®å代äºSDK åºç¨ç¨åºä¸çªå£å½æ° WndProc()çå°ä½ãCFrameWnd ç±»ç对象æ¯ä¸ä¸ªæ¡æ¶çªå£ï¼å æ¬è¾¹æ¡ãæ é¢æ ãèåãæ大åæé®ãæå°åæé®åä¸ä¸ªæ¿æ´»çè§å¾ãCDocument ç±»å¨åºç¨ç¨åºä¸ä½ä¸ºç¨æ·æ档类çåºç±»ï¼å®ä»£è¡¨äºç¨æ·åå¨ææå¼çä¸ä¸ªæ件ãCView ç±»æ¯ MFC ä¸ä¸ä¸ªå¾åºæ¬çç±»ï¼å®ä½ä¸ºå ¶å®MFC è§å¾ç±»åç¨æ·è§å¾æ´¾çç±»çåºç±»ãä» API ç¼ç¨å°MFC ç¼ç¨çè¿æ¸¡ï¼WinMain(){ åå§åWNDCLASS 注åçªä½ç»æå建çªå£-åºç¨ç¨åºç±»CWinApp æ¾ç¤ºçªå£æ¶æ¯å¾ªç¯}WndProc(){ switch(â¦){ caseï¼â¦}- æ¡æ¶çªå£ç±»CFrameWnd}MFC Object åWindows Object ç对åºå ³ç³»ï¼æè¿° Windows å¥æMFC Object çªå£HWND CWnd 设å¤ä¸ä¸æHDC CDC èåHMENU CMenu ç¬HPEN CPen å·åHBRUSH CBrush åä½HFONT CFont ä½å¾HBITMAP CBitmap å¥æ¥åSOCKET CSocket ä¸ãæå·¥å建ä¸ä¸ªMFC åºç¨ç¨åºï¼æ³¨æï¼å建 MFC ç¨åº,è¦å建ä¸ä¸ªWin 空项ç®,并è¦éæ©é¡¹ç®å±æ§ä¸ç"å¨å ±äº«DLL æ件ä¸ä½¿ç¨MFC,ç¶åæ°å»ºæ们çæ件ä¾åï¼å¨"hello.h"头æ件ä¸æ·»åå¦ä¸ä»£ç ï¼ class CMyAppï¼public CWinApp{ publicï¼virtual BOOL InitInstance()ï¼// èå½æ°}ï¼class CMainWindowï¼public CFrameWnd{ publicï¼CMainWindow()ï¼ protectedï¼afx_msg void OnPaint()ï¼DECLARE_MESSAGE_MAP()ï¼//声ææ¶æ¯æ å°}ï¼å¨"hello.cpp"æºæ件ä¸æ·»åå¦ä¸ä»£ç ï¼#include afxwin.h#include"hello.h"CMyApp myAppï¼BOOL CMyAppï¼ InitInstance(){ m_pMainWnd=new CMainWindowï¼m_pMainWnd- ShowWindow(m_nCmdShow)ï¼m_pMainWnd-UpdateWindow()ï¼return TRUEï¼}BEGIN_MESSAGE_MAP(CMainWindow,CFrameWnd)ON_WM_PAINT()END_MESSA GE_MAP()//æ¶æ¯æ å°CMainWindowï¼CMainWindow()//æé å½æ°åå§å { Create(NULL,"æç第ä¸ä¸ªMFC åºç¨ç¨åº")ï¼//å建çªä½}void CMainWindowï¼ OnPaint(){ CPaintDC dc(this)ï¼CRect rectï¼GetClientRect(&rect)ï¼ dc.DrawText("Hello MFC",- 1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER)ï¼}CWinApp æ¯åºç¨ç¨åºç±»ï¼å¨MFC åºç¨ç¨åºä¸å¿ é¡»ä»è¿ä¸ªç±»æ´¾çåºä¸ä¸ªç±»ï¼è¯¥æ´¾çç±»æ¯MFC åºç¨ç¨åºçå ¥å£å¿ é¡»å®ä¹è¿ä¸ªæ´¾çç±»ç对象,并ä¸åªè½æä¸ä¸ªè¿ä¸ªå¯¹è±¡ä»£è¡¨æ´ä¸ªåºç¨ç¨åºãæåå½æ°ï¼InitInstance()åè½ï¼åå§ååºç¨ç¨åºå®ä¾åçªå£å®ä¾ï¼èå½æ° CWinAppï¼InitInstance å¿ é¡»å¨æ´¾çç±»ä¸éåãå¨InitInstance å½æ°ä¸ï¼ç¼ååå§å代ç ï¼å¦ï¼å建ä¸ä¸ªçªå£æ¾ç¤ºä¸ä¸ªçªå£CFrameWnd ç±»ä½ç¨ï¼ä¸ºåºç¨ç¨åºæä¾ä¸ä¸ªçªå£ï¼åæ¶å®ç°æ¶æ¯å¤çåè½ãæåå½æ°ï¼Create()åè½ï¼å建çªä½, å°ä¹èµäºCFrameWnd 对象ä¸ãBOOL Create(çªå£ç±»å,çªå£æ é¢ï¼æ¾ç¤ºé£æ ¼ï¼æ¾ç¤ºåºåï¼ç¬¦çªå£å¥æï¼èåï¼æ©å±æ¾ç¤ºé£æ ¼ï¼ä¸ä¸æ对象)å ±æ8 个åæ°ï¼åä¸¤ä¸ªå¿ é¡»ç»åºï¼å6 个å¯ä»¥é»è®¤ãMFC åºç¨ç¨åºçæ ¸å¿å°±æ¯åºäºCWinApp ç±»çåºç¨ç¨åºå¯¹è±¡,CWinApp æä¾äºæ¶æ¯å¾ªç¯æ¥æ£ç´¢æ¶æ¯å¹¶å°æ¶æ¯è°åº¦ç»åºç¨ç¨åºççªå£.æ们å¨ç¼åMFC åºç¨ç¨åºæ¶,è¦å å«afxwin.h,ä¸ä¸ªMFC åºç¨ç¨åºå¯ä»¥æä¸ä» æä¸ä¸ªåºç¨ç¨åºå¯¹è±¡,å¯¹è±¡å¿ é¡»å£°æ为å¨å ¨å±èå´å ææ(ä¹å°±æ¯å ¨å±å¯¹è±¡), 以便å®å¨ç¨åºå¼å§æ¶å³å¨å åä¸è¢«å®ä¾åæ们çHello MFC çåºç¨ç¨åºç±»è¢«å½å为CMyApp,å®å¨hello.cpp ä¸ç¨å¦ä¸è¯å¥è¿è¡äºå®ä¾åï¼CMyApp myAppï¼ CMyApp ç类声æå¨hello.h ä¸ä»£ç å¦ä¸ï¼class CMyAppï¼public CWinApp{ publicï¼virtual BOOL InitInstance()ï¼}ï¼CMyApp 没æ声æä»»ä½çæ°æ®æå,åªæ¯éåäºä¸ä¸ªä»CWinApp ç±»ä¸ç»§æ¿æ¥çå½æ°,å¨åºç¨ç¨åºççåæå InitInstance çè°ç¨æ¯è¾æ©,æ¯å¨åºç¨ç¨åºå¼å§è¿è¡ä»¥åèçªå£å建ä¹å,é¤éInitIstance å建ä¸ä¸ªçªå£,å¦ååºç¨ç¨åºæ¯ä¸ä¼æçªå£,è¿æ£æ¯ä¸ºä»ä¹å³ä½¿æå°çMFC åºç¨ç¨åºä¹å¿ é¡»ä»CWinApp æ´¾çåºä¸ä¸ªç±»å¹¶éåCWinAppï¼ InitIstance çåå InitInstance å½æ°ï¼CWinAppï¼InitInstance æ¯ä¸ä¸ªèå½æ°,å ¶é»è®¤æä½ä» å å«ä¸æ¡è¯å¥ï¼return TRUEï¼InitInstance æ¯ç¨æ¥æ§è¡ç¨åºæ¯æ¬¡å¼å§æ¶é½éè¦è¿è¡çåå§åå·¥ä½æ好çå°æ¹å¨hello.cpp ä¸,CMyApp ç InitInstance éè¿å®ä¾åhello çCMainWindow ç±»æ¥å建hello çªå£,è¯å¥ï¼ m_pMainWnd=new CMainWindowï¼æé äºä¸ä¸ªCMainWindow 对象æé,并å°å ¶å°åå¤å¶å°äºåºç¨ç¨åºå¯¹è±¡çm_pMainWnd æ°æ®æåä¸,çªå£å建以å,InitInstance å°±ä¼éè¿CMainWindow æéè°ç¨ShowWindow åUpdateWindow å½æ°æ¾ç¤ºå®ï¼ m_pMainWnd-ShowWindow(m_nCmdShow)ï¼m_pMainWnd-UpdateWindow()ï¼ ShowWindow åUpdateWindow æ¯ææçªå£å¯¹è±¡å ±ç¨çCWnd æåå½æ°å ¶ä¸å æ¬ CFrameWnd ç±»ç对象,CMainWindow å°±æ¯ä»CFrameWnd æ´¾çåºæ¥ç.è¦ä»MFC ç¨åºè°ç¨ä¸ä¸ªå¸¸è§çWindows API å½æ°,éè¦å¨å½æ°å称åæ·»å ä¸ä¸ªå ¨å±è¿ç®ç¬¦ï¼ä¾å¦ï¼ï¼UpdateWindow()ï¼éè¿çæçªå£å¯¹è±¡å¹¶è°ç¨å ¶Create å½æ°,MFC åºç¨ç¨åºå¯ä»¥å建ä¸ä¸ªçªå£,å¨CMyAppï¼InitInstance ä¸,hello å建äºä¸ä¸ª CMainWindow 对象,CMainWindow çæé å½æ°çæå¨å±å¹ä¸çå°ççªå£ï¼ Create(NULL,"æç第ä¸ä¸ªMFC åºç¨ç¨åº")ï¼CPaintDC dc(this)ï¼MFC ç CPaintDC ç±»æ¯ä»MFC çCDC 类派çç,CDC ç±»å°è£ äºWindows 设å¤ç¯å¢,以åå å«äºç»å¶å°å±å¹ãæå°æºåå ¶ä»è®¾å¤çå å个æåå½æ°å¨MFC ä¸å¦ä½å¤çæ¶æ¯å¢?å¨SDK ä¸æ们å©ç¨çæ¯æ¶æ¯å¾ªç¯åçªå£è¿ç¨å½æ°å¯¹æ¶æ¯è¿è¡æ¶æ¯å¤ç.å¨ MFC ä¸æ们ç¨çæ¯æ¶æ¯æ å°æºå¶.ä¸é¢æ¯å°æ¶æ¯æ å°æ·»å å°ä¸ä¸ªç±»ä¸éè¦åçå ¨é¨å·¥ä½.1 éè¿å°DECLARE_MESSAGE_MAP è¯å¥æ·»å å°ç±»å£°æä¸,声ææ¶æ¯æ å°.2 éè¿æ¾ç½®æ è¯æ¶æ¯çå®æ¥æ§è¡æ¶æ¯æ å°,ç¸åºçç±»å°å¨å¯¹BEGIN_MESSAGE_MAP å END_MESSAGE_MAP çè°ç¨ä¹é´å¤çæ¶æ¯3 æ·»å æåå½æ°æ¥å¤çæ¶æ¯1ãæé CWinApp æ´¾çç±»ç对象2ãç³»ç»è°ç¨WinMain()3ãWinMain è°ç¨InitInstance, å¨è¯¥å½æ°ä¸å建CFrameWnd æ´¾ç类对象ï¼è°ç¨Create å½æ°å建çªå£ãè°ç¨ ShowWindow å½æ°æ¾ç¤ºçªå£ã4ãä¹åå é¨æºå¶è°ç¨Runï¼æ¥åç¨æ·çæ¶æ¯ï¼å¹¶å°æ¶æ¯å¯¼åé»è®¤çå¤çå½æ°ãå½æ¥æ¶å°WM_QUIT æ¶æ¯æ¶ï¼Run å é¨è°ç¨ ExitInstance,éåºç¨åºãMFC éç¨æ¶æ¯æ å°(Message Map)æºå¶å代C/C++è¯è¨ä¸çswitch-case ç»ææ¥å¤çæ¶æ¯ãæ¶æ¯æ å°ï¼å¨MFC ä¸ææ¶æ¯å¤çå½æ°åå®æè¦å¤ççç¹å®çæ¶æ¯è¿æ¥èµ·æ¥çä¸ç§æºå¶ãå®éè¿å®æ¥å®ç°æ¶æ¯å°æåå½æ°çæ å°ï¼èä¸è¿äºå½æ°ä¸å¿ æ¯èæçæåå½æ°ï¼è¿æ ·ä¸éè¦ä¸ºæ¶æ¯æ å°å½æ°çæä¸ä¸ªå¾å¤§çèæå½æ°è¡¨(V 表)ï¼èçå åãMFC æ¶æ¯æ å°æºå¶å æ¬ä¸ç»æ¶æ¯æ å°å®ãä¸æ¡æ¶æ¯æ å°å®æä¸ä¸ªWindows æ¶æ¯åå ¶æ¶æ¯å¤çå½æ°èç»èµ·æ¥ãMFC åºç¨ç¨åºæ¡æ¶æä¾äºæ¶æ¯æ å°åè½ãå¨ç±»çå®ç°æºæ件ä¸ç¨ BEGIN_MESSAGE_MAP()åEND_MESSAGE_MAP()å®æ¥å®ä¹æ¶æ¯æ å°ãå¨ç±»å®ä¹çç»å°¾ç¨DECLARE_MESSAGE_MAP()å®æ¥å£°æ使ç¨æ¶æ¯æ å°ã