MFC的復習資料-有試題包括答案_第1頁
MFC的復習資料-有試題包括答案_第2頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、頁腳1-1 什么是 WindowsSDK 程序?答: 使用軟件開發(fā)工具包開發(fā)出來的 Windows 應用程序叫做 WindowsSDK 程序。1-3 打開 windows.h 文件,看一下 Windows 系統(tǒng)的句柄是什么數(shù)據(jù)類型的?答:整型。1-5 什么是事件?答:能觸發(fā)程序做出相應反應的因素或動作叫做“事件”。1-6 如何顯示和更新窗口?答:調(diào)用函數(shù) ShowWindow 顯示窗口,調(diào)用函數(shù) UpdateWindows 更新窗口。1-7 什么是消息循環(huán)?答:在創(chuàng)建了窗口的應用程序中,應用程序?qū)⒉粩嗟貜南㈥犃兄蝎@取消息,并將消息指派給指定的窗口處理函數(shù)來處理, 然后再回來從消息隊列獲取消息

2、, 這個不斷重復的工作過程叫做消息循環(huán)。1- 9 說明 Windows 應用程序的主函數(shù)、窗口函數(shù)與 Windows 系統(tǒng)之間的關(guān)系。答:Windows 應用程序的主函數(shù)和窗口函數(shù)都是系統(tǒng)調(diào)用的函數(shù),主函數(shù)是在應用程序啟動時由系統(tǒng)首先調(diào)用的函數(shù),而窗口函數(shù)是主函數(shù)在消息循環(huán)中獲得消息并把消息派送給系統(tǒng)之后,由系統(tǒng)調(diào)用的用來處理消息的函數(shù)。2- 1 在窗體類 CframeWnd 中需要封裝哪些成員?答:在窗體類 CframeWnd 中要封裝窗口句柄、窗口類的定義、注冊窗口類、創(chuàng)建窗口、顯示更新窗口。2-2 應用程序類 CwinApp 應該具備那些主要功能?答:創(chuàng)建、顯示應用程序的窗口和建立消息循

3、環(huán)。2- 3 在 MFC 程序設計中,如果要建立擁有自己風格的主窗口,應該重寫什么函數(shù)。答:繼承 CWinAPP 類并需要重寫該類的成員函數(shù) Initinstaance。3- 3 簡述構(gòu)成文檔/視圖結(jié)構(gòu)應用程序框架的四個 MFC 派生類,并說出它們的功能。答:假如工程名稱為 MyPrj 則 MFCAppWizard 會自動創(chuàng)建一下四個派生類來構(gòu)成應用程序的框架。.CFrame 類的派生類 CMainFrame;.CWinApp 類的派生類 CMyPrjApp;.CDocument 類的派生類 CMyPrjDoc;.CView 類的派生類 CMyPrjView。其中,CMyPrjDoc 類對象用

4、來存儲和管理應用程序中的數(shù)據(jù);CMainFrame 對象與 CMyPrjView 對象構(gòu)成了應用程序的界面,CMainFrame 對象只是 CMyPrjView 對象的容器,而 CMyPrjView 類的對象是用來顯示文檔與接收用戶事件的;CMyPrjApp 類的對象是應用程序的全局對象,它是應用程序中各對象的容器,負責創(chuàng)建應用程序界面和消息循環(huán)。3-4 在文檔/視圖結(jié)構(gòu)的應用程序中,視圖類對象是如何獲取文檔類對象中數(shù)據(jù)的?答:是依靠視圖類的成員函數(shù) GetDocument 來返回文檔對象指針,然后再通過該指針訪問文檔類的數(shù)據(jù)成員或函數(shù)成員。3-5 在 MFC 對程序窗口功能的劃分中你受到了什

5、么啟發(fā)?答:由于簡單的 MFC 應用程序框架沒有把數(shù)據(jù)的存儲部分和與用戶的交互部分分開,所以類違背了面向?qū)ο蟪绦蛟O計的“單一職責原則”,從而使窗口類笨重雜亂,沒有靈活性。而在文檔/視圖結(jié)構(gòu)中則由于遵循了“單一職責原則”,從而使文檔類和視圖類既有分工又有合作,代碼清晰,程序架構(gòu)靈活。3-6 什么叫類信息表?它在對象動態(tài)創(chuàng)建中起什么作用?答:類中存放了類信息的一個 CruntimeClass 結(jié)構(gòu)類型數(shù)據(jù)。其中的主要容為類名稱和指向?qū)ο髽?gòu)建函數(shù)的指針,建立該表的目的就是為了能在運行期根據(jù)類名稱調(diào)用構(gòu)建函數(shù)來動態(tài)創(chuàng)建對象。3- 7MFC 所說的對象動態(tài)創(chuàng)建與 C+中的對象動態(tài)創(chuàng)建有什么區(qū)別?對象動態(tài)

6、創(chuàng)建的核心是多少?答:MFC 所說的對象動態(tài)創(chuàng)建指的是在程序運行期間根據(jù)類名稱創(chuàng)建一個對象;而 C+所說的對象動態(tài)創(chuàng)建是為待創(chuàng)建的對象動態(tài)分配存儲空間。4- 1 為什么要使用 DC?答:為了屏蔽硬件輸出設備的多樣性,Windows 系統(tǒng)為程序員提供了一個可以操作這些硬件卻與硬件無關(guān)的接口,于是就可以把對不同設備的操作方法統(tǒng)一起來。4-3 如何把繪圖工具載入設備描述環(huán)境?答:使用 CDC 的成員函數(shù) SelectObject 把繪圖工具載入設備描述環(huán)境。4- 4 如何使用 CDC 類提供的繪圖方法繪圖?答:首先使用語句 CDC*pDC 創(chuàng)建一個 CDC 類對象的指針,然后就可以用下面格式的語句來

7、調(diào)用 CDC 類提供的各種方法了:pDC-方法名(參數(shù));5- 1 解釋下列語句出的含義。頁腳(1)CStrings; (2)CStrings(“Hello,VisualC+6.0”); (3)CStrings(A,100); (4)CStrings(buffer,100);(5)CStrings(anotherCString)。答:(1)構(gòu)造一個長度為 0 的字符串對象。(2)構(gòu)造一個名稱為 s 的字符串對象,并把字符串初始化為Hello,VisualC+6.0。(3)構(gòu)造一個名稱為 s 的字符串對象,s 字符串的容是 100 個 A。(4)構(gòu)造一個名稱為 s的字符串對象,s 字符串的容是

8、buffer 的頭 100 個字符,再加一個 NULL。(5)構(gòu)造一個名稱為 s 的字符串對象,s 字符串的容和 anotherCString 字符串的容相同。5-2 執(zhí)行 Cstrings(Cstring(“Hello,world).Left(6)+Cstring(“VisualC+).Right(3);語句后,s 字符串中的容是什么?答:Hello,C+。5-3 現(xiàn)有語句 Cstrings(“My,name,is,C+);若想將 s 字符串中的“,號全部更換成“,將如何編寫語句?答:s.Replace(,);pDC-TextOut(1,1,s);5- 4CString 創(chuàng)建時只分配 128

9、B 的緩沖區(qū),如何分配更大的緩沖區(qū)?答:使用 GetBuffer()函數(shù)。例如:CStrings;s.GetBuffer(1024);6- 2 分別說明什么是 SDI 界面的程序和什么是 MDI 界面的程序?答:用戶使用應用程序時,如果該程序一次只能打開一個文檔,那么這種程序就叫做 SDI 界面的程序,反之就叫做 MDI 界面的程序。6-3 在使用 VC+提供的應用程序向?qū)?MFCAppWizard 生成程序框架時,有哪幾個機會允許程序員選擇應用程序窗口的樣式?答: 一是在 MFCAppWizard-Step1 時, 選擇 SDI、 MDI 和基于對話框界面的窗口樣式。 二是在 MFCAppW

10、izard-Step4中,可以確定窗口上諸如工具條、狀態(tài)條、外觀等一些選擇。三是在 MFCAppWizard-Step4 選擇 Advanced 按鈕后彈出的對話框中,選擇窗口的樣式。6-5 如何用 MFC 提供的程序設計向?qū)崿F(xiàn)具有可拆分窗口的界面程序?答: 在MFC提供的程序設計向?qū)FCAppWizard的第四步中, 即在MFCAppWizard-Step4of6對話框中按下Advanced按鈕,在隨后打開的 AdvancedOptions 對話框中選擇 WindowStyles 選項卡,并在該選項卡中選擇Usesplitwindow 復選項。這樣,由向?qū)沙绦蚓蜁哂锌刹鸱执翱诘慕缑?/p>

11、了。6-6 文檔類的成員函數(shù) UpdateAllViews 的作用是什么?答:通知文檔所對應的所有窗口同時進行重繪。6-7 為什么拆分窗口的顯示更新必須要同步?答:因為應用程序的所有拆分窗口顯示的應該是同一個文檔,所以當文檔發(fā)生變化時,該文檔所對應的窗口當然要同時更新顯示以正確地反映文檔的容。6-8 什么是無效顯示區(qū)?答:無效顯示區(qū)一般定義為窗口用戶區(qū)上的一個矩形區(qū)域,這個區(qū)域應覆蓋所有因文檔發(fā)生變化而需要重繪的部分。當程序需要重新繪制一個圖形時,只要重新繪制該矩形部的圖形就可以了。6- 9 如何提高拆分窗口同步更新的效率?答:原則上,想辦法只繪制無效顯示區(qū)。7- 1 鼠標消息分哪兩類, 它們

12、之間有什么區(qū)別?答: 根據(jù)產(chǎn)生鼠標消息時鼠標光標所處的位置, 鼠標消息分為:客戶區(qū)鼠標消息和非客戶區(qū)鼠標消息兩類。在應用程序窗口中,用戶可以繪圖的部分叫做客戶區(qū)或者用戶區(qū),而除此之外的區(qū)域叫非客戶區(qū)。鼠標在客戶區(qū)產(chǎn)生的消息叫客戶區(qū)鼠標消息,在非客戶區(qū)產(chǎn)生的消息叫非客戶區(qū)鼠標消息。7-2 常用的客戶區(qū)鼠標消息有哪些?答:WM_LBUTTONDBCLK 雙擊鼠標左鍵 WM_LBUTTONDOWN 按下鼠標左鍵 WM_LBUTTONUP 釋放鼠標左鍵 WM_MOUSEMOVE移動鼠標 WM_RBUTTONDBCLK 雙擊鼠標右鍵 WM_RBUTTONDOWN 按下鼠標右鍵 WM_RBUTTONUP

13、釋放鼠標右鍵7-3 在程序設計中,如何使用非客戶區(qū)鼠標消息?答:首先,在主框架窗口類的聲明中手工添加非客戶消息響應函數(shù)的聲明,然后在主框架窗口類實現(xiàn)文件的消息映射表中添加消息映射,最后在主框架窗口類的實現(xiàn)文件中,添加鼠標響應函數(shù)并實現(xiàn)它。7-4 如何安全地接收應用程序窗口以外的鼠標消息?答:在一般情況下,應用程序窗口是不會接收窗口之外的鼠標消息的,如果用戶想接收應用程序窗口之外的鼠標信息,必須設法捕獲鼠標信息。在 Windows 中,聲明了一個專門用來捕獲鼠標消息函數(shù) CWnd*SetCapture;該函數(shù)一旦被調(diào)用, 則所有的鼠標消息都將發(fā)往應用程序頁腳的窗口中。在捕獲鼠標消息并完成了所應該

14、做的工作之后,應用程序應該及時釋放鼠標,以使鼠標可以按系統(tǒng)預定的正常方式發(fā)送信息,否則將使鼠標的一些正常作用失效。釋放鼠標要使用下面的這個函數(shù):BOOLReleaseCapture。7-5 什么樣的窗口才能接收鍵盤消息?答:在 Windows 中,有時會同時打開多個窗口。在這些窗口中只有一個是活動窗口,這個窗口一般是屏幕上位置最靠前的窗口,它的特征是其標題欄被點亮的,而不是灰色的。只有活動窗口才具有輸入焦點,而 Windows中規(guī)定只有具有輸入焦點的窗口才能接收鍵盤消息,也就是說,只有活動窗口才能接收鍵盤消息。7-6 為什么在 Windows 應用程序中不直接使用鍵盤的掃描碼,而使用與鍵盤無關(guān)

15、的虛擬碼?怎樣理解 Windows中設備無關(guān)性這個概念,設備無關(guān)性對編寫應用程序有什么作用?答:鍵盤的掃描碼是當用戶直接敲擊鍵盤上的按鍵時,由鍵盤的接口直接產(chǎn)生的與該鍵對應的一種編碼。由于市面上的鍵盤種類很多,所以不同類型的鍵盤產(chǎn)生的掃描碼有可能是不同的,也就是說,這種掃描碼是與具體的鍵盤相關(guān)的。這樣在編寫程序時會有很大的不便。所以在 Windows 編程中提出了設備無關(guān)性這個概念,它是基于通用性來設計的,基于這種方法設計出來的程序是不依賴于具體的硬件的,甚至不依賴于軟件。它不單單是針對鍵盤。另外,它還應用在網(wǎng)絡通信等方面。因此,設備無關(guān)性為人們編寫程序帶來了很大的方便。7-7 鍵盤消息分為哪

16、幾類?哪些鍵只產(chǎn)生按鍵消息,不產(chǎn)生字符消息?答:鍵盤消息可以分成:按鍵消息和字符消息兩類。按鍵消息分為系統(tǒng)按鍵消息(WM_KEYDOWN,WM_KEYUP)和非系統(tǒng)按鍵消息(WM_SYSKEYDOWN,WM_SYSKEYUP)。字符消息也同樣分為系統(tǒng)字符消息(WM_CHAR,WM_DEADCHAR)和非系統(tǒng)字符消息(WM_SYSCHAR,WM_SYSDEADCHAR)。值得注意的是,系統(tǒng)按鍵消息只能產(chǎn)生系統(tǒng)字符消息,非系統(tǒng)按鍵消息只能產(chǎn)生非系統(tǒng)的字符消息。在 Windows 中一些鍵是只產(chǎn)生按鍵消息而不產(chǎn)生字符消息的,這些鍵包括Shift 鍵、Ctrl 鍵、功能鍵、光標移動鍵、特殊字符鍵。7-

17、 8 在程序中如何確定窗口何時具有輸入焦點,何時失去輸入焦點?答:當應用程序的窗口獲得輸入焦點時,會發(fā)出 WM_SETFOCUS 消息;而當窗口失去輸入焦點時,會發(fā)出WM_KILLFOCUS 消息。如果一個窗口獲得了輸入焦點,便可以用鍵盤對這個窗口進行操作。8- 1 在 Windows 應用程序中,什么樣的數(shù)據(jù)稱為資源?常用資源有哪些?答:資源是一種數(shù)據(jù)。在應用程序啟動后,它們?nèi)匀获v留在硬盤上的可執(zhí)行文件中,只是在應用程序需要時,才從可執(zhí)行文件中讀取它們。常用的資源有菜單、圖標、字符串、快捷鍵、位圖等。8-2 在 VisualC+中,編輯資源數(shù)據(jù)可以使用哪兩種方法?答:(1)在文本編輯器中直接

18、對資源腳本文件和資源頭文件進行編輯的方法。(2)使用 VisualC+的資源編輯器對資源腳本文件和資源頭文件進行編輯的方法。8-3 程序運行時,用戶選中一個菜單項,會發(fā)出哪種消息?根據(jù)什么來判斷消息源?答:用戶選中菜單項時,會發(fā)出 WM_COMMAND 消息,系統(tǒng)根據(jù)菜單項的標識 ID 來識別是哪一個菜單項發(fā)出的消息。8-4 在程序中如何使用圖標資源?答:先用圖標編輯器制作圖標,以擴展名 ico 把圖標文件存盤,并把這個圖標文件先加入工程的資源文件夾中,然后在工程的資源頭文件中定義資源的標識,在資源描述文件中聲明圖標文件的路徑,這樣就可以在程序中需要的地方使用它了。8- 5 簡述在 mfc 中

19、使用位圖資源的步驟。答:(1)使用 LoadBitmap 函數(shù)把位圖資源載入位圖對象。(2)用 GetBitmap 獲得位圖信息。(3)用以下代碼把位圖選入存環(huán)境變量。CDCMemDC/定義設備環(huán)境對象 MemDC.CreateCompatibleDC(NULL);/創(chuàng)建容設備環(huán)境 MemDC.SelectObject(&m_Bmp);(4)用 BitBlt 函數(shù)顯示位圖。9- 4 什么是序列化?什么是永久性對象?答: 序列化是面向?qū)ο蟪绦蛟O計中應對象這種數(shù)據(jù)的存儲和恢復的要求而產(chǎn)生的一種文件讀寫機制。具有序列化能力的對象叫做永久性對象。9- 5 設計永久性類的時候必須使用哪兩個宏?答:宏 D

20、ECLARE_SERIAL 和 IMPLEMENT_SERIAL。10- 1 簡述在應用程序的窗口中使用一個控件的步驟。答:首先在使用控件的類中聲明控件,在合適的位置創(chuàng)建對象,然后向應用程序的消息映射中添加需要的消息,最后實現(xiàn)消息響應函數(shù)。頁腳10- 2 怎樣才能使控件成為窗口的子窗口并且在窗口中可見?答:為了使控件成為窗口的子窗口并且在窗口中可見,兩個控制樣式的常數(shù)是所有控件都必須使用的,一個是 WS_CHILD,另一個是 WS_VISIBLE,前者使控件成為應用程序窗口的子窗口,后者使控件可見。在使用多個常數(shù)指定控件樣式時,應該用符號“|”將其進行連接。10-3 為何創(chuàng)建每個控件一般都要傳

21、遞 this 參數(shù)給 Create 函數(shù)?答:因為在一般的情況之下都是為某一窗口對象創(chuàng)建控件,所以必須調(diào)用 Create 函數(shù)創(chuàng)建控件時,在控件的父窗口參數(shù)要用 this 作為參數(shù)。10-5 控件的標識有什么用途?一般在應用程序的什么位置創(chuàng)建控件?答: 控件標識符的作用是用來區(qū)分應用程序中的不同控件的。一般情況下,創(chuàng)建控件的最佳位置在 OnCreate 成員函數(shù)。10- 6 按鈕控件能創(chuàng)建哪三種不同的形式?答:下壓按鈕、復選框和單選按鈕。11- 1 什么是對話框模板資源描述文件?答:用來描述對話框外觀及對話框上控件布局的文本文件叫做對話框模板資源文件。11- 2 用戶定義的對話框類派生自哪個類

22、?答:Cdialog。11-3 通常在什么地方進行對話框的初始化?答:通常在類 CDialog 的 OnlnitDig 成員函數(shù)中進行對話框的初始化。這個函數(shù)在對話框啟動后,且還沒有顯示的時候被調(diào)用。11-4MFC 有哪些通用對話框類?答:CFileDialog、CColorDialog、CFontDialog、CFindReplaceDialog、CPageSetupDialog 和 CprintDialog。11-5Windows 有哪兩類對話框?它們的區(qū)別是什么?答:模式對話框和非模式對話框。它們的區(qū)別為模式對話框直到退出對話框才返回應用程序,非模式對話框可以與應用程序同時工作。基本概念

23、:Windows 把為這種復雜對象所定義的標識叫做句柄第一章 Windows 應用程序基礎知識1、Windows 應用程序是靠消息來驅(qū)動的,消息是一個描述事件的結(jié)構(gòu)。2、在 Windows 應用程序的主函數(shù)中,首先要注冊窗口類型,然后創(chuàng)建并顯示窗口。創(chuàng)建窗口后程序就進入消息循環(huán),在消息循環(huán)中,程序不斷地獲得消息并將信息派送給對應的窗口函數(shù)進行處理。3、窗口函數(shù)是處理消息的地方,它為 switch-case 結(jié)構(gòu),每一個 case 對應一段消息響應代碼。4、用函數(shù) Windows 應用程序進行封裝可以使程序的結(jié)構(gòu)更為清晰。第二章 Windows 應用程序的類封裝1、CwinApp 類是 MFC

24、對 Windows 主函數(shù)的封裝,通過派生 CwinApp 可以得到自己的應用程序類,在應用程序類中主要實現(xiàn)了全局初始化操作,應用程序類創(chuàng)建了主窗口后便進入了消息循環(huán)。2、應用程序的主窗口一般都是 CframeWnd 的派生類,可以通過派生該類得到自己的主窗口類。3、Windows 應用程序的窗口函數(shù)封裝到 CcmdTarget 類中,所有希望響應消息的類都應該以 CcmdTarget 為基類來派生。4、MFC 是用消息映射表來實現(xiàn)消息與消息響應函數(shù)之間的映射的MFC 通過宏來聲明和實現(xiàn)消息映射表。MFC的這種表驅(qū)動的機制使消息處理結(jié)構(gòu)變得更加清晰、明了。第三章 MFC 應用程序框架1、應用程

25、序類、窗口框架類、視圖類、文檔類構(gòu)成了應用程序的框架,框架的功能是通過各類之間的協(xié)調(diào)工作實現(xiàn)的。2、MFC 采用文檔/視圖結(jié)構(gòu)來實現(xiàn)數(shù)據(jù)和數(shù)據(jù)表示的分離,文檔視圖的分離有利于數(shù)據(jù)和數(shù)據(jù)表示的單獨改變。3、MFC 用類信息表存儲了動態(tài)創(chuàng)建類對象時所需要的信息。4、在類中使用宏 DECLARE_DYNCREATE 和 IMPLEMENT_DYNCREATE 使類具有動態(tài)創(chuàng)建對象的能力。5、定義一個具有動態(tài)創(chuàng)建對象能力類時,必須在該類中定義一個無參數(shù)的構(gòu)造函數(shù)。6、在應用程序中,使用宏 RUNTIME_CLASS 來獲得類信息表。第四章圖形頁腳1、Windows 提供了圖形用戶接口使用戶得以在窗口中

26、繪圖。2、在 MFC 中使用 CDC 類的派生類向窗口和打印機等輸出設備繪圖。每個設備環(huán)境中都包含畫筆、畫刷、位圖、調(diào)色板、字體等 GDI 對象。3、可以通過創(chuàng)建 GDI 對象并將其選入設備環(huán)境來完成所需要的繪圖操作。第五章 MFC 的通用類1、群體數(shù)據(jù)類基本上都是通過模板類實現(xiàn)的2、視圖類對象是用成員函數(shù) GetDocument 獲得文檔類對象指針的,然后視圖對象就可以通過這個指針來訪問文檔對象中的數(shù)據(jù)。第六章 Windows 應用程序界面的設計1、每次繪圖操作結(jié)束后要調(diào)用視圖類的成員函數(shù) InvalidateRect()啟動 OnDraw()函數(shù)以更新顯示。2、文檔/視圖類型的應用程序可以

27、實現(xiàn)一個文檔多個顯示,但是在文檔的容發(fā)生改變的時候,要對所有的視圖進行更新。3、在需要時,應用程序的界面可以設計為帶有滾動條的窗口形式。第七章鼠標和鍵盤1、在應用程序的界面上,可以通過對鼠標左擊、右擊、移動等事件的處理來響應用戶的鼠標輸入。2、鼠標消息有用戶區(qū)鼠標消息和非用戶區(qū)鼠標消息兩種,在應用程序中主要使用用戶區(qū)鼠標消息。3、可以用消息捕獲函數(shù)來捕獲窗口外的鼠標消息,以完成某些特殊的操作。4、可以通過處理字符消息、按鍵等鍵盤消息對用戶的鍵盤操作進行響應。5、在計算機的顯示器屏幕上,如果有多個窗口存在的話,則具有焦點的窗口所對應的應用程序是具有接收用戶消息能力的程序,這個程序叫做“正在活動狀

28、態(tài)的應用程序”。第八章資源1、 資源是與應用程序邏輯數(shù)據(jù)相隔離, 用資源描述文件說明, 由資源編輯器生成, 可以動態(tài)加載方式供 Windows應用程序使用的數(shù)據(jù)。資源是程序用戶界面的重要組成部分。常用的資源有菜單、加速鍵、圖標、位圖等。2、程序所需的資源使用資源描述文件來說明,并在資源文件中用標識符唯一地進行標識。3、資源可以使用 VC+的資源編輯器來創(chuàng)建和編輯,也可以使用文本編輯器來編輯。4、菜單的使用與 Windows 的命令消息 WM_COMMAND 相關(guān)。5、菜單項消息映射宏的格式是:0N_C0MMAND(菜單項 ID,消息響應函數(shù)名)6、菜單項動態(tài)修改的消息映射宏的格式是:ON_UP

29、DATE_COMMAND_UI(菜單項 ID,消息響應函數(shù)名)7、在文檔/視圖結(jié)構(gòu)的程序中,資源的加載是由應用程序類的 InitInstance 函數(shù)過構(gòu)造 CdocTemplate 對象來完成的。8、加速鍵在資源描述文件中與所對應的菜單項關(guān)聯(lián)。9、圖標使用 VC+開發(fā)環(huán)境的菜單 Project|AddToProject|Files 添加。10、在應用程序中,位圖用 Cbitmap 對象來保存,由成員函數(shù) LoadBitmap 來加載,在顯示時需先繪制到存 DC中,然后再用 BitBlt 函數(shù)把它由存 DC 復制到顯示設備的 DC。第九章 MFC 的文件處理機制1、文件是存儲在永久性存儲介質(zhì)上

30、的數(shù)據(jù)的集合。在面向?qū)ο蟮膽贸绦蛑幸采婕皩ο蟠姹P的問題。對象存盤可以使用序列化的機制實現(xiàn)。2、MFC 把文件的打開、關(guān)閉、讀寫操作封裝在類 CFile 中。CFile 對象代表一個磁盤文件,使用 CFile 對象可以直接對文件進行操作。該類有一個很有用的派生類:CmemFile。3、Carchive 是對 CFile 的再封裝,它重載了插入符”和提取符“”,它是一種 I/0 流,它借助 CFile 類對象完成磁盤文件數(shù)據(jù)的存取操作。4、對象序列化是指將類對象轉(zhuǎn)換成 byte/bit 流,以便于對象通過網(wǎng)絡傳輸或保存在磁盤上,對象序列化是將byte/bit 流化的對象轉(zhuǎn)換成存中的類對象的過程。

31、MFC 使用 Carchive 對象來完成對象的序列化。5、具有讀寫自身能力的對象稱為永久性對象。MFC 通過宏 DECLARE_SERIAL 和 IMPLEMENT_SERIAL 給類添加動態(tài)創(chuàng)建對象和序列化操作所需的代碼。宏 DECLARE_SERIAL 用在類聲明中,宏 IMPLEMENT_SERIAL 用在類實現(xiàn)中。頁腳同時,該類必須從 Cobject 類或其派生類派生,并重載 Serialize。函數(shù).Serialize。函數(shù)借助類 Carchive 對象實現(xiàn)對象的序列化。第十章控件1、控件是應用程序窗口的子窗口MFC 的控件類封裝了 Windows 的標準控件和通用控件,這些控件類

32、都派生于類 CWnd。2、靜態(tài)文本控件由類 Cstatic 封裝,按鈕控件由類 Cbutton 封裝,編輯控件由類 Cedit 封裝,進度條控件由類 CprogessCtrl 封裝,微調(diào)器控件由類 CspinButtonCtrl 封裝,圖像列表控件由類 CimageList 封裝,列表視圖控件由類 ClistCtrl 封裝。控件類的使用與窗口類 CWnd 的使用基本相同。3、控件顏色的設置在 Windows 消息 WM_CTLC0L0R 的消息響應函數(shù) OnCtlColor 中完成。其消息映射宏是:0N_WM_CTLC0L0R()第十一章對話框1、對話框的基本行為由類 CDialog 封裝,對

33、話框的外觀由模板資源定義。2、2、對話框模板資源可以使用 VC+的資源編輯器來創(chuàng)建和編輯。3、調(diào)用 CDialog 的成員函數(shù) DoModal 可以創(chuàng)建并打開模態(tài)對話框。按鈕 0K 和 Cancel 是對話框中系統(tǒng)頂置的兩個按鈕,分別對應關(guān)閉對話框時的確定狀態(tài)和取消狀態(tài)。4、對話框使用數(shù)據(jù)交換(DDX)機制實現(xiàn)控件與變量之間的數(shù)據(jù)交換,使用數(shù)據(jù)檢驗(DDV)機制檢驗通過控件錄入的數(shù)據(jù)是否合乎規(guī)格。5、使用 MFCClassWizard 為對話框類添加 MembeVaraible 并與相應的控件綁定。DDX 函數(shù)具體完成控件和變量的綁定和數(shù)據(jù)交換。一對控件和變量由一個 DDX 函數(shù)綁定,并由 M

34、FCClassWizard 自動添加到對話框成員函數(shù) DoDataExchange 中。DoDataExchange 被對話框成員函數(shù) UpdateData 調(diào)用,并由其參數(shù)控制數(shù)據(jù)的交換方向。6、MFC 還對 Windows 通用對話框進行了封裝。它們分別是 CColorDialog、CfileDialog、CFindReplaceDialog、CFontDialog、CprintDialog7、非模態(tài)對話框使用 CDialog 類的 Create 成員函數(shù)來創(chuàng)建和顯示,使用 DistroyWindow 函數(shù)來關(guān)閉。8、屬性頁是 CpropertySheet 類派生類的對象,它包含若干屬性頁

35、面。屬性頁面是 CpropertyPage 類派生類的對象,它是一個對話框。句柄:就是一個 4 字節(jié)長的唯一的數(shù),用以標識許多不同的對象類型。API 函數(shù):用來開發(fā) WindowsSDK 應用程序的軟件開發(fā)工具包是用 C 語言編寫的一個大型函數(shù)庫,這個庫中的函數(shù)叫做 API 函數(shù)消息映射表:在 WindowsSDK 應用程序的窗口函數(shù)中,是采用 switch-case 分支結(jié)構(gòu)實現(xiàn)消息處理的,這種方式不適合面向?qū)ο笤O計的要求。因此 MFC 建立了一套自己的消息映射機制消息映射表。類信息表:MFC 程序在不同的場合下還經(jīng)常用到類的其他信息,于是 MFC 就把這些信息統(tǒng)統(tǒng)都放在映射表項中,該表即叫

36、著類信息表。資源:資源是一種數(shù)據(jù)。在應用程序啟動后,它們?nèi)匀获v留在硬盤上的可執(zhí)行文件中,只是在應用程序需要時,才從可執(zhí)行文件中讀取它們。填空1、Windows 應用程序的主函數(shù)有哪三個主要任務?答:注冊窗口類、創(chuàng)建應用程序的窗口和建立消息循環(huán)。2、常見句柄的名稱:HWND 窗口句柄 HINSTANCE 當前程序應用實例句柄 HCURSOR 光標句柄 HF0NT 字體句柄 HPEN畫筆句柄 HBRUSH 畫刷句柄 HDC 圖形設備環(huán)境句柄 HBITMAP 位圖句柄 HICON 圖標句柄 HMENU 菜單句柄 HFILE 文件句柄3、消息循環(huán)的三個函數(shù)的作業(yè):Getmessage:從消息隊列中獲取

37、消息;Translatemessage:把鍵盤消息翻譯成字符消息;Dispatchmessage:把消息派送給系統(tǒng),并通過系統(tǒng)發(fā)送給窗口。4、MFC 應用程序的界面有哪三種方式?答:(1)單文檔界面;(2)多文檔界面;(3)基于對話框界面。5、非模態(tài)對話框是使用 Cdialog 類的成員函數(shù) Create()來創(chuàng)建和顯示的。模板對話框使用 CDialog 類的成員函數(shù) DoModal()來創(chuàng)建對話框。頁腳簡答1、在 MFC 中 CDC 的派生類有哪幾個,試說出它們的作用。答:CclientDC 應用在除 WM_PAINT 消息之外的消息處理函數(shù)中,提供窗口客服區(qū)的設備描述環(huán)境。CmetaFil

38、eDC 代表 Windows 圖元文件的設備描述環(huán)境。在創(chuàng)建與設備無關(guān)的并且可以回收的圖像時使用這個類型的 DC。CpaintDC 在 WM_PAINT 消息的處理函數(shù) OnDraw 中使用的窗口用戶區(qū)的設備描述環(huán)境。CwindowDC 提供在整個窗口繪圖的設備描述環(huán)境。2、如何使類具有序列化能力?答:類必須滿足以下三個條件。(1)從 Cobject 類或其派生類派生,并重寫 Serialize()函數(shù);(2)必須在類聲明文件中使用序列化聲明宏 DECLARE_SERIAL(),在類實現(xiàn)文件中使用序列化實現(xiàn)宏 IMPLEMENT_SERIAL();(3)必須定義一個無參數(shù)的構(gòu)造函數(shù),以滿足動態(tài)

39、創(chuàng)建對象的需要。3、標準控件和通用控件有什么不同?答:主要區(qū)分是目標不同。標準控件在最早的 Windows 版本中就已經(jīng)存在。通用控件是在后來的版本中添加進去的,目標是使用戶界面看起來更加現(xiàn)代化。標準控件發(fā)送的是 WM_COMMAND 消息,通用控件則是 WM_NOTIFY消息。程序例 5-1CString 類的應用實例在視圖類的鼠標左鍵按下消息中輸入如下代碼。voidCMFCexp5_1View:OnLButtonDown(UINTnFlags,CPointpoint)CStringstrl=”Thisisaneasywaytoperform”;CStringstr2=”stringconc

40、antenation!”;CStringstr3=str1+”+str2;AfxMessageBox(str3,MB_OK|MB_ICONINFORMATION);CView:OnLButtonDown(nFlags,point);5-2 編寫一個程序,當按下鼠標左鍵時,在鼠標的光標位置會顯示一個隨機大小的矩形。(2) 在應用程序頭文件 StdAfx.h 中加入包含命令。#include(3) 在視圖類的聲明中定義一個存放 CRect 類型元素的數(shù)組 m_Rectag。ClassCMFCexp5_2Doc:publicCdocumentprotected:CArraym_Rectag;(4)

41、在視圖類的構(gòu)造函數(shù)中定義 m_Rectag 數(shù)組的大小。CMFCexp5_2View:CMFCexp5_2View()m_Rectag.SetSize(256,256)(5) 在視圖類鼠標左鍵按下消息響應函數(shù)中,將每次單擊鼠標產(chǎn)生的矩形數(shù)據(jù)存入數(shù)組。voidCMFCexp5_2View:OnLButtonDown(UINTnFlags,CPointpoint)intr=rand()%50+5;CRectRet(point.x-r,point.y-r,point.x+r,point.y+r);m_Rectag.Add(Ret);InvalidateRect(Ret,FALSE);CView:On

42、LButtonDown(nFlags,point);(6) 在視圖類的 WM_PAINT 消息響應函數(shù)中重畫數(shù)組中的矩形。voidCMFCexp5_2View:OnDraw(CDC*pDC)for(inti=0;iRectangle(m_Rectagi);5-3 用文檔/視圖結(jié)構(gòu)程序完成例 5-2(5) 在視圖類的 0nLButtonDown 函數(shù)中設置指向文檔的指針并通過該指針獲取文檔的成員。voidCMFCexp5_3View:OnLButtonDown(UINTnFlags,CPointpoint)CMFCexp5_3Doc*pDoc=GetDocument();/獲取文檔指針頁腳int

43、r=rand()%50+5;CRectRet(point.x-r,point.y-r,point.x+r,point.y+r);pDoc-m_Rectag.Add(Ret); /向文檔中數(shù)組添加元素 InvalidateRect(Ret,FALSE); /觸發(fā) OnDraw()函數(shù)CView:0nLButtonDown(nFlags,point);(6) 在 OnDraw 函數(shù)中畫出數(shù)組中的矩形。voidCMFCexp5_3View:OnDraw(CDC*pDC)CMFCexp5_3Doc*pDoc=GetDocument();/獲取文檔指針ASSERT_VALID(pDoc);for(int

44、i=0;im_Rectag.GetSize();i+)pDC-Rectangle(pDoc-m_Rectagi);7-1 編寫可以在用戶區(qū)中繪制一個矩形動應用程序,在按下鼠標左鍵后,這個矩形會把它的左上角移動到鼠標位置;而當按下 Shift 鍵的同時,按下鼠標左鍵,則矩形恢復原位置。(2)在文檔類中添加一個數(shù)據(jù)成員 tagRec 來存儲數(shù)據(jù)。ClassCMFCexp7_1Doc:publicCdocumentPublic:CRectm_tagRec;(3) 在文檔類的構(gòu)造函數(shù)中,初始化數(shù)據(jù)成員。CMFCexp7_1Doc:CMFCexp7_1Doc()m_tagRec.left=30;m_ta

45、gRec.top=30;m_tagRec.right=350;m_tagRect.bottom=300;(4) 在其視圖類的鼠標右鍵按下消息響應函數(shù)中寫入如下代碼。voidCMFCexp7_1View:OnRButtonDown(UINTnFlags,CPointpoint)CMFCexp7_1Doc*pDoc=GetDocument();if(nFlags&MK_SHIFT)pDoc-tagRec.left=30;pDoc-tagRec.top=30;pDoc-tagRec.right=350;pDoc-tagRec.bottom=300;elsepDoc-tagRec.left=point

46、.xpDoc-tagRec.top=point.y;pDoc-tagRec.right=point.x+320;pDoc-tagRec.bottom=point.y+270;InvalidateRect(NULL,TRUE);CView:OnRButtonDown(nFlags,point);(5)在視圖類的 0nDraw 函數(shù)中編寫如下代碼。voidCMFCexp7_1View:OnDraw(CDC*pDC)CMFCexp7_1Doc*pDoc=GetDocumengt();ASSERT_VALID(pDoc);pDC-Rectangle(pDoc-m_tagRec);例 7-2 一個測試鼠

47、標移動消息的程序。(2) 在文檔類聲明中,添加一個點類的數(shù)據(jù)成員 m_point.ClassCMFCexp7_2Doc:publicCdocumentPublic:Cpointm_point;(3) 在視圖類中添加鼠標移動消息響應函數(shù),并輸入如下代碼。voidCMFCexp7_2View:0nMouseMove(UINTnFlags,CPointpoint)CMFCexp7_2Doc*pDoc=GetDocument();pDoc-m_Point=point;InvalidateRect(NULL,FALSE);CView:0nMouseMove(nFlags,point);(4) 在視圖類的

48、 OnDraw 函數(shù)中添加如下代碼。voidCMFCexp7_2View:0nDraw(CDC*pDC)CMFCexp7_2Doc*pDoc=GetDocument();ASSERT_VALID(pDoc);頁腳CPointpoint(30,30);pDC-MoveTo(point);pDC-LineTo(pDoc-m_Point);例 7-3 編寫一個程序,使鼠標的光標在標題欄或窗口邊框上移動時,在用戶區(qū)顯示鼠標光標的位置。(2) 在主框架窗口類 CMainFrame 的聲明中,手工添加消息響應函數(shù)的聲明。Afx_msgvoidOnNcMouseMove(UINTnHitTest,CPoin

49、tpoint)(3) 在主框架窗口類 CMainFrame 的實現(xiàn)文件的消息映射表中,添加消息映射。BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)ON_WM_NCMOUSEMOVE()END_MESSAGE_MAP()(4)在主框架窗口類 CMainFrame 的實現(xiàn)文件中,添加鼠標響應函數(shù)的實現(xiàn)。VoidCMainFrame:OnNcMouseMove(UINTnHitTest,CPointpoint)CClientDCclientDC(this);chars20;wsprintf(s,X=%dY=%d,point.x,point.y);clientDC.TextOut(20,20,s);CFrameWnd:OnNcMouseMove(nHitTest,point);例 7-4 當鼠標左鍵按下時,可以捕獲鼠標消息的程序。voidCMFCexp7_4View:OnMouseMove(UINTnFlags,CPointpoint)chars

溫馨提示

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

評論

0/150

提交評論