的復(fù)習(xí)資料有試題包括答案_第1頁
的復(fù)習(xí)資料有試題包括答案_第2頁
的復(fù)習(xí)資料有試題包括答案_第3頁
的復(fù)習(xí)資料有試題包括答案_第4頁
的復(fù)習(xí)資料有試題包括答案_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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

2、循環(huán)。1-9 說明Windows應(yīng)用程序的主函數(shù)、窗口函數(shù)與Windows系統(tǒng)之間的關(guān)系。答:Windows應(yīng)用程序的主函數(shù)和窗口函數(shù)都是系統(tǒng)調(diào)用的函數(shù),主函數(shù)是在應(yīng)用程序啟動時由系統(tǒng)首先調(diào)用的函數(shù),而窗口函數(shù)是主函數(shù)在消息循環(huán)中獲得消息并把消息派送給系統(tǒng)之后,由系統(tǒng)調(diào)用的用來處理消息的函數(shù)。2-1 在窗體類CframeWnd中需要封裝哪些成員?答:在窗體類CframeWnd中要封裝窗口句柄、窗口類的定義、注冊窗口類、創(chuàng)建窗口、顯示更新窗口。2-2 應(yīng)用程序類CwinApp應(yīng)該具備那些主要功能?答:創(chuàng)建、顯示應(yīng)用程序的窗口和建立消息循環(huán)。2-3 在MFC程序設(shè)計中,如果要建立擁有自己風(fēng)格的主窗

3、口,應(yīng)該重寫什么函數(shù)。答:繼承CWinAPP類并需要重寫該類的成員函數(shù)InitInstaance。3-3 簡述構(gòu)成文檔/視圖結(jié)構(gòu)應(yīng)用程序框架的四個MFC派生類,并說出它們的功能。答:假如工程名稱為MyPrj則MFC AppWizard會自動創(chuàng)建一下四個派生類來構(gòu)成應(yīng)用程序的框架。.CFrame類的派生類CMainFrame;.CWinApp類的派生類CMyPrjApp;.CDocument類的派生類CMyPrjDoc;.CView類的派生類CMyPrjView。其中,CMyPrjDoc類對象用來存儲和管理應(yīng)用程序中的數(shù)據(jù);CMainFrame對象與CMyPrjView對象構(gòu)成了應(yīng)用程序的界面,

4、CMainFrame對象只是CMyPrjView對象的容器,而CMyPrjView類的對象是用來顯示文檔與接收用戶事件的;CMyPrjApp類的對象是應(yīng)用程序的全局對象,它是應(yīng)用程序中各對象的容器,負(fù)責(zé)創(chuàng)建應(yīng)用程序界面和消息循環(huán)。3-4 在文檔/視圖結(jié)構(gòu)的應(yīng)用程序中,視圖類對象是如何獲取文檔類對象中數(shù)據(jù)的?答:是依靠視圖類的成員函數(shù)GetDocument來返回文檔對象指針,然后再通過該指針訪問文檔類的數(shù)據(jù)成員或函數(shù)成員。3-5 在MFC對程序窗口功能的劃分中你受到了什么啟發(fā)?答:由于簡單的MFC應(yīng)用程序框架沒有把數(shù)據(jù)的存儲部分和與用戶的交互部分分開,所以類違背了面向?qū)ο蟪绦蛟O(shè)計的“單一職責(zé)原則

5、”,從而使窗口類笨重雜亂,沒有靈活性。而在文檔/視圖結(jié)構(gòu)中則由于遵循了“單一職責(zé)原則”,從而使文檔類和視圖類既有分工又有合作,代碼清晰,程序架構(gòu)靈活。3-6 什么叫類信息表?它在對象動態(tài)創(chuàng)建中起什么作用?答:類中存放了類信息的一個CruntimeClass結(jié)構(gòu)類型數(shù)據(jù)。其中的主要內(nèi)容為類名稱和指向?qū)ο髽?gòu)建函數(shù)的指針,建立該表的目的就是為了能在運(yùn)行期根據(jù)類名稱調(diào)用構(gòu)建函數(shù)來動態(tài)創(chuàng)建對象。3-7 MFC所說的對象動態(tài)創(chuàng)建與C+中的對象動態(tài)創(chuàng)建有什么區(qū)別?對象動態(tài)創(chuàng)建的核心是多少?答:MFC所說的對象動態(tài)創(chuàng)建指的是在程序運(yùn)行期間根據(jù)類名稱創(chuàng)建一個對象;而C+所說的對象動態(tài)創(chuàng)建是為待創(chuàng)建的對象動態(tài)分配

6、存儲空間。4-1 為什么要使用DC?答:為了屏蔽硬件輸出設(shè)備的多樣性,Windows系統(tǒng)為程序員提供了一個可以操作這些硬件卻與硬件無關(guān)的接口,于是就可以把對不同設(shè)備的操作方法統(tǒng)一起來。4-3 如何把繪圖工具載入設(shè)備描述環(huán)境?答:使用CDC的成員函數(shù)SelectObject把繪圖工具載入設(shè)備描述環(huán)境。4-4 如何使用CDC類提供的繪圖方法繪圖?答:首先使用語句CDC*pDC創(chuàng)建一個CDC類對象的指針,然后就可以用下面格式的語句來調(diào)用CDC類提供的各種方法了:pDC->方法名(參數(shù));5-1 解釋下列語句出的含義。(1)CString s;(2)CString s(“Hello,Visual

7、 C+6.0”);(3)CString s(A,100);(4)CString s(buffer,100);(5)CString s(anotherCString)。答:(1)構(gòu)造一個長度為0的字符串對象。(2)構(gòu)造一個名稱為s的字符串對象,并把字符串初始化為Hello,Visual C+6.0。(3)構(gòu)造一個名稱為s的字符串對象,s字符串的內(nèi)容是100個A。(4)構(gòu)造一個名稱為s的字符串對象,s字符串的內(nèi)容是buffer的頭100個字符,再加一個NULL。(5)構(gòu)造一個名稱為s的字符串對象,s字符串的內(nèi)容和anotherCString字符串的內(nèi)容相同。5-2 執(zhí)行Cstring s(Cstr

8、ing(“Hello,world”).Left(6)+Cstring(“Visual C+”).Right(3);語句后,s字符串中的內(nèi)容是什么?答:Hello,C+。5-3 現(xiàn)有語句Cstring s(“My,name,is,C+”);若想將s字符串中的“,”號全部更換成“”,將如何編寫語句?答:s.Replace(,);pDC->TextOut(1,1,s);5-4 CString創(chuàng)建時只分配128B的緩沖區(qū),如何分配更大的緩沖區(qū)?答:使用GetBuffer()函數(shù)。例如:CString s;s.GetBuffer(1024);6-2 分別說明什么是SDI界面的程序和什么是MDI界面

9、的程序?答:用戶使用應(yīng)用程序時,如果該程序一次只能打開一個文檔,那么這種程序就叫做SDI界面的程序,反之就叫做MDI界面的程序。6-3 在使用VC+提供的應(yīng)用程序向?qū)FC AppWizard生成程序框架時,有哪幾個機(jī)會允許程序員選擇應(yīng)用程序窗口的樣式?答:一是在MFC AppWizard-Step 1時,選擇SDI、MDI和基于對話框界面的窗口樣式。二是在MFC AppWizard-Step 4中,可以確定窗口上諸如工具條、狀態(tài)條、外觀等一些選擇。三是在MFC AppWizard-Step 4選擇Advanced按鈕后彈出的對話框中,選擇窗口的樣式。6-5 如何用MFC提供的程序設(shè)計向?qū)崿F(xiàn)

10、具有可拆分窗口的界面程序?答:在MFC提供的程序設(shè)計向?qū)FC AppWizard的第四步中,即在MFC AppWizard-Step 4 of 6對話框中按下Advanced按鈕,在隨后打開的Advanced Options對話框中選擇Window Styles選項卡,并在該選項卡中選擇Use split window復(fù)選項。這樣,由向?qū)沙绦蚓蜁哂锌刹鸱执翱诘慕缑媪恕?-6 文檔類的成員函數(shù)UpdateAllViews的作用是什么?答:通知文檔所對應(yīng)的所有窗口同時進(jìn)行重繪。6-7 為什么拆分窗口的顯示更新必須要同步?答:因為應(yīng)用程序的所有拆分窗口顯示的應(yīng)該是同一個文檔,所以當(dāng)文檔發(fā)生變

11、化時,該文檔所對應(yīng)的窗口當(dāng)然要同時更新顯示以正確地反映文檔的內(nèi)容。6-8 什么是無效顯示區(qū)?答:無效顯示區(qū)一般定義為窗口用戶區(qū)上的一個矩形區(qū)域,這個區(qū)域應(yīng)覆蓋所有因文檔發(fā)生變化而需要重繪的部分。當(dāng)程序需要重新繪制一個圖形時,只要重新繪制該矩形內(nèi)部的圖形就可以了。6-9 如何提高拆分窗口同步更新的效率?答:原則上,想辦法只繪制無效顯示區(qū)。7-1 鼠標(biāo)消息分哪兩類,它們之間有什么區(qū)別?答:根據(jù)產(chǎn)生鼠標(biāo)消息時鼠標(biāo)光標(biāo)所處的位置,鼠標(biāo)消息分為:客戶區(qū)鼠標(biāo)消息和非客戶區(qū)鼠標(biāo)消息兩類。在應(yīng)用程序窗口中,用戶可以繪圖的部分叫做客戶區(qū)或者用戶區(qū),而除此之外的區(qū)域叫非客戶區(qū)。鼠標(biāo)在客戶區(qū)產(chǎn)生的消息叫客戶區(qū)鼠標(biāo)消

12、息,在非客戶區(qū)產(chǎn)生的消息叫非客戶區(qū)鼠標(biāo)消息。7-2 常用的客戶區(qū)鼠標(biāo)消息有哪些?答:WM_LBUTTONDBCLK 雙擊鼠標(biāo)左鍵 WM_LBUTTONDOWN 按下鼠標(biāo)左鍵 WM_LBUTTONUP 釋放鼠標(biāo)左鍵 WM_MOUSEMOVE 移動鼠標(biāo) WM_RBUTTONDBCLK 雙擊鼠標(biāo)右鍵 WM_RBUTTONDOWN 按下鼠標(biāo)右鍵 WM_RBUTTONUP 釋放鼠標(biāo)右鍵7-3 在程序設(shè)計中,如何使用非客戶區(qū)鼠標(biāo)消息?答:首先,在主框架窗口類的聲明中手工添加非客戶消息響應(yīng)函數(shù)的聲明,然后在主框架窗口類實現(xiàn)文件的消息映射表中添加消息映射,最后在主框架窗口類的實現(xiàn)文件中,添加鼠標(biāo)響應(yīng)函數(shù)并實現(xiàn)

13、它。7-4 如何安全地接收應(yīng)用程序窗口以外的鼠標(biāo)消息?答:在一般情況下,應(yīng)用程序窗口是不會接收窗口之外的鼠標(biāo)消息的,如果用戶想接收應(yīng)用程序窗口之外的鼠標(biāo)信息,必須設(shè)法捕獲鼠標(biāo)信息。在Windows中,聲明了一個專門用來捕獲鼠標(biāo)消息函數(shù)CWnd*SetCapture;該函數(shù)一旦被調(diào)用,則所有的鼠標(biāo)消息都將發(fā)往應(yīng)用程序的窗口中。在捕獲鼠標(biāo)消息并完成了所應(yīng)該做的工作之后,應(yīng)用程序應(yīng)該及時釋放鼠標(biāo),以使鼠標(biāo)可以按系統(tǒng)預(yù)定的正常方式發(fā)送信息,否則將使鼠標(biāo)的一些正常作用失效。釋放鼠標(biāo)要使用下面的這個函數(shù):BOOL ReleaseCapture。7-5 什么樣的窗口才能接收鍵盤消息?答:在Windows中,

14、有時會同時打開多個窗口。在這些窗口中只有一個是活動窗口,這個窗口一般是屏幕上位置最靠前的窗口,它的特征是其標(biāo)題欄被點亮的,而不是灰色的。只有活動窗口才具有輸入焦點,而Windows中規(guī)定只有具有輸入焦點的窗口才能接收鍵盤消息,也就是說,只有活動窗口才能接收鍵盤消息。7-6 為什么在Windows應(yīng)用程序中不直接使用鍵盤的掃描碼,而使用與鍵盤無關(guān)的虛擬碼?怎樣理解Windows中設(shè)備無關(guān)性這個概念,設(shè)備無關(guān)性對編寫應(yīng)用程序有什么作用?答:鍵盤的掃描碼是當(dāng)用戶直接敲擊鍵盤上的按鍵時,由鍵盤的接口直接產(chǎn)生的與該鍵對應(yīng)的一種編碼。由于市面上的鍵盤種類很多,所以不同類型的鍵盤產(chǎn)生的掃描碼有可能是不同的,

15、也就是說,這種掃描碼是與具體的鍵盤相關(guān)的。這樣在編寫程序時會有很大的不便。所以在Windows編程中提出了設(shè)備無關(guān)性這個概念,它是基于通用性來設(shè)計的,基于這種方法設(shè)計出來的程序是不依賴于具體的硬件的,甚至不依賴于軟件。它不單單是針對鍵盤。另外,它還應(yīng)用在網(wǎng)絡(luò)通信等方面。因此,設(shè)備無關(guān)性為人們編寫程序帶來了很大的方便。7-7 鍵盤消息分為哪幾類?哪些鍵只產(chǎn)生按鍵消息,不產(chǎn)生字符消息?答:鍵盤消息可以分成:按鍵消息和字符消息兩類。按鍵消息分為系統(tǒng)按鍵消息(WM_KEYDOWN,WM_KEYUP)和非系統(tǒng)按鍵消息(WM_SYSKEYDOWN,WM_SYSKEYUP)。字符消息也同樣分為系統(tǒng)字符消息(

16、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鍵、功能鍵、光標(biāo)移動鍵、特殊字符鍵。7-8 在程序中如何確定窗口何時具有輸入焦點,何時失去輸入焦點?答:當(dāng)應(yīng)用程序的窗口獲得輸入焦點時,會發(fā)出WM_SETFOCUS消息;而當(dāng)窗口失去輸入焦點時,會發(fā)出WM_KILLFOCUS消息。如果一個窗口獲得了輸入焦點,便可以用鍵盤對這個窗口進(jìn)行操作。8-1 在Wind

17、ows應(yīng)用程序中,什么樣的數(shù)據(jù)稱為資源?常用資源有哪些?答:資源是一種數(shù)據(jù)。在應(yīng)用程序啟動后,它們?nèi)匀获v留在硬盤上的可執(zhí)行文件中,只是在應(yīng)用程序需要時,才從可執(zhí)行文件中讀取它們。常用的資源有菜單、圖標(biāo)、字符串、快捷鍵、位圖等。8-2 在Visual C+中,編輯資源數(shù)據(jù)可以使用哪兩種方法?答:(1)在文本編輯器中直接對資源腳本文件和資源頭文件進(jìn)行編輯的方法。(2)使用Visual C+的資源編輯器對資源腳本文件和資源頭文件進(jìn)行編輯的方法。8-3 程序運(yùn)行時,用戶選中一個菜單項,會發(fā)出哪種消息?根據(jù)什么來判斷消息源?答:用戶選中菜單項時,會發(fā)出WM_COMMAND消息,系統(tǒng)根據(jù)菜單項的標(biāo)識ID來

18、識別是哪一個菜單項發(fā)出的消息。8-4在程序中如何使用圖標(biāo)資源?答:先用圖標(biāo)編輯器制作圖標(biāo),以擴(kuò)展名ico把圖標(biāo)文件存盤,并把這個圖標(biāo)文件先加入工程的資源文件夾中,然后在工程的資源頭文件中定義資源的標(biāo)識,在資源描述文件中聲明圖標(biāo)文件的路徑,這樣就可以在程序中需要的地方使用它了。8-5 簡述在mfc中使用位圖資源的步驟。答:(1)使用LoadBitmap函數(shù)把位圖資源載入位圖對象。(2)用GetBitmap獲得位圖信息。(3)用以下代碼把位圖選入內(nèi)存環(huán)境變量。CDC MemDC/定義設(shè)備環(huán)境對象MemDC.CreateCompatibleDC(NULL);/創(chuàng)建內(nèi)容設(shè)備環(huán)境MemDC.Select

19、Object(&m_Bmp);(4)用BitBlt函數(shù)顯示位圖。9-4 什么是序列化?什么是永久性對象?答:序列化是面向?qū)ο蟪绦蛟O(shè)計中應(yīng)對象這種數(shù)據(jù)的存儲和恢復(fù)的要求而產(chǎn)生的一種文件讀寫機(jī)制。具有序列化能力的對象叫做永久性對象。9-5 設(shè)計永久性類的時候必須使用哪兩個宏?答:宏DECLARE_SERIAL和IMPLEMENT_SERIAL。10-1 簡述在應(yīng)用程序的窗口中使用一個控件的步驟。答:首先在使用控件的類中聲明控件,在合適的位置創(chuàng)建對象,然后向應(yīng)用程序的消息映射中添加需要的消息,最后實現(xiàn)消息響應(yīng)函數(shù)。10-2 怎樣才能使控件成為窗口的子窗口并且在窗口中可見?答:為了使控件成為窗

20、口的子窗口并且在窗口中可見,兩個控制樣式的常數(shù)是所有控件都必須使用的,一個是WS_CHILD,另一個是WS_VISIBLE,前者使控件成為應(yīng)用程序窗口的子窗口,后者使控件可見。在使用多個常數(shù)指定控件樣式時,應(yīng)該用符號“|”將其進(jìn)行連接。10-3 為何創(chuàng)建每個控件一般都要傳遞this參數(shù)給Create函數(shù)?答:因為在一般的情況之下都是為某一窗口對象創(chuàng)建控件,所以必須調(diào)用Create函數(shù)創(chuàng)建控件時,在控件的父窗口參數(shù)要用this作為參數(shù)。10-5 控件的標(biāo)識有什么用途?一般在應(yīng)用程序的什么位置創(chuàng)建控件?答:控件標(biāo)識符的作用是用來區(qū)分應(yīng)用程序中的不同控件的。一般情況下,創(chuàng)建控件的最佳位置在OnCre

21、ate成員函數(shù)。10-6 按鈕控件能創(chuàng)建哪三種不同的形式?答:下壓按鈕、復(fù)選框和單選按鈕。11-1 什么是對話框模板資源描述文件?答:用來描述對話框外觀及對話框上控件布局的文本文件叫做對話框模板資源文件。11-2 用戶定義的對話框類派生自哪個類?答:Cdialog。11-3 通常在什么地方進(jìn)行對話框的初始化?答:通常在類CDialog的OnInitDig成員函數(shù)中進(jìn)行對話框的初始化。這個函數(shù)在對話框啟動后,且還沒有顯示的時候被調(diào)用。11-4 MFC有哪些通用對話框類?答:CFileDialog、CColorDialog、CFontDialog、CFindReplaceDialog、CPageS

22、etupDialog和CprintDialog。11-5 Windows有哪兩類對話框?它們的區(qū)別是什么?答:模式對話框和非模式對話框。它們的區(qū)別為模式對話框直到退出對話框才返回應(yīng)用程序,非模式對話框可以與應(yīng)用程序同時工作?;靖拍睿篧indows把為這種復(fù)雜對象所定義的標(biāo)識叫做句柄第一章 Windows應(yīng)用程序基礎(chǔ)知識1、Windows應(yīng)用程序是靠消息來驅(qū)動的,消息是一個描述事件的結(jié)構(gòu)。2、在Windows應(yīng)用程序的主函數(shù)中,首先要注冊窗口類型,然后創(chuàng)建并顯示窗口。創(chuàng)建窗口后程序就進(jìn)入消息循環(huán),在消息循環(huán)中,程序不斷地獲得消息并將信息派送給對應(yīng)的窗口函數(shù)進(jìn)行處理。3、窗口函數(shù)是處理消息的地方

23、,它為switch-case結(jié)構(gòu),每一個case對應(yīng)一段消息響應(yīng)代碼。4、用函數(shù)Windows應(yīng)用程序進(jìn)行封裝可以使程序的結(jié)構(gòu)更為清晰。第二章 Windows應(yīng)用程序的類封裝1、CwinApp類是MFC對Windows主函數(shù)的封裝,通過派生CwinApp可以得到自己的應(yīng)用程序類,在應(yīng)用程序類中主要實現(xiàn)了全局初始化操作,應(yīng)用程序類創(chuàng)建了主窗口后便進(jìn)入了消息循環(huán)。2、應(yīng)用程序的主窗口一般都是CframeWnd的派生類,可以通過派生該類得到自己的主窗口類。3、Windows應(yīng)用程序的窗口函數(shù)封裝到CcmdTarget類中,所有希望響應(yīng)消息的類都應(yīng)該以CcmdTarget為基類來派生。4、MFC是用消

24、息映射表來實現(xiàn)消息與消息響應(yīng)函數(shù)之間的映射的。MFC通過宏來聲明和實現(xiàn)消息映射表。MFC的這種表驅(qū)動的機(jī)制使消息處理結(jié)構(gòu)變得更加清晰、明了。第三章 MFC應(yīng)用程序框架1、應(yīng)用程序類、窗口框架類、視圖類、文檔類構(gòu)成了應(yīng)用程序的框架,框架的功能是通過各類之間的協(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)建對象能力類時,必須在該類中定

25、義一個無參數(shù)的構(gòu)造函數(shù)。6、在應(yīng)用程序中,使用宏RUNTIME_CLASS來獲得類信息表。第四章 圖形1、Windows提供了圖形用戶接口使用戶得以在窗口中繪圖。2、在MFC中使用CDC類的派生類向窗口和打印機(jī)等輸出設(shè)備繪圖。每個設(shè)備環(huán)境中都包含畫筆、畫刷、位圖、調(diào)色板、字體等GDI對象。3、可以通過創(chuàng)建GDI對象并將其選入設(shè)備環(huán)境來完成所需要的繪圖操作。第五章 MFC的通用類1、群體數(shù)據(jù)類基本上都是通過模板類實現(xiàn)的2、視圖類對象是用成員函數(shù)GetDocument獲得文檔類對象指針的,然后視圖對象就可以通過這個指針來訪問文檔對象中的數(shù)據(jù)。第六章 Windows應(yīng)用程序界面的設(shè)計1、每次繪圖操作

26、結(jié)束后要調(diào)用視圖類的成員函數(shù)InvalidateRect()啟動OnDraw()函數(shù)以更新顯示。2、文檔/視圖類型的應(yīng)用程序可以實現(xiàn)一個文檔多個顯示,但是在文檔的內(nèi)容發(fā)生改變的時候,要對所有的視圖進(jìn)行更新。3、在需要時,應(yīng)用程序的界面可以設(shè)計為帶有滾動條的窗口形式。第七章 鼠標(biāo)和鍵盤1、在應(yīng)用程序的界面上,可以通過對鼠標(biāo)左擊、右擊、移動等事件的處理來響應(yīng)用戶的鼠標(biāo)輸入。2、鼠標(biāo)消息有用戶區(qū)鼠標(biāo)消息和非用戶區(qū)鼠標(biāo)消息兩種,在應(yīng)用程序中主要使用用戶區(qū)鼠標(biāo)消息。3、可以用消息捕獲函數(shù)來捕獲窗口外的鼠標(biāo)消息,以完成某些特殊的操作。4、可以通過處理字符消息、按鍵等鍵盤消息對用戶的鍵盤操作進(jìn)行響應(yīng)。5、在

27、計算機(jī)的顯示器屏幕上,如果有多個窗口存在的話,則具有焦點的窗口所對應(yīng)的應(yīng)用程序是具有接收用戶消息能力的程序,這個程序叫做“正在活動狀態(tài)的應(yīng)用程序”。第八章 資源1、資源是與應(yīng)用程序邏輯數(shù)據(jù)相隔離,用資源描述文件說明,由資源編輯器生成,可以動態(tài)加載方式供Windows應(yīng)用程序使用的數(shù)據(jù)。資源是程序用戶界面的重要組成部分。常用的資源有菜單、加速鍵、圖標(biāo)、位圖等。2、程序所需的資源使用資源描述文件來說明,并在資源文件中用標(biāo)識符唯一地進(jìn)行標(biāo)識。3、資源可以使用VC+的資源編輯器來創(chuàng)建和編輯,也可以使用文本編輯器來編輯。4、菜單的使用與Windows的命令消息WM_COMMAND相關(guān)。5、菜單項消息映射

28、宏的格式是:ON_COMMAND(菜單項ID,消息響應(yīng)函數(shù)名)6、菜單項動態(tài)修改的消息映射宏的格式是:ON_UPDATE_COMMAND_UI(菜單項ID,消息響應(yīng)函數(shù)名)7、在文檔/視圖結(jié)構(gòu)的程序中,資源的加載是由應(yīng)用程序類的InitInstance函數(shù)中通過構(gòu)造CdocTemplate對象來完成的。8、加速鍵在資源描述文件中與所對應(yīng)的菜單項關(guān)聯(lián)。9、圖標(biāo)使用VC+開發(fā)環(huán)境的菜單Project|Add To Project|Files添加。10、在應(yīng)用程序中,位圖用Cbitmap對象來保存,由成員函數(shù)LoadBitmap來加載,在顯示時需先繪制到內(nèi)存DC中,然后再用BitBlt函數(shù)把它由內(nèi)存

29、DC復(fù)制到顯示設(shè)備的DC。第九章 MFC的文件處理機(jī)制1、文件是存儲在永久性存儲介質(zhì)上的數(shù)據(jù)的集合。在面向?qū)ο蟮膽?yīng)用程序中也涉及對象存盤的問題。對象存盤可以使用序列化的機(jī)制實現(xiàn)。2、MFC把文件的打開、關(guān)閉、讀寫操作封裝在類CFile中。CFile對象代表一個磁盤文件,使用CFile對象可以直接對文件進(jìn)行操作。該類有一個很有用的派生類:CmemFile。3、Carchive是對CFile的再封裝,它重載了插入符“”和提取符“”,它是一種I/O流,它借助CFile類對象完成磁盤文件數(shù)據(jù)的存取操作。4、對象序列化是指將類對象轉(zhuǎn)換成byte/bit流,以便于對象通過網(wǎng)絡(luò)傳輸或保存在磁盤上,對象序列化

30、是將byte/bit流化的對象轉(zhuǎn)換成內(nèi)存中的類對象的過程。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、控件是應(yīng)用程序窗口的子窗口。MFC的控件類封裝了Windows的標(biāo)準(zhǔn)控

31、件和通用控件,這些控件類都派生于類CWnd。2、靜態(tài)文本控件由類Cstatic封裝,按鈕控件由類Cbutton封裝,編輯控件由類Cedit封裝,進(jìn)度條控件由類CprogessCtrl封裝,微調(diào)器控件由類CspinButtonCtrl封裝,圖像列表控件由類CimageList封裝,列表視圖控件由類ClistCtrl封裝??丶惖氖褂门c窗口類CWnd的使用基本相同。3、控件顏色的設(shè)置在Windows消息WM_CTLCOLOR的消息響應(yīng)函數(shù)OnCtlColor中完成。其消息映射宏是:ON_WM_CTLCOLOR()第十一章 對話框1、 對話框的基本行為由類CDialog封裝,對話框的外觀由模板資源定

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

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

34、句柄:就是一個4字節(jié)長的唯一的數(shù),用以標(biāo)識許多不同的對象類型。API函數(shù):用來開發(fā)Windows SDK應(yīng)用程序的軟件開發(fā)工具包是用C語言編寫的一個大型函數(shù)庫,這個庫中的函數(shù)叫做API函數(shù)消息映射表:在Windows SDK應(yīng)用程序的窗口函數(shù)中,是采用switch-case分支結(jié)構(gòu)實現(xiàn)消息處理的,這種方式不適合面向?qū)ο笤O(shè)計的要求。因此MFC建立了一套自己的消息映射機(jī)制消息映射表。類信息表:MFC程序在不同的場合下還經(jīng)常用到類的其他信息,于是MFC就把這些信息統(tǒng)統(tǒng)都放在映射表項中,該表即叫著類信息表。資源:資源是一種數(shù)據(jù)。在應(yīng)用程序啟動后,它們?nèi)匀获v留在硬盤上的可執(zhí)行文件中,只是在應(yīng)用程序需要時

35、,才從可執(zhí)行文件中讀取它們。填空1、Windows應(yīng)用程序的主函數(shù)有哪三個主要任務(wù)?答:注冊窗口類、創(chuàng)建應(yīng)用程序的窗口和建立消息循環(huán)。2、常見句柄的名稱:HWND窗口句柄HINSTANCE當(dāng)前程序應(yīng)用實例句柄HCURSOR光標(biāo)句柄HFONT字體句柄HPEN畫筆句柄HBRUSH畫刷句柄HDC圖形設(shè)備環(huán)境句柄HBITMAP位圖句柄HICON圖標(biāo)句柄HMENU菜單句柄HFILE文件句柄3、消息循環(huán)的三個函數(shù)的作業(yè):Getmessage:從消息隊列中獲取消息;Translatemessage:把鍵盤消息翻譯成字符消息;Dispatchmessage:把消息派送給系統(tǒng),并通過系統(tǒng)發(fā)送給窗口。4、MFC應(yīng)

36、用程序的界面有哪三種方式?答:(1)單文檔界面;(2)多文檔界面;(3)基于對話框界面。5、非模態(tài)對話框是使用Cdialog類的成員函數(shù)Create()來創(chuàng)建和顯示的。模板對話框使用CDialog類的成員函數(shù)DoModal()來創(chuàng)建對話框。簡答1、 在MFC中CDC的派生類有哪幾個,試說出它們的作用。答:CclientDC應(yīng)用在除WM_PAINT消息之外的消息處理函數(shù)中,提供窗口客服區(qū)的設(shè)備描述環(huán)境。CmetaFileDC代表Windows圖元文件的設(shè)備描述環(huán)境。在創(chuàng)建與設(shè)備無關(guān)的并且可以回收的圖像時使用這個類型的DC。CpaintDC在WM_PAINT消息的處理函數(shù)OnDraw中使用的窗口用

37、戶區(qū)的設(shè)備描述環(huán)境。CwindowDC提供在整個窗口內(nèi)繪圖的設(shè)備描述環(huán)境。2、如何使類具有序列化能力?答:類必須滿足以下三個條件。(1)從Cobject類或其派生類派生,并重寫Serialize()函數(shù);(2)必須在類聲明文件中使用序列化聲明宏DECLARE_SERIAL(),在類實現(xiàn)文件中使用序列化實現(xiàn)宏IMPLEMENT_SERIAL();(3)必須定義一個無參數(shù)的構(gòu)造函數(shù),以滿足動態(tài)創(chuàng)建對象的需要。3、標(biāo)準(zhǔn)控件和通用控件有什么不同?答:主要區(qū)分是目標(biāo)不同。標(biāo)準(zhǔn)控件在最早的Windows版本中就已經(jīng)存在。通用控件是在后來的版本中添加進(jìn)去的,目標(biāo)是使用戶界面看起來更加現(xiàn)代化。標(biāo)準(zhǔn)控件發(fā)送的是

38、WM_COMMAND消息,通用控件則是WM_NOTIFY消息。程序例5-1 CString類的應(yīng)用實例在視圖類的鼠標(biāo)左鍵按下消息中輸入如下代碼。void CMFCexp5_1View:OnLButtonDown(UINT nFlags,CPoint point) CString strl=”This is an easy way to perform”; CString str2=”string concantenation!”;CString str3=str1+”+str2;AfxMessageBox(str3,MB_OK|MB_ICONINFORMATION); CView:OnLBut

39、tonDown(nFlags,point);5-2 編寫一個程序,當(dāng)按下鼠標(biāo)左鍵時,在鼠標(biāo)的光標(biāo)位置會顯示一個隨機(jī)大小的矩形。(2)在應(yīng)用程序頭文件StdAfx.h中加入包含命令。#include<afxtemp1.h>(3)在視圖類的聲明中定義一個存放CRect類型元素的數(shù)組m_Rectag。Class CMFCexp5_2Doc:public Cdocumentprotected:CArray<CRect,CRect&>m_Rectag;(4)在視圖類的構(gòu)造函數(shù)中定義m_Rectag數(shù)組的大小。CMFCexp5_2View:CMFCexp5_2View()m

40、_Rectag.SetSize(256,256)(5)在視圖類鼠標(biāo)左鍵按下消息響應(yīng)函數(shù)中,將每次單擊鼠標(biāo)產(chǎn)生的矩形數(shù)據(jù)存入數(shù)組。void CMFCexp5_2View:OnLButtonDown(UINT nFlags, CPoint point) int r=rand()%50+5;CRectRet(point.x-r,point.y-r,point.x+r,point.y+r);m_Rectag.Add(Ret);InvalidateRect(Ret,FALSE);CView:OnLButtonDown(nFlags, point);(6)在視圖類的WM_PAINT消息響應(yīng)函數(shù)中重畫數(shù)組中

41、的矩形。void CMFCexp5_2View:OnDraw(CDC* pDC)for(inti=0 ;i<m_Rectag.GetSize();i+)pDC->Rectangle(m_Rectagi);5-3 用文檔/視圖結(jié)構(gòu)程序完成例5-2(5)在視圖類的OnLButtonDown函數(shù)中設(shè)置指向文檔的指針并通過該指針獲取文檔的成員。void CMFCexp5_3View:OnLButtonDown(UINT nFlags, CPoint point) CMFCexp5_3Doc*pDoc=GetDocument();/獲取文檔指針int r=rand()%50+5;CRectR

42、et(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:OnLButtonDown(nFlags, point);(6)在OnDraw函數(shù)中畫出數(shù)組中的矩形。void CMFCexp5_3View:OnDraw(CDC* pDC)CMFCexp5_3Doc* pDoc = GetDocument();/獲取文檔指針ASSERT_VALID(pDoc);for(int i=0;i<pDoc-&g

43、t;m_Rectag.GetSize();i+)pDC->Rectangle(pDoc->m_Rectagi);7-1 編寫可以在用戶區(qū)中繪制一個矩形動應(yīng)用程序,在按下鼠標(biāo)左鍵后,這個矩形會把它的左上角移動到鼠標(biāo)位置;而當(dāng)按下Shift鍵的同時,按下鼠標(biāo)左鍵,則矩形恢復(fù)原位置。(2)在文檔類中添加一個數(shù)據(jù)成員tagRec來存儲數(shù)據(jù)。Class CMFCexp7_1Doc:public Cdocument Public: CRect m_tagRec;(3)在文檔類的構(gòu)造函數(shù)中,初始化數(shù)據(jù)成員。CMFCexp7_1Doc: CMFCexp7_1Doc() m_tagRec.left=

44、30; m_tagRec.top=30; m_tagRec.right=350; m_tagRec t.bottom=300;(4)在其視圖類的鼠標(biāo)右鍵按下消息響應(yīng)函數(shù)中寫入如下代碼。void CMFCexp7_1View:OnRButtonDown(UINT nFlags,CPoint point) CMFCexp7_1Doc*pDoc=GetDocument();if(nFlags&MK_SHIFT)pDoc->tagRec.left=30;pDoc->tagRec.top=30;pDoc->tagRec.right=350;pDoc->tagRec.bot

45、tom=300;elsepDoc->tagRec.left=point.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)在視圖類的OnDraw函數(shù)中編寫如下代碼。void CMFCexp7_1View:OnDraw(CDC*pDC) CMFCexp7_1Doc*pDoc=GetDocumengt(); ASS

46、ERT_VALID(pDoc); pDC->Rectangle(pDoc->m_tagRec);例7-2 一個測試鼠標(biāo)移動消息的程序。(2)在文檔類聲明中,添加一個點類的數(shù)據(jù)成員m_point.Class CMFCexp7_2Doc:public Cdocument Public: Cpoint m_point;(3)在視圖類中添加鼠標(biāo)移動消息響應(yīng)函數(shù),并輸入如下代碼。void CMFCexp7_2View:OnMouseMove(UINT nFlags, CPoint point) CMFCexp7_2Doc*pDoc=GetDocument();pDoc->m_Point

47、=point;InvalidateRect(NULL,FALSE);CView:OnMouseMove(nFlags, point);(4)在視圖類的OnDraw函數(shù)中添加如下代碼。void CMFCexp7_2View:OnDraw(CDC* pDC)CMFCexp7_2Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);CPoint point(30,30);pDC->MoveTo(point);pDC->LineTo(pDoc->m_Point);例7-3 編寫一個程序,使鼠標(biāo)的光標(biāo)在標(biāo)題欄或窗口邊框上移動時,在用戶區(qū)顯示鼠標(biāo)光標(biāo)的

48、位置。(2)在主框架窗口類CMainFrame的聲明中,手工添加消息響應(yīng)函數(shù)的聲明。Afx_msg void OnNcMouseMove(UINT nHitTest,CPoint point)(3)在主框架窗口類CMainFrame的實現(xiàn)文件的消息映射表中,添加消息映射。BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)ON_WM_NCMOUSEMOVE()END_MESSAGE_MAP()(4)在主框架窗口類CMainFrame的實現(xiàn)文件中,添加鼠標(biāo)響應(yīng)函數(shù)的實現(xiàn)。Void CMainFrame:OnNcMouseMove(UINT nHitTest,CPoin

49、t point)CClientDC clientDC(this);char s20;wsprintf(s, "X=%d Y=%d ", point.x, point.y);clientDC.TextOut(20, 20, s);CFrameWnd:OnNcMouseMove(nHitTest,point); 例7-4 當(dāng)鼠標(biāo)左鍵按下時,可以捕獲鼠標(biāo)消息的程序。void CMFCexp7_4View:OnMouseMove(UINT nFlags, CPoint point) char str50;CClientDC dc(this);dc.TextOut(20, 20, "WM_MOUSEMOVE");wsprintf(str, "X: %d Y: %d ", point.x, point.y);dc.TextOut(200, 20, str);CView:OnMouseMove(nFlags, point);void CMFCexp7_4View:OnLButtonDown(UINT nFlags, CPoint p

溫馨提示

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

評論

0/150

提交評論