chap3 MFC基本應(yīng)用程序的建立_免費(fèi)下載.ppt_第1頁(yè)
chap3 MFC基本應(yīng)用程序的建立_免費(fèi)下載.ppt_第2頁(yè)
chap3 MFC基本應(yīng)用程序的建立_免費(fèi)下載.ppt_第3頁(yè)
chap3 MFC基本應(yīng)用程序的建立_免費(fèi)下載.ppt_第4頁(yè)
chap3 MFC基本應(yīng)用程序的建立_免費(fèi)下載.ppt_第5頁(yè)
已閱讀5頁(yè),還剩53頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

chap3 MFC基本應(yīng)用程序的建立_免費(fèi)下載.ppt.ppt 免費(fèi)下載

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第3章 MFC基本應(yīng)用程序的建立,3.1 Windows編程基礎(chǔ) 3.2 編制一個(gè)MFC應(yīng)用程序 3.3 使用MFC AppWizard 3.4 使用類向?qū)?3.1 Windows編程基礎(chǔ) 3.1.1 簡(jiǎn)單的Windows應(yīng)用程序,例Ex_HelloMsg 一個(gè)簡(jiǎn)單的Windows應(yīng)用程序 #include int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) MessageBox (NULL, 你好,我的Visual C+世界!, 問(wèn)候, 0) ; re

2、turn 0 ; ,Windows應(yīng)用程序用程序以WinMain函數(shù)作為進(jìn)入程序的初始入口點(diǎn)。 WinMain函數(shù)的原型: int WINAPI WinMain ( HINSTANCE hInstance, / 當(dāng)前實(shí)例句柄 HINSTANCE hPrevInstance, / 前一實(shí)例句柄 LPSTR lpCmdLine, / 指向命令行參數(shù)的指針 int nCmdShow) / 窗口的顯示狀態(tài) 句柄:標(biāo)識(shí)Windows資源(如菜單、圖標(biāo)、窗口等)和設(shè)備等對(duì)象的數(shù)據(jù)指針類型,3.1 Windows編程基礎(chǔ) 3.1.1 簡(jiǎn)單的Windows應(yīng)用程序,3.1 Windows編程基礎(chǔ) 3.1.1

3、簡(jiǎn)單的Windows應(yīng)用程序,每一個(gè)C+ Windows應(yīng)用程序都需要Windows.h頭文件,它還包含了其他的一些Windows頭文件。這些頭文件定義了Windows的所有數(shù)據(jù)類型、函數(shù)調(diào)用、數(shù)據(jù)結(jié)構(gòu)和符號(hào)常量。 程序中,MessageBox是一個(gè)Win32 API函數(shù),用來(lái)彈出一個(gè)消息對(duì)話框。該函數(shù)第一個(gè)參數(shù)用來(lái)指定父窗口句柄,即對(duì)話框所在的窗口句柄。第二、三個(gè)參數(shù)分別用來(lái)指定顯示的消息內(nèi)容和對(duì)話框窗口的標(biāo)題,最后一個(gè)參數(shù)用來(lái)指定在對(duì)話框中顯示的按鈕。,3.1 Windows編程基礎(chǔ) 3.1.1 簡(jiǎn)單的Windows應(yīng)用程序,例Ex_HelloWin 一個(gè)完整的Windows應(yīng)用程序 #i

4、nclude LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); / 窗口過(guò)程 int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) HWND hwnd ; / 窗口句柄 MSG msg ; / 消息 WNDCLASS wndclass ; / 窗口類 wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc

5、; wndclass.cbClsExtra = 0 ;,3.1 Windows編程基礎(chǔ) 3.1.1 簡(jiǎn)單的Windows應(yīng)用程序,wndclass.cbWndExtra= 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon= LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, C_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpsz

6、MenuName = NULL ; wndclass.lpszClassName = HelloWin; / 窗口類名,3.1 Windows編程基礎(chǔ) 3.1.1 簡(jiǎn)單的Windows應(yīng)用程序,if (!RegisterClass ( hwnd = CreateWindow (HelloWin, / 窗口類名 我的窗口, / 窗口標(biāo)題 WS_OVERLAPPEDWINDOW,/ 窗口樣式 CW_USEDEFAULT, / 窗口最初的 x 位置 CW_USEDEFAULT, / 窗口最初的 y 位置 CW_USEDEFAULT, / 窗口最初的 x 大小 CW_USEDEFAULT, / 窗口最

7、初的 y 大小,3.1 Windows編程基礎(chǔ) 3.1.1 簡(jiǎn)單的Windows應(yīng)用程序,NULL, / 父窗口句柄 NULL, / 窗口菜單句柄 hInstance, / 應(yīng)用程序?qū)嵗浔?NULL) ; / 創(chuàng)建窗口的參數(shù) ShowWindow (hwnd, nCmdShow) ; / 顯示窗口 UpdateWindow (hwnd) ; / 更新窗口,包括窗口的客戶區(qū) / 進(jìn)入消息循環(huán):當(dāng)從應(yīng)用程序消息隊(duì)列中檢取的消息是WM_QUIT時(shí),則退出循環(huán)。 while (GetMessage ( / 將消息發(fā)送給窗口過(guò) 程,這里是WndProc ,3.1 Windows編程基礎(chǔ) 3.1.1 簡(jiǎn)

8、單的Windows應(yīng)用程序, return msg.wParam ; LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) switch (message) case WM_CREATE: / 窗口創(chuàng)建產(chǎn)生的消息 return 0 ; case WM_LBUTTONDOWN:,3.1 Windows編程基礎(chǔ) 3.1.1 簡(jiǎn)單的Windows應(yīng)用程序,MessageBox (NULL, 你好,我的Visual C+世界!, 問(wèn)候, 0) ; return 0 ; case WM_DESTR

9、OY: / 當(dāng)窗口關(guān)閉時(shí)產(chǎn)生的消息 PostQuitMessage (0) ; return 0 ; return DefWindowProc (hwnd, message, wParam, lParam) ; / 執(zhí)行默認(rèn)的消息處理 ,3.1 Windows編程基礎(chǔ) 3.1.1 簡(jiǎn)單的Windows應(yīng)用程序,窗口過(guò)程函數(shù)WndProc:接收和處理各種不同的消息 主函數(shù)WinMain: (1) 調(diào)用API函數(shù)RegisterClass注冊(cè)應(yīng)用程序的窗口類。 (2) 調(diào)用相關(guān)API函數(shù)創(chuàng)建和顯示窗口,并進(jìn)行其它必要的初始化處理。 (3) 創(chuàng)建和啟動(dòng)應(yīng)用程序的消息循環(huán)。 (4) 如果接收到WM_Q

10、UIT消息,則退出應(yīng)用程序。,3.1 Windows編程基礎(chǔ) 3.1.1 簡(jiǎn)單的Windows應(yīng)用程序,初始化應(yīng)用程序,開(kāi)始執(zhí)行,初始化并創(chuàng)建應(yīng)用程序窗口,進(jìn)入消息循環(huán)并獲取一條消息,消息是否為WM_QUIT?,終止程序,是,應(yīng)用程序中處理了此消息?,否,處理消息,轉(zhuǎn)送消息給窗口進(jìn)行默認(rèn)處理,是,否,Windows應(yīng)用程序的基本流程,3.1 Windows編程基礎(chǔ) 3.1.2 Windows編程特點(diǎn),Windows應(yīng)用程序特性: 消息驅(qū)動(dòng)機(jī)制 圖形設(shè)備接口(GDI) 基于資源的程序設(shè)計(jì) 動(dòng)態(tài)鏈接庫(kù) 進(jìn)程和線程,3.1 Windows編程基礎(chǔ) 3.1.2 Windows編程特點(diǎn),1. 消息驅(qū)動(dòng)機(jī)

11、制 事件(Events)產(chǎn)生的消息(Message)。 接收消息、分發(fā)消息、處理消息 消息驅(qū)動(dòng)的機(jī)制是Windows編程的最大特點(diǎn)。 -當(dāng)用戶按下鼠標(biāo)的左鍵時(shí)系統(tǒng)就會(huì)發(fā)送WM_LBUTTONDOWN消息 - 用戶敲了一個(gè)字符鍵時(shí)系統(tǒng)就會(huì)發(fā)送WM_CHAR消息 - 進(jìn)行菜單選擇或工具按鈕單擊等操作時(shí),系統(tǒng)又會(huì)相應(yīng)地發(fā)送WM_COMMAND消息給相應(yīng)的窗口等等,3.1 Windows編程基礎(chǔ) 3.1.2 Windows編程特點(diǎn),2. 圖形設(shè)備接口(GDI) DOS環(huán)境中打印:用戶必須根據(jù)打印機(jī)類型和指令規(guī)則向打印機(jī)輸送數(shù)據(jù)。 Windows:提供一個(gè)抽象的接口,稱為圖形設(shè)備接口(Graphical

12、 Device Interface,簡(jiǎn)稱GDI) 使得用戶直接利用系統(tǒng)的GDI函數(shù)就能方便實(shí)現(xiàn)輸入或輸出,而不必關(guān)心與系統(tǒng)相連的外部設(shè)備的類型。,3.1 Windows編程基礎(chǔ) 3.1.2 Windows編程特點(diǎn),3. 基于資源的程序設(shè)計(jì) 眾多圖形元素,例如光標(biāo)、菜單、工具欄、位圖、對(duì)話框等,每一個(gè)這樣的元素都作為一種可以裝入應(yīng)用程序的資源來(lái)存放。這些資源就像C+程序中的常量一樣,可以被編輯、修改,也可以被其他應(yīng)用程序所共享。 Visual C+ 6.0中就提供這樣的編輯器,可“所見(jiàn)即所得”地對(duì)這些不同類型的資源進(jìn)行設(shè)計(jì)、編輯等。,3.1 Windows編程基礎(chǔ) 3.1.2 Windows編程

13、特點(diǎn),4. 動(dòng)態(tài)鏈接庫(kù) 動(dòng)態(tài)鏈接庫(kù):提供一些特定結(jié)構(gòu)的函數(shù),能被應(yīng)用程序在運(yùn)行過(guò)程中裝入和連接,且多個(gè)程序可以共享同一個(gè)動(dòng)態(tài)鏈接庫(kù) 優(yōu)點(diǎn):大大節(jié)省內(nèi)存和磁盤空間 提高程序模塊的靈活性 .DLL擴(kuò)展名或.EXE擴(kuò)展名 - KERNEL32:處理存儲(chǔ)器低層功能、任務(wù)和資源管理等Windows核心服務(wù); - GDI32:提供圖形設(shè)備接口,管理用戶界面和圖形繪制,包括Windows元文件、位圖、設(shè)備描述表和字體等 - USER32:負(fù)責(zé)窗口的管理,包括消息、菜單、光標(biāo)、計(jì)時(shí)器以及其它與控制窗口顯示相關(guān)的一些功能。,3.1 Windows編程基礎(chǔ) 3.1.2 Windows編程特點(diǎn),5 . 進(jìn)程和線程

14、進(jìn)程:裝入內(nèi)存中正在執(zhí)行的應(yīng)用程序。進(jìn)程包括私有的虛擬地址空間、代碼、數(shù)據(jù)及其它操作系統(tǒng)資源。進(jìn)程包括了一個(gè)或多個(gè)在進(jìn)程上下文內(nèi)運(yùn)行的線程。 線程:操作系統(tǒng)分配CPU時(shí)間的基本實(shí)體。線程可以執(zhí)行應(yīng)用程序代碼的任何部分,包括當(dāng)前正在被其它線程執(zhí)行的那些部分。同一進(jìn)程的所有線程共享同樣的虛擬地址空間、全局變量和操作系統(tǒng)資源。,3.1 Windows編程基礎(chǔ) 3.1.3 Windows基本數(shù)據(jù)類型,Windows常用的基本數(shù)據(jù)類型,3.1 Windows編程基礎(chǔ) 3.1.3 Windows基本數(shù)據(jù)類型,Windows常用的預(yù)定義句柄類型,3.2 編制一個(gè)MFC應(yīng)用程序,基礎(chǔ)類庫(kù)(Microsoft

15、Foundation Class Library,簡(jiǎn)稱MFC):把Windows編程規(guī)范中的大多數(shù)內(nèi)容封裝成為各種類,又稱為MFC程序框架,3.2 編制一個(gè)MFC應(yīng)用程序 3.2.1 設(shè)計(jì)一個(gè)MFC程序,例Ex_HelloMFC 一個(gè)MFC應(yīng)用程序 #include / MFC頭文件 class CHelloApp : public CWinApp / 聲明應(yīng)用程序類 public: virtual BOOL InitInstance(); ; CHelloApp theApp; / 建立應(yīng)用程序類的實(shí)例 class CMainFrame: public CFrameWnd / 聲明主窗口類

16、public: CMainFrame(),3.2 編制一個(gè)MFC應(yīng)用程序 3.2.1 設(shè)計(jì)一個(gè)MFC程序, / 創(chuàng)建主窗口 Create(NULL, 我的窗口, WS_OVERLAPPEDWINDOW, CRect(0,0,400,300); protected: afx_msg void OnLButtonDown(UINT nFlags, CPoint point); DECLARE_MESSAGE_MAP() ;,3.2 編制一個(gè)MFC應(yīng)用程序 3.2.1 設(shè)計(jì)一個(gè)MFC程序,/ 消息映射入口 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_WM_

17、LBUTTONDOWN() / 單擊鼠標(biāo)左鍵消息的映射宏 END_MESSAGE_MAP() /定義消息映射函數(shù) void CMainFrame:OnLButtonDown(UINT nFlags, CPoint point) MessageBox (你好,我的Visual C+世界!, 問(wèn)候, 0) ; CFrameWnd:OnLButtonDown(nFlags, point); ,3.2 編制一個(gè)MFC應(yīng)用程序 3.2.1 設(shè)計(jì)一個(gè)MFC程序,BOOL CHelloApp:InitInstance() / 每當(dāng)應(yīng)用程序首次執(zhí) 行時(shí)都要調(diào)用的初始化函數(shù) m_pMainWnd = new C

18、MainFrame(); m_pMainWnd-ShowWindow(m_nCmdShow); m_pMainWnd-UpdateWindow(); return TRUE; ,3.2 編制一個(gè)MFC應(yīng)用程序 3.2.1 設(shè)計(jì)一個(gè)MFC程序,步驟: (1) 選擇“文件”“新建”菜單命令,顯示出“新建”對(duì)話框。在“工程”標(biāo)簽頁(yè)面的列表框中,選中Win32 Application項(xiàng),創(chuàng)建一個(gè)Ex_HelloMFC空應(yīng)用程序項(xiàng)目。 (2) 再次選擇“文件”“新建”菜單命令,在文件標(biāo)簽頁(yè)面左邊的列表框中選擇C+ Source File項(xiàng),在右邊的文件框中鍵入Ex_HelloMFC.cpp,單擊確定。

19、(3) 輸入上面的代碼。選擇“工程”“設(shè)置”菜單命令,在出現(xiàn)的對(duì)話框中選擇“General”標(biāo)簽。然后在“Microsoft Foundation Classes”組合框中,選擇“Use MFC in a Shared DLL”,單擊確定按鈕。 (4) 程序運(yùn)行后,單擊鼠標(biāo)左鍵,就會(huì)彈出一個(gè)對(duì)話框,結(jié)果同Ex_HelloWin。,3.2 編制一個(gè)MFC應(yīng)用程序 3.2.1 設(shè)計(jì)一個(gè)MFC程序,3.2 編制一個(gè)MFC應(yīng)用程序 3.2.2 理解程序代碼,映射一個(gè)消息的過(guò)程: (1) 在處理消息的類中,用消息宏DECLARE_MESSAGE_MAP聲明對(duì)消息映射的支持,并在該宏之前聲明消息處理函數(shù)。

20、 protected: afx_msg void OnLButtonDown(UINT nFlags, CPoint point); DECLARE_MESSAGE_MAP() (2) 使用BEGIN_MESSAGE_MAP和END_MESSAGE_MAP宏在類聲明之后的地方定義該類支持的消息映射入口點(diǎn),所有消息映射宏都添加在這里,當(dāng)然不同的消息MFC都會(huì)有不同的消息映射宏。 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) END_MESSAGE_MAP(),該類的基類,需要支持消息映射的用戶派生類,3.2 編制一個(gè)MFC應(yīng)用程序 3.2.2 理解程序代碼,(

21、3) 定義消息處理函數(shù)。例如: void CMainFrame:OnLButtonDown(UINT nFlags, CPoint point) MessageBox (你好,我的Visual C+世界!, 問(wèn)候, 0) ; CFrameWnd:OnLButtonDown(nFlags, point); ,3.3 使用MFC AppWizard,MFC AppWizard:應(yīng)用程序框架結(jié)構(gòu) 基本應(yīng)用程序類型: 單文檔:類似記事本,每次只能打開(kāi)和處理一個(gè)文檔 多文檔:允許同時(shí)打開(kāi)和處理多個(gè)文檔 基于對(duì)話框的應(yīng)用程序,3.3 使用MFC AppWizard 3.3.2 創(chuàng)建一個(gè)單文檔程序,1. 開(kāi)

22、始 選擇“文件”“新建”菜單,在彈出的“新建”對(duì)話框中,選擇MFC AppWizard(exe)的項(xiàng)目類型,將項(xiàng)目工作文件夾定位,并在工程編輯框中輸入項(xiàng)目名Ex_SDIHello,3.3 使用MFC AppWizard 3.3.2 創(chuàng)建一個(gè)單文檔程序,2. 第一步:?jiǎn)螕舸_定,出現(xiàn)對(duì)話框,進(jìn)行下列選擇: (1) 選擇“單個(gè)文檔”。 (2) 決定應(yīng)用程序中是否需要MFC的文檔視圖(“文檔/查看體系結(jié)構(gòu)支持”)結(jié)構(gòu)的支持。一般應(yīng)選中此項(xiàng)。 (3) 選擇資源所使用的語(yǔ)言,這里是“中文中國(guó)”。,3.3 使用MFC AppWizard 3.3.2 創(chuàng)建一個(gè)單文檔程序,3.第二步 單擊下一個(gè)按鈕,出現(xiàn)如圖所

23、示的對(duì)話框,讓用戶選擇程序中是否加入數(shù)據(jù)庫(kù)的支持(有關(guān)數(shù)據(jù)庫(kù)的內(nèi)容將在以后的章節(jié)中介紹)。,3.3 使用MFC AppWizard 3.3.2 創(chuàng)建一個(gè)單文檔程序,4.第三步 單擊下一個(gè)按鈕進(jìn)入下一步,出現(xiàn)如圖所示的對(duì)話框。允許用戶 在程序中加入復(fù)合文檔、自動(dòng)化、ActiveX控件的支持。 5. 第四步 單擊下一個(gè)按鈕進(jìn)入下一步,出現(xiàn)如圖所示的對(duì)話框,對(duì)話框的 前幾項(xiàng)依次確定對(duì)浮動(dòng)工具條、打印與預(yù)覽以及通信等特性的支持。,6. 第五步 保留以上默認(rèn)值,單擊下一個(gè)按鈕進(jìn)入下一步。彈出如 圖所示的對(duì)話框,3.3 使用MFC AppWizard 3.3.2 創(chuàng)建一個(gè)單文檔程序,7. 第六步 保留默認(rèn)

24、選項(xiàng),單擊下一步按鈕進(jìn)行下一步,出現(xiàn)如 圖所示的對(duì)話框。單擊完成按鈕出現(xiàn)一個(gè)信息對(duì)話框, 顯示出用戶在前面幾個(gè)步驟中作出的選擇內(nèi)容,單擊確定 按鈕系統(tǒng)開(kāi)始創(chuàng)建,并又回到了Visual C+ 6.0的主界面,3.3 使用MFC AppWizard 3.3.2 創(chuàng)建一個(gè)單文檔程序,8.編譯并運(yùn)行 MFC AppWizard已經(jīng)根據(jù)用戶的選擇內(nèi)容自動(dòng)生成基本的 應(yīng)用程序框架。單擊編譯工具欄上的運(yùn)行工具按鈕或按 快捷鍵Ctrl+F5,系統(tǒng)開(kāi)始編連并運(yùn)行生成的單文檔應(yīng)用程 序可執(zhí)行文件Ex_SDIHello.exe,運(yùn)行結(jié)果如圖所示。,3.3 使用MFC AppWizard 3.3.2 創(chuàng)建一個(gè)單文檔程

25、序,菜單欄,工具欄,狀態(tài)欄,標(biāo)題欄,文檔窗口,3.3 使用MFC AppWizard 3.3.3 MFC應(yīng)用程序項(xiàng)目組織,1. 項(xiàng)目的文件組織,3.3 使用MFC AppWizard 3.3.3 MFC應(yīng)用程序項(xiàng)目組織,Ex_SDIHello文件夾,Debug或Release 文件夾,Res文件夾,類文件.cpp,.h,資源文件Ex_SDIHello.rc,項(xiàng)目及項(xiàng)目工作區(qū)文件,其他文件,編連過(guò)程產(chǎn)生的文件,運(yùn)行文件Ex_SDIHello.exe,圖標(biāo)文件Ex_SDIHello.ico等,工具欄資源Toolbar.bmp,其他資源Ex_SDIHello.rc2等,3.3 使用MFC AppWi

26、zard 3.3.3 MFC應(yīng)用程序項(xiàng)目組織,2. MFC類結(jié)構(gòu) 單文檔應(yīng)用程序項(xiàng)目Ex_SDIHello類: CAboutDlg:本程序相關(guān)信息 CEx_SDIHelloApp:程序創(chuàng)建、運(yùn)行和終止 CEx_SDIHelloDoc:文檔數(shù)據(jù)管理 CEx_SDIHelloView:顯示數(shù)據(jù)、用戶交互 CMainFrame:主框架窗口的顯示和管理,3.4 使用類向?qū)?MFC類向?qū)?ClassWizard):自動(dòng)為一個(gè)項(xiàng)目添加一個(gè)類、進(jìn)行消息和數(shù)據(jù)映射、創(chuàng)建OLE Automation(自動(dòng)化)屬性和方法以及進(jìn)行ActiveX事件處理等。,3.4 使用類向?qū)?(1) “查看”“建立類向?qū)А被蛑苯覥

27、trl+W快捷鍵 (2) 在文檔編輯窗口中,右擊鼠標(biāo),從彈出的快捷菜單中選擇“建立類向?qū)А泵睢?ClassWizard標(biāo)簽頁(yè)面: Message Maps(消息映射):用來(lái)添加、刪除和編程處理消息的成員函數(shù)。 Member Variables(成員變量):添加或刪除與控件相關(guān)聯(lián)的成員變量(數(shù)據(jù)成員),以便與控件進(jìn)行數(shù)據(jù)交換。這些控件所在的類一般是從CDialog、CPropertyPage、CRecordView或CDaoRecordView中派生的類。 Automation(自動(dòng)化):為支持Automation的類(如ActiveX控件類)添加屬性和方法。 ActiveX Events(A

28、ctiveX事件):為ActiveX控件類添加觸發(fā)事件的支持。 Class Info(類信息):有關(guān)項(xiàng)目中類的其他信息。,3.4 使用類向?qū)?3.4.1 類向?qū)Ц攀?3.4 使用類向?qū)?3.4.2 消息和消息映射,1. 消息分類 (1)窗口消息(Windows message)。由WM_開(kāi)頭的消息(WM_ COMMAND除外),一般由窗口類和視圖類對(duì)象來(lái)處理。 (2)控件的通知消息(Control notifications)。當(dāng)控件的狀態(tài)發(fā)生改變(例如用戶在控件中進(jìn)行輸入)時(shí),控件就會(huì)向其父窗口發(fā)送WM_COMMAND通知消息。 (3)命令消息(Command message)。由菜單、工具

29、條的按鈕、快捷鍵等發(fā)送的WM_COMMAND通知消息。,2. ClassWizard映射消息的一般方法 在MFC中,絕大多數(shù)消息都可由MFC的ClassWizard來(lái)映射。將ClassWizard對(duì)話框切換到Message Maps頁(yè)面,可以看到它有許多選項(xiàng),各項(xiàng)功能說(shuō)明如表所示。,3.4 使用類向?qū)?3.4.2 消息和消息映射,2. ClassWizard映射消息的一般方法 例:向CEx_SDIHelloView中添加WM_LBUTTOMDOWN的消息映射步驟: (1) 按Ctrl+W快捷鍵打開(kāi)MFC ClassWizard對(duì)話框。 (2) 在Class name中,將類名選定為CEx_SD

30、IHelloView。此時(shí),Object IDs和Messages列表內(nèi)容會(huì)相應(yīng)的改變。 (3) 在Object IDs中選定CEx_SDIHelloView,而在Messages列表中選定WM_LBUTTOMDOWN消息。 (4) 雙擊WM_LBUTTOMDOWN消息或單擊Add Function按鈕,都會(huì)在CEx_SDIHelloView類中添加該消息的映射函數(shù)OnLButtonDown,同時(shí)在Member funcions列表中顯示這一消息映射函數(shù)和被映射的消息,如圖所示。,3.4 使用類向?qū)?3.4.2 消息和消息映射,(5) 單擊Edit Code按鈕后,ClassWizard對(duì)話框

31、退出,并轉(zhuǎn)向文檔窗口,定位到OnLButtonDown函數(shù)源代碼處。 (6) 添加下列代碼: void CEx_SDIHelloView:OnLButtonDown(UINT nFlags, CPoint point) MessageBox (你好,我的Visual C+世界!, 問(wèn)候, 0) ; CView:OnLButtonDown(nFlags, point); (7) 程序運(yùn)行后,在窗口客戶區(qū)單擊鼠標(biāo)左鍵,就會(huì)彈出一個(gè)消息對(duì)話框。,3.4 使用類向?qū)?3.4.2 消息和消息映射,3. 消息映射代碼 ClassWizard為WM_LBUTTOMDOWN的消息映射作了以下三個(gè)方面內(nèi)容的安排

32、: (1) 在Ex_SDIHelloView.h中聲明OnLButtonDown: protected: /AFX_MSG(CEx_SDIHelloView) afx_msg void OnLButtonDown(UINT nFlags, CPoint point); /AFX_MSG DECLARE_MESSAGE_MAP() 凡/和/之間的程序代碼塊均由ClassWizard自動(dòng)管理。,3.4 使用類向?qū)?3.4.2 消息和消息映射,3. 消息映射代碼 (2) 在Ex_SDIHelloView.cpp源文件前面的消息映射入口處,添加了相應(yīng)的映射宏: / 消息映射開(kāi)始 BEGIN_MESSA

33、GE_MAP(CEx_SDIHelloView, CView) /AFX_MSG_MAP(CEx_SDIHelloView) ON_WM_LBUTTONDOWN() /AFX_MSG_MAP END_MESSAGE_MAP() / 消息映射結(jié)束,3.4 使用類向?qū)?3.4.2 消息和消息映射,3. 消息映射代碼 (3) 在Ex_SDIHelloView.cpp文件中寫入一個(gè)空的消息處理函數(shù)的模板,以便用戶填入具體代碼: void CEx_SDIHelloView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message

34、handler code here and/or call default CView:OnLButtonDown(nFlags, point); 根據(jù)ClassWizard產(chǎn)生的上述消息映射過(guò)程,用戶可以自己手動(dòng)添加一些MFC ClassWizard不支持的消息映射函數(shù),以完成特定的功能。,3.4 使用類向?qū)?3.4.2 消息和消息映射,4. 鍵盤消息 按下一個(gè)鍵或組合鍵:WM_KEYDOWN或WM_SYSKEYDOWN放入消息隊(duì)列中。 鍵被釋放:WM_KEYUP或WM_SYSKEYUP消息被放入消息隊(duì)列中。 字符鍵:在這兩個(gè)消息之間產(chǎn)生WM_CHAR消息。 虛擬鍵代碼:與設(shè)備無(wú)關(guān)的鍵盤編碼。在VC中,最常用的虛擬鍵代碼已被定義在Winuser.h中,例如:VK_SHIFT表示SHIFT鍵,VK_F1表示功能鍵F1等。,3.4 使用類向?qū)?3.4.2 消息和消息映射,5. 鼠標(biāo)消息 鍵盤消息只發(fā)送給具有輸入焦點(diǎn)的窗口,但鼠標(biāo)消息不受這種限制。 鼠標(biāo)移動(dòng): 向該窗口發(fā)送WM_MOUSEMOVE(移動(dòng)鼠標(biāo))消息。 按下或釋放一個(gè)鼠標(biāo)鍵:,3.4 使用類向?qū)?3.4.2 消息和消息映射,7

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論