1.深入浅出MFC内容简介
2.深入浅出谈MFC内容简介
3.å¦ä½çMFCç¨åºä»£ç
深入浅出MFC内容简介
深入浅出MFC的深入内容可以分为四个部分。首先,浅出第一篇旨在建立学习MFC程序设计的码深基础,涵盖了Windows程序的入浅核心概念以及C++的高级主题。这个"学前基础"可能因人而异,出程但根据作者的深入微信微场景源码经验和教学,这一部分的浅出建议具有相当的说服力。
第二篇主要介绍Visual C++集成开发环境。码深尽管篇幅简要,入浅主要目的出程是提供基本的环境概述,而不是深入替代Visual C++的完整手册。对于熟悉软件开发的浅出读者,这部分已经足够让他们掌握Visual C++集成环境的码深关键,尽管工具的入浅使用看似简单,但在可视化软件开发中却扮演着至关重要的出程月牙公式指标源码角色,不容忽视。
接着是第三篇,主要讲解application framework的概念以及MFC的核心结构,这部分关注的是Visual C++工具AppWizard生成的程序代码。作者基于大众化的选项进行讲解,这些选项生成的代码是大多数学习者的基础。
第四部分的飞机大战源码Cocos核心是围绕微软附赠的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()å®æ¥å£°æ使ç¨æ¶æ¯æ å°ã