深入浅出谈MFC内容简介
本书分为四个核心章节,深入旨在引导读者理解MFC程序设计。浅出首先,源源码“学前基础”章节概述了Windows程序的码深基本概念和C++高级主题,虽然这可能因人而异,入浅但基于作者的下载仿头条号后台静态页面源码个人经验和教学实践,这些内容极具参考价值。深入 紧接着是浅出第二部分,Visual C++整合环境介绍。源源码虽然篇幅简要,码深但对软件开发的入浅老手来说,它足以使你熟悉Visual C++集成开发环境。下载尽管看似基础,深入但在软件开发中,浅出它却扮演着至关重要的源源码角色,不容忽视。 第三部分深入讨论了application framework的理念以及MFC的核心组件——AppWizard生成的程序代码。我们关注的是大众化选项下的典型产品,以便于理解。 最后,核心技术探索部分以微软附赠的tail 源码下载范例程序Scribble为基础,逐步添加新功能,涵盖了Runtime Type Information(RTTI)、Dynamic Creation、Persistence(Serialization)、Message Mapping和Command Routing等关键技术。这些内容在其他书籍中往往被忽视,是本书的独特亮点。 书中还附有一张光盘,其中包含所有原始代码和可执行文件,为读者提供了实践操作的seajs 源码解析机会。深入浅出MFC内容简介
深入浅出MFC的内容可以分为四个部分。首先,第一篇旨在建立学习MFC程序设计的基础,涵盖了Windows程序的核心概念以及C++的高级主题。这个"学前基础"可能因人而异,但根据作者的经验和教学,这一部分的建议具有相当的说服力。
第二篇主要介绍Visual C++集成开发环境。尽管篇幅简要,主要目的android 源码之家是提供基本的环境概述,而不是替代Visual C++的完整手册。对于熟悉软件开发的读者,这部分已经足够让他们掌握Visual C++集成环境的关键,尽管工具的使用看似简单,但在可视化软件开发中却扮演着至关重要的角色,不容忽视。
接着是第三篇,主要讲解application framework的概念以及MFC的核心结构,这部分关注的是Visual C++工具AppWizard生成的程序代码。作者基于大众化的tolua 源码分析选项进行讲解,这些选项生成的代码是大多数学习者的基础。
第四部分的核心是围绕微软附赠的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的核心程序,即ppWizard生成的代码。讲解的是大众化选项下的产品,以帮助读者理解MFC的基本架构和工作原理。
第四篇以微软附带的范例程序Scribble为线索,逐步增加功能并深入讲解Runtime Type Information(RTTI)、Dynamic Creation、Persistence(Serialization)、Message Mapping、Command Routing等关键核心技术。这些技术是其他书籍中相对较少涉及的,对于MFC的理解和实践有着重要补充。
最后数章,作者脱离Scribble程序,另辟蹊径,为读者提供了更为独立和深入的技术实践与理论探讨。
å¦ä½ç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()å®æ¥å£°æ使ç¨æ¶æ¯æ å°ã
2024-11-13 02:37
2024-11-13 02:18
2024-11-13 02:08
2024-11-13 01:00
2024-11-13 00:59