Visual C++程序設(shè)計(jì)與應(yīng)用教程課后答案
《Visual C++程序設(shè)計(jì)與應(yīng)用教程課后答案》由會(huì)員分享,可在線閱讀,更多相關(guān)《Visual C++程序設(shè)計(jì)與應(yīng)用教程課后答案(24頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、1.6習(xí)題 1. 填空題 (1) 項(xiàng)目工作區(qū)一般在集成開發(fā)環(huán)境的左側(cè)。它展示一個(gè)項(xiàng)目的幾個(gè)方面,它們分別是ClassView、ResourceView和FileView。 (2) 編譯程序的快捷鍵是Ctrl+F7,鏈接程序的快捷鍵是F7運(yùn)行程序的快捷鍵是Ctrl+F5。 (3) 項(xiàng)目工作區(qū)文件的擴(kuò)展名為—且sw。 (4) 應(yīng)用程序向?qū)ppWizard的作用是幫助用戶一步步生成一個(gè)新的應(yīng)用程序,并 且自動(dòng)生成應(yīng)用程序所需的基本代碼。通過ClassWizard可以增加消息映射和成員變量。 (5) 菜單選擇可以通過兩種方法來講行:一種是鼠標(biāo)操作:另一種是鍵盤操作。
2、 (6) 編譯微型條工具欄最右邊按鈕的功能是Insert/RemoveBreakpoint。 (7) 快捷鍵或菜單及相關(guān)資源的資源符號的前綴是IDR_。 (8) 用戶可以通過項(xiàng)目工作區(qū)窗口的ResourceView視圖來查看資源。 2. 選擇題 (1)項(xiàng)目文件的擴(kuò)展名是()。 D..cpp D.Breakpoints A. .exeB..dspC..dsw (2)設(shè)置斷點(diǎn)的默認(rèn)方式是()。(第2章) A.LocationB.DataC.Message ⑶用應(yīng)用程序向?qū)ppWizard創(chuàng)建C++源文件,應(yīng)選擇()選項(xiàng)卡。 A.FilesB.Projects ⑷Stan
3、dard工具欄中最左邊按鈕與( C.Workspaces D.OtherDocuments )菜單命令的功能一樣。 D.NewWorkspace D.位圖 A.NewB.NewFileC.NewTextFile (5)Windows資源提供的資源編輯器不能編輯()。 A.菜單B.工具欄C.狀態(tài)欄 3. 判斷題 (1) 打開一個(gè)項(xiàng)目,只需打開對應(yīng)的項(xiàng)目工作區(qū)文件。(T) (2) 用戶可以通過Tools|Customize菜單命令設(shè)置集成開發(fā)環(huán)境的工具欄。(T) (3) 通過應(yīng)用程序向?qū)ppWizard建立的程序不能被立即執(zhí)行。(F) (4) 在同一項(xiàng)目中‘Visu
4、alC++在內(nèi)部用來標(biāo)識資源的資源符號不能重復(fù)。(T) (5) 在Windows環(huán)境下,資源與程序源代碼緊密相關(guān)。(F) 4. 簡答題 (1)什么是項(xiàng)目?它是由什么組成的? 在VisualC++集成開發(fā)環(huán)境中,把實(shí)現(xiàn)程序設(shè)計(jì)功能的一組相互關(guān)聯(lián)的C++源文件、資源文件以及支撐這些文件的類的集合稱為一個(gè)項(xiàng)目。項(xiàng)目是VisualC++IDE開發(fā)程序的基本單位,一個(gè)項(xiàng)目至少包含一個(gè)項(xiàng)目文件,項(xiàng)目文件的擴(kuò)展名為dsp。項(xiàng)目文件保存了項(xiàng)目中所用到的源代碼文件和資源文件的信息,如文件名和路徑等。同時(shí),項(xiàng)目文件還保存了項(xiàng)目的編譯設(shè)置等信息,如調(diào)試版(debug)和發(fā)布版(release)。另外,根據(jù)項(xiàng)
5、目類型的不同,一個(gè)項(xiàng)目包含有不同的源文件、資源文件和其他類別的文件。 (2) 解釋項(xiàng)目工作區(qū)中各個(gè)視圖的功能。 ClassView用于顯示項(xiàng)目中定義的類;ResourceView用于顯示項(xiàng)目中所包含的資源文件;FileView用于顯示所創(chuàng)建的項(xiàng)目。 (3) WizardBar工具欄的作用是什么? WizardBar工具欄可以對ClassView和ClassWizard中的命令進(jìn)行快速訪問,使類和成員函數(shù)的操作更加方便,WizardBar會(huì)自動(dòng)跟蹤用戶程序的上下文。 (4) 簡述向項(xiàng)目添加一個(gè)資源的方法。 用戶可以通過在Insert菜單中選擇Resource菜單項(xiàng)來創(chuàng)建新的資源。單擊
6、Resource菜單項(xiàng),彈出InsertResource對話框。首先在對話框的左側(cè)選擇資源類型,然后根據(jù)具體情況,單擊右側(cè)的不同按鈕。若資源需要臨時(shí)創(chuàng)建,則單擊New按鈕,在打開的相應(yīng)資源編輯器中創(chuàng)建資源。若資源文件已經(jīng)存在,則單擊Import按鈕,在ImportResource對話框中選擇資源文件,然后單擊Import按鈕。 2.5習(xí)題 1. 填空題 (1) MFC的全稱是MicrosoftFoundationClass。 (2) Windows是一個(gè)基于事件的消息驅(qū)動(dòng)系統(tǒng)。 (3) 句柄是Windows使用的一種無重復(fù)整數(shù),主要用來標(biāo)識應(yīng)用程序中的一個(gè)對象。 (4) 利用MFC
7、AppWizard[exe]可以創(chuàng)建三種類型的應(yīng)用程序,即單文檔、多文檔和基于對話框的應(yīng)用程序。 (5) 一個(gè)單文檔的MFC應(yīng)用程序框架一般包括5個(gè)類,它們分別是應(yīng)用程序類、框架窗口類、視圖類、文檔類和文檔模板類。 (6) Windows消息主要有3種類型,即標(biāo)準(zhǔn)Windows消息、控件消息和命令消息。 (7) MFC采用消息映射來處理消息。 (8) CWinApp提供4個(gè)成員函數(shù)來實(shí)現(xiàn)傳統(tǒng)SDK應(yīng)用程序WinMain()函數(shù)完成的工作。 2. 選擇題 (1) Windows應(yīng)用程序是按照()非順序的機(jī)制運(yùn)行的。 A. 事件一消息一處理 B. 消息一事件一處理 C. 事件一處
8、理一消息 D. 以上都不對 (2) 下面()不是MFC應(yīng)用程序外觀的選項(xiàng)。 A.DockingtoolbarB.Context-sensitiveHelp C.ActiveXControlsD.Printingandprintpreview (3) 對MFC類的下 列描述中,()是錯(cuò)誤的。 A. 應(yīng)用程序類CWinApp是CWinThread的子類 B. 窗口類CWnd提供了MFC中所有窗口類的基本功能 C. CView是CWnd類的子類 D. CDocTemplate類是Template類的子類 (4)下列()不是 MFC消息映射機(jī)制有關(guān)的宏。 A. DECLAR
9、E_MESSAGE_MAP()宏 B. BEGIN_MESSAGE_MAP()宏 C. DECLARE_SERIAL()宏 D. END_MESSAGE_MAP()宏 3. 判斷題 (1)窗口是Windows應(yīng)用程序的基本操作單元,是應(yīng)用程序與用戶之間交互的接口環(huán) 境,也是系統(tǒng)管理應(yīng)用程序的基本單位。 (2) 應(yīng)用程序都是消息驅(qū)動(dòng)的。 (t)所有的Windows (t) ⑶所有的Windows應(yīng)用程序都是用MFCAppWizard[exe]向?qū)?chuàng)建的。(f) (4) 使用MFC AppWizard[exe]向?qū)?chuàng)建應(yīng)用程序框架時(shí),向?qū)傻奈募皖惷遣豢筛?/p>
10、的。 (f) (5) 消息映射是將消息處理函數(shù)與它要處理的特定消息連接起來的一種機(jī)制。 (t) (6) 命令消息是由菜單項(xiàng)、工具欄按鈕、快捷鍵等用戶界面對象發(fā)出的WM_COMMAND 消息。(t) (7) 利用MFC編程時(shí),所有的消息與消息處理函數(shù)的添加都必須采用ClassWizard類向 導(dǎo)來完成。(f) (8) WinMain函數(shù)是所有Windows應(yīng)用程序的入口。 (9) 可設(shè)置斷點(diǎn),又可取消斷點(diǎn)。 (t) 用快捷鍵F9既 (t) (10)調(diào)式程序時(shí),會(huì)同時(shí)出現(xiàn)Variable窗口和Watch窗口。 4.簡答題 (t) (1) 程序的執(zhí)行過程。 簡述M
11、FC應(yīng)用 MFC應(yīng)用程序啟動(dòng)時(shí),首先創(chuàng)建應(yīng)用程序?qū)ο髏heApp。這時(shí)將自動(dòng)調(diào)用應(yīng)用程序類的構(gòu)造函數(shù)初始化對象theApp,然后由應(yīng)用程序框架調(diào)用MFC提供的WinMain()主函數(shù)。在WinMain()主函數(shù)中,首先通過調(diào)用全局函數(shù)GetApp()來獲取theApp的指針pApp,然后通過該指針調(diào)用theApp的成員函數(shù)InitInstance()來初始化應(yīng)用程序。在應(yīng)用程序的初始化過程中,同時(shí)還構(gòu)造了文檔模板,產(chǎn)生最初的文檔、視圖和主框架窗口,并生成工具欄和狀態(tài)欄。當(dāng)InitInstance()函數(shù)執(zhí)行完畢后,WinMain()函數(shù)將調(diào)用成員函數(shù)Run(),進(jìn)入消息處理循環(huán),直到函數(shù)Ru
12、n()收到WM_QUIT消息。MFC首先調(diào)用CWinApp類的成員函數(shù)ExitInstance(),然后調(diào)用靜態(tài)對象的析構(gòu)函數(shù),包括CWinApp對象,最后退出應(yīng)用程序,將控制權(quán)交給操作系統(tǒng)。 在初始化的最后,應(yīng)用程序?qū)⑹盏絎M_PAINT消息,框架會(huì)自動(dòng)調(diào)用視圖類的OnDraw()函數(shù)繪制程序客戶區(qū)窗口。這時(shí),應(yīng)用程序的基本窗口已經(jīng)生成,應(yīng)用程序準(zhǔn)備接收系統(tǒng)或用戶的消息,以便完成用戶需要的功能。如果消息隊(duì)列中有消息且不是WM_QUIT消息,則將消息分發(fā)給窗口函數(shù),以便通過MFC消息映射宏調(diào)用指定對象的消息處理函數(shù)。如果消息隊(duì)列中沒有消息,函數(shù)Run()就調(diào)用函數(shù)OnIdle()進(jìn)行空閑時(shí)間
13、的處理。 (2)簡述文檔/視圖 與其他類對象的關(guān)系。 在MFC應(yīng)用程序中,文檔類和視圖類是用戶最常用的兩個(gè)類,它們之間是密切相關(guān)的。文檔/視圖體系結(jié)構(gòu)是MFC應(yīng)用程序框架結(jié)構(gòu)的基石,它定義了一種程序結(jié)構(gòu),這種結(jié)構(gòu)利用文檔對象保存應(yīng)用程序的數(shù)據(jù),依靠視圖對象控制視圖顯示數(shù)據(jù),文檔與視圖的關(guān)系是一對多的關(guān)系,也就是說,文檔中的數(shù)據(jù)可以以不同的方式顯示oMFC在類CDocument和CView中為文檔和視圖提供了基礎(chǔ)結(jié)構(gòu)。CWinApp、CFrameWnd和其他類與CDocument和CView共同把所有的程序片段連在一起。文檔/視圖與其他類對象的關(guān)系如下圖所示。 (3) 簡述MFC
14、消息映射機(jī)制。 MFC采用消息映射來處理消息。這種消息映射機(jī)制包括一組消息映射宏,用于把一個(gè)Windows消息和其消息處理函數(shù)聯(lián)系起來。MFC應(yīng)用程序框架提供了消息映射功能,所有從CCmdTarget類派生出來的類都能夠擁有自己的消息映射。 (4) 消息WM_LBUTTONDOWN的消息映射宏和消息處理函數(shù)是什么? 消息WM_LBUTTONDOWN的消息映射宏是ON_WM_LBUTTONDOWN(),消息處理函數(shù)是OnRButtonDown()。 (5) 如何自定義消息?如何發(fā)送自定義消息? Windows將所有的消息值分為4段:0x0000?0X03FF消息值范圍段用于Window
15、s系統(tǒng)消息,0x0400?0X7FFF段用于用戶自定義的窗口消息,0x8000?0xBFFF段為Windows保留值,0xC000?0xFFFF段用于應(yīng)用程序的字符串消息。 常量WM_USER(為0x0400)與第一個(gè)自定義消息值相對應(yīng),用戶必須為自己的消息定義相對于WM_USER的偏移值,利用#define語句直接定義自己的消息,如下所示: #defineWM_USERWM_USER+3;//自定義消息WM_USER 也可以調(diào)用窗口消息注冊函數(shù)RegisterWindowMessage()來定義一個(gè)Windows消息,由系統(tǒng)分配消息一個(gè)整數(shù)值。該函數(shù)原型為: UINTRegister
16、WindowMessage(LPCTSTRlpString); 其中參數(shù)IpString是要定義的消息名,調(diào)用成功后將返回該消息的ID值。發(fā)送自定義消息消息采用的函數(shù)是SendMessage()函數(shù)。(文中未講清楚) 3.7習(xí)題 1.填空題 (1) Windows引入GDI的主要目的是為了實(shí)現(xiàn)設(shè)備無關(guān)性。 (2) 與DOS字符方式下的輸出文本不同,Windows是按圖形方式輸出的。 (3) 為了體現(xiàn)Windows的設(shè)備無關(guān)性,應(yīng)用程序的輸出面向一個(gè)稱之為設(shè)備環(huán)境 的虛擬邏輯設(shè)備。 (4) 在一個(gè)MFC應(yīng)用程序中獲得DC的方法主要有兩種:一種是接受一個(gè)參數(shù)為指向 CDC對象的指
17、針:另一種是聲明一個(gè)MFC設(shè)備環(huán)境類的對象,并使用 thd指針為該對象賦值。 (5) Windows用COLORREF類型的數(shù)據(jù)存放顏色,它實(shí)際上是一個(gè)32位整數(shù)。它采用3個(gè)參數(shù)表示紅、綠、藍(lán)分量值,這3個(gè)值的取值范圍為0?255。 (6) 庫存對象是由操作系統(tǒng)維護(hù)的用于繪制屏幕的常用對象,包括庫存畫筆、畫刷、字體等。 (7) 可以利用CGdiObject類的成員函數(shù)CreateStockObject()將GDI對象設(shè)置成指定的庫存對象。 (8) 創(chuàng)建畫筆后必須調(diào)用CDC類的成員函數(shù)SelectOject()將創(chuàng)建的畫筆選入當(dāng)前設(shè)備環(huán)境。 (9) 在默認(rèn)情況下輸出文本時(shí),字體顏色是
18、黑色,背景顏色是白色,背景模式為」透明模式。 (10) 創(chuàng)建畫筆的方法有兩種,一種是定義畫筆對象時(shí)直接創(chuàng)建,另一種是先定義一個(gè)沒有初始化的畫筆對象,再調(diào)用CreatePen()函數(shù)創(chuàng)建指定畫筆。 2.選擇題 (1) 下面()不是MFC設(shè)備環(huán)境類CDC類的派生類。 A.GDI類B.CPaintDC類C.CClientDC類D.CWindowDC類 (2) 下面()不是GDI對象。 A.CFont類B.CPalette類C.CClientDC類D.CBitmap類 (3) 下列描述中,()是錯(cuò)誤的。 A. CreatePointFont()是CFont類提供的創(chuàng)建函數(shù) B. 可使
19、用SetTextAlign()函數(shù)改變文本對齊方式 C. 使用函數(shù)GetTextMetrics()可以獲得所選字體中指定字符串的寬度和高度 D. 可使用DrawText()函數(shù)在給定的矩形區(qū)域內(nèi)輸出文本 (4) 下列()不是MFCCDC類中常用的文本輸出函數(shù)。 A.TextOut()B.DrawText()C.ExtTextOut()D.ExtDrawText() 3.判斷題 (1) CDC類是MFC設(shè)備環(huán)境類的基類。(t) (2) CClientDC代表整個(gè)窗口的設(shè)備環(huán)境。(f) (t) (3)CPen和CFont均是GDI對象。 (4)深綠色RGB值為(0,128,0)
20、(t) ⑸刪除CPen對象可調(diào)用CPen對象的DeleteObject()函數(shù)。(f) (6) 創(chuàng)建陰影畫刷函數(shù)是CreateHatchBrush()。(t) (7) 默認(rèn)的對齊方式是TA_LEFTITA_BOTTOM。(f) (8) DDB又稱GDI位圖,它依賴于具體設(shè)備,只能存在于內(nèi)存中。(t) 4.簡答題 (1)GDI創(chuàng)建哪幾種類型的圖形輸出? 應(yīng)用程序可以使用GDI創(chuàng)建3種類型的圖形輸出:矢量圖形、光柵圖形和文本。 (2) 什么是設(shè)備環(huán)境?它的主要功能有哪些? 設(shè)備環(huán)境DC也稱設(shè)備描述表或設(shè)備上下文。設(shè)備環(huán)境DC是由GDI創(chuàng)建、用來代表設(shè)備連接的數(shù)據(jù)結(jié)構(gòu)。DC的主要功
21、能有以下幾種: ?允許應(yīng)用程序使用一個(gè)輸出設(shè)備。 ?提供Windows應(yīng)用程序、設(shè)備驅(qū)動(dòng)和輸出設(shè)備之間的連接。 ?保存當(dāng)前信息,例如當(dāng)前的畫筆、畫刷、字體和位圖等圖形對象及其屬性,以及顏色和背景等影響圖形輸出的繪圖模式。 ?保存窗口剪切區(qū)域(ClippingRegion),限制程序輸出到輸出設(shè)備中窗口覆蓋的區(qū)域。 (3) 什么是GDI,它有什么功能?MFC將GDI函數(shù)封裝在哪個(gè)類中? GDI是Windows提供了一個(gè)圖形設(shè)備接口的抽象接口。GDI負(fù)責(zé)管理用戶繪圖操作時(shí)功能的轉(zhuǎn)換,其主要功能是實(shí)現(xiàn)設(shè)備無關(guān)性。MFC將GDI函數(shù)封裝在CDC類中。 (4) 請敘述設(shè)備無關(guān)性的含義,實(shí)現(xiàn)
22、設(shè)備無關(guān)性需要哪幾個(gè)環(huán)節(jié)?所謂設(shè)備無關(guān)性,是指操作系統(tǒng)屏蔽了硬件設(shè)備的差異,使用戶編程時(shí)一般無須考慮設(shè) 備的類型,如不同種類的顯示器或打印機(jī)。當(dāng)然,實(shí)現(xiàn)設(shè)備無關(guān)性的另一個(gè)重要環(huán)節(jié)是設(shè)備驅(qū)動(dòng)程序。不同設(shè)備根據(jù)其自身不同的特點(diǎn)(如分辨率和色彩數(shù)目)提供相應(yīng)的驅(qū)動(dòng)程序。下圖描述了Windows應(yīng)用程序的繪圖過程。 (5) MFC提供了哪幾種設(shè)備環(huán)境類?它們各自有什么用途? MFC提供的設(shè)備環(huán)境類包括CDC、CPaintDC、CClientDC、CWindowDC和CMetaFileDC等,其中CDC類是MFC設(shè)備環(huán)境類的基類,其他MFC設(shè)備環(huán)境類都是CDC類的派生類,各個(gè)設(shè)備環(huán)境類的功能如
23、下表所示。 設(shè)備環(huán)境類功能描述 CDC所有設(shè)備環(huán)境類的基類,對GDI的所有繪圖函數(shù)進(jìn)行了封裝;可用來直接訪問 整個(gè)顯示器或非顯示設(shè)備(如打印機(jī)等)的上下文 CPaintDCCPaintDC用于響應(yīng)窗口重繪消息(WM_PAINT)的繪圖輸出,不僅可對客戶區(qū)進(jìn)行 操作,還可以對非客戶區(qū)進(jìn)行操作 CClientDC代表窗口客戶區(qū)的設(shè)備環(huán)境,一般在響應(yīng)非窗口消息并對客戶區(qū)繪圖時(shí)要用到 該類 CWindowDC代表整個(gè)窗口的設(shè)備環(huán)境,包括客戶區(qū)和非客戶區(qū);除非要自己繪制窗口邊框和按鈕,否則一般不用它 CMetaFileDC代表Windows圖元文件的設(shè)備環(huán)境;一個(gè)Windows圖元文件
24、包括一系列的圖形設(shè)備接口命令,可以通過重放這些命令來創(chuàng)建圖形;對CMetaFileDC對象進(jìn)行的各種繪制操作可以被記錄到一個(gè)圖元文件中 (6) 簡述傳統(tǒng)的SDK獲取設(shè)備環(huán)境的方法。 傳統(tǒng)的SDK獲取設(shè)備環(huán)境的方法有兩種。在WM_PAINT消息處理函數(shù)中通過調(diào)用API函數(shù)BeginPaint()獲取設(shè)備環(huán)境,在消息處理函數(shù)返回前調(diào)用API函數(shù)EndPaint()釋放設(shè)備環(huán)境。如果繪圖操作不是在WM_PAINT消息處理函數(shù)中,需要通過調(diào)用API函數(shù)GetDC()獲取設(shè)備環(huán)境,調(diào)用API函數(shù)ReleaseDC()釋放設(shè)備環(huán)境。 (7) 簡述創(chuàng)建和使用自定義畫筆的步驟。如果要在設(shè)備環(huán)境中使用自己
25、的畫筆繪圖,首先需要?jiǎng)?chuàng)建一個(gè)指定風(fēng)格的畫筆,然后選 擇所創(chuàng)建的畫筆,最后還原畫筆。 (8) 簡述采用MFC方法編程時(shí),顯示一個(gè)DDB位圖的步驟。 采用MFC方法編程時(shí),顯示一個(gè)DDB位圖需要執(zhí)行以下幾個(gè)步驟。 ?聲明一個(gè)CBitmap類的對象,使用LoadBitmap()函數(shù)將位圖裝入內(nèi)存。 ?聲明一個(gè)CDC類的對象,使用CreateCompatibleDC()函數(shù)創(chuàng)建一個(gè)與顯示設(shè)備環(huán)境兼容的內(nèi)存設(shè)備環(huán)境。 ? 使用CDC::SelectObject()函數(shù)將位圖對象選入設(shè)備環(huán)境中,并保存原來設(shè)備環(huán)境的指 針。 ? 利用CDC的相關(guān)輸出函數(shù)輸出位圖。 ? 使用CDC::Sel
26、ectObject()函數(shù)恢復(fù)原來設(shè)備環(huán)境。 4.6習(xí)題 1. 填空題 (1) 常見的菜單類型有主菜單、彈出菜單和快捷菜單3種。 (2) 在VisualC++中,每一個(gè)快捷鍵除了ID屬性外,還有兩個(gè)屬性:鍵和 類型。 (3) 基于對話框的應(yīng)用程序在運(yùn)行時(shí)沒有菜單欄。 (4) 在MFC中,工具欄的功能由類CToolBar實(shí)現(xiàn)。 (5) 調(diào)用CToolBar類的成員函數(shù)CToolBar::Create()或CreateEx()創(chuàng)建并初始化工具欄窗口對象。 (6) 設(shè)置工具欄??刻匦裕枰{(diào)用EnableDocking()函數(shù)。 (7) 狀態(tài)欄實(shí)際上是一個(gè)窗口,一般分為幾個(gè)窗格,
27、用來顯示不同的信息。 (8) 在MFC中,狀態(tài)欄的功能由CStatusBar類實(shí)現(xiàn)。 (9) 狀態(tài)欄顯示的內(nèi)容由數(shù)組決定,需要在狀態(tài)欄中顯示各窗格的 標(biāo)識符、位置以及個(gè)數(shù)。 (10) CStatusBar類的成員函數(shù)用來設(shè)置給定索引值的窗格ID、風(fēng) 格和寬度,成員函_SetPaneText()用來更新窗格的文本 2. 選擇題 (1) 在編輯某菜單項(xiàng)時(shí),若要指明該菜單項(xiàng)是一個(gè)彈出式子菜單,必須選擇屬性對話框中的()。 A.SeparatorB.Pop-upC.InactiveD.Grayed (2) 要使鼠標(biāo)箭頭在按鈕上暫停時(shí)能顯示工具欄按鈕提示,必須設(shè)置工具欄的風(fēng)格為()。
28、 A.CBRS_TOOLTIPSB.CBRS_FLYBY C.CBRS_NOALIGND.WS_VISIBLE (3) MFC應(yīng)用程序框架為狀態(tài)欄定義的靜態(tài)數(shù)組indicators放在文件()中。 A.MainFrm.cppB.MainFrm.hC.stdAfx.cppD.stdAfx.h (4) 下列有關(guān)菜單的敘述中不確的是()。 A.“&”字符的作用是使其后的字符加上下劃線 B.“\t”轉(zhuǎn)移字符表示使快捷鍵按右對齊顯示 C. 自定義菜單項(xiàng)ID不能與系統(tǒng)菜單項(xiàng)ID相同 D. 選中菜單項(xiàng)屬性對話框中的Separator,指明菜單項(xiàng)是一個(gè)水平線分隔條 3. 判斷題 (1) 給
29、菜單項(xiàng)定義快捷鍵,只需在菜單項(xiàng)屬性設(shè)置對話框的Caption文本框中說明 即可。(f) (2) 彈出快捷菜單一般出現(xiàn)在鼠標(biāo)箭頭的位置。(t) (3) UPDATE_COMMAND是更新命令用戶接口消息。(t) (4) 工具欄??刻匦灾荒茉O(shè)置一次。(t) (5) 狀態(tài)欄的功能由CStatusBar類實(shí)現(xiàn)。(t) (6) CMenu類、CToolBar類和CStatusBar類的根基類是相同的。(t) 4. 簡答題 (1) 簡述菜單設(shè)計(jì)的主要步驟。菜單設(shè)計(jì)一般需要經(jīng)過下面兩步: ?使用菜單編輯器編輯菜單資源; ?使用ClassWizard進(jìn)行消息映射,編輯成員函數(shù),完成菜單所要
30、實(shí)現(xiàn)的功能。 (2) 為應(yīng)用程序創(chuàng)建快捷菜單主要有哪些方法?為應(yīng)用程序創(chuàng)建快捷菜單主要有以下兩種方法: ? 使用ComponentGallery創(chuàng)建快捷菜單 ? 使用TrackPopupMenu()函數(shù)創(chuàng)建快捷菜單 (3) 如何動(dòng)態(tài)創(chuàng)建菜單?動(dòng)態(tài)創(chuàng)建菜單分為以下3個(gè)步驟。 ? 利用CreateMenu()函數(shù)創(chuàng)建一個(gè)空的彈出式菜單 ? 調(diào)用AppendMenu()或InsertMenu()函數(shù)在菜單中加入菜單項(xiàng) ? 調(diào)用函數(shù)SetMenu()加載動(dòng)態(tài)菜單 (4) 創(chuàng)建工具欄的基本步驟有哪些?創(chuàng)建工具欄的基本步驟是: ? 創(chuàng)建工具欄資源; ? 構(gòu)建一個(gè)CToolBar對象;
31、 ?調(diào)用CToolBar::Create()或CreateEx()函數(shù)創(chuàng)建工具欄窗口; ?調(diào)用CToolBar::LoadToolBar()載入工具欄資源。 (5) 簡述MFC創(chuàng)建狀態(tài)欄所做的工作。 首先構(gòu)造一個(gè)CToolBar類的對象,然后調(diào)用CToolBar::Create()或CreateEx()函數(shù)創(chuàng)建工具欄窗口,最后調(diào)用CToolBar::LoadToolBar()函數(shù)載入工具欄資源。 5.7習(xí)題 1. 填空題 (1) 對話框的主要功能是輸出信息和接收用戶的輸入。 (2) 從對話框的工作方式看,對話框可分為模態(tài)對話框和非模態(tài)對話框兩種類型。 (3) 對話框主要由對話框
32、模板資源與對話框類兩部分組成。 ⑷使用DoModal()函數(shù)可以創(chuàng)建模式對話框,使用Create。函數(shù)可以創(chuàng)建非模式對話框。 (5)為了支持屬性頁對話框,MFC提供了CPropertySheet類和CPropertyPage類。 2. 選擇題 (1) 對話框的功能被封裝在()類中。 A.CWnd|B.CDialogC.CObjectD.CCmdTarget (2) ()是非模式對話框。 A.“查找”對話框B.“字體”對話框C.“段落”對話框D.“顏色”對話框 (3) 要將模式對話框在屏幕上顯示需要用到函數(shù)()。 A.CreateB.DoModalC.OnOKD.構(gòu)造函數(shù) (
33、4) 通常將對話框的初始化工作在()函數(shù)中進(jìn)行。 A.OnOKB.OnCancelC.OnInitDialogD.DoModal (5) 使用()通用對話框類可以打開文件。 A.CFileDialogB.CColorDialogC.CPrintDialogD.CFontDialog 3. 簡答題 (1) 簡述創(chuàng)建和使用模態(tài)對話框的主要步驟。 ? 使用對話框編輯器來創(chuàng)建包含不同控件的對話框模板資源 ?從MFC的CDialog中派生出一個(gè)類,用來負(fù)責(zé)對話框行為。 ? 利用ClassWizard把這個(gè)類和先前你產(chǎn)生的對話框資源連接起來。 ? 對話框的初始化。 ?創(chuàng)建一個(gè)對話框?qū)ο?/p>
34、,調(diào)用CDialog::DoModal()函數(shù)打開對話框。 (2) 如何向?qū)υ捒蚰0遒Y源添加控件?如何添加與控件關(guān)聯(lián)的成員變量?在一個(gè)對話框資源中增加控件的操作十分方便,只需從控件工具欄中選中要增加的控 件,再將此控件拖動(dòng)至對話框模板中的確定位置上,松開鼠標(biāo)按鍵即添加了一個(gè)控件。調(diào)整控件的位置和大小的操作與Word中對文本框的操作完全一樣。 可以利用ClassWizard類向?qū)У腗emberVariables頁面為對話框類添加與對話框控件關(guān)聯(lián)的成員變量。在MemberVariables頁面中,雙擊一個(gè)ID或選定ID后,單擊AddVariable按鈕,將彈出AddMemberVariabl
35、e對話框。在Membervariablename框用于輸入成員變量名,在Category下拉框選擇成員變量的類別。 (3) 什么是DDX和DDV?編程時(shí)如何使用MFC提供的DDX功能? DDX為對話框數(shù)據(jù)交換,它用于將成員變量與對話框控件相連接,完成數(shù)據(jù)在成員變量和控件之間的交換。DDV為對話框數(shù)據(jù)驗(yàn)證,它能自動(dòng)校驗(yàn)輸入的數(shù)據(jù)是否符合設(shè)計(jì)要求。我們只需通過ClassWizard為對話框類添加與對話框控件關(guān)聯(lián)的成員變量即可使用MFC提供的DDX功能。 (4) 簡述創(chuàng)建屬性頁對話框的主要步驟。 ?設(shè)計(jì)對話框資源。分別為各個(gè)頁創(chuàng)建對話框模板,每頁的模板最好具有相同尺寸,如果尺寸不統(tǒng)一,則框架
36、將根據(jù)尺寸最大的頁來確定屬性頁對話框的大小。 ? 用ClassWizard為每頁創(chuàng)建新類,并加入與控件對應(yīng)的成員變量。 ? 打開屬性頁對話框 6.11習(xí)題 1. 填空題 (1) Windows系統(tǒng)提供的標(biāo)準(zhǔn)控件主要包括靜態(tài)控件、編輯框、按鈕、列表框、組合框和滾動(dòng)條等。 (2) Windows標(biāo)準(zhǔn)控件的屬性設(shè)置通常由General、Style及ExtendStyles三個(gè)屬性頁構(gòu)成。 (3) 當(dāng)編輯框中的文本已被修改,在新的文本顯示之后發(fā)送ENCHANGE通知消息。 (4) CButton類控件包扌舌按鍵按鈕、單選按鈕、復(fù)選框和組框等4種類型。 (5) 一組單選按鈕在對話框類中
37、只能映射一個(gè)ink類型值變量,對應(yīng)單選按鈕在組中的序號,序號從0開始。 (6) 向列表框增加列表項(xiàng)使用CListBox類成員函數(shù)AddString或InsertString。 (7) 組合框是多個(gè)控件的組合,包括編輯框、列表框和按鈕。 (8) —個(gè)旋轉(zhuǎn)按鈕控件通常是與一個(gè)相伴的控件一起使用的,這個(gè)控件稱為“伙伴窗口”。該控件的Tab鍵次序必須小于旋轉(zhuǎn)按鈕。 (9) 當(dāng)滑塊滑動(dòng)時(shí),滑塊控件將發(fā)送滾動(dòng)消息來通知父窗口。垂直滑塊發(fā)送WMVSCROLL消息,水平滑塊發(fā)送WMHSCROLL消息。 (10) MFC的CProgressCtrl類封裝了進(jìn)度條控件的各種操作,該類的成員函數(shù)SetRa
38、nge()用來設(shè)置進(jìn)度條的范圍。 2. 簡答題 (1) 在應(yīng)用程序中訪問控件的方法有哪些?應(yīng)用程序訪問控件一般有3種方法: ? 利用對話框的數(shù)據(jù)交換功能訪問控件 ? 通過控件對象來訪問控件 ? 利用CWnd類的一些用于管理控件的成員函數(shù)來訪問控件 (2) 單選按鈕控件如何成組? 將一組單選按鈕放在一個(gè)組框控件中,并為同組中的第一個(gè)單選按鈕設(shè)置Group屬性。 (3) 組合框與列表框相比有什么不同?如何給組合框添加初始的列表項(xiàng)?列表框可列出各種可能的選項(xiàng),但用戶卻不能在列表框中輸入新的列表項(xiàng)。而組合框不僅可以顯示列表項(xiàng)供用戶進(jìn)行選擇,而且允許用戶輸入新的列表項(xiàng)。 可以通過組合框
39、控件屬性對話框的Data選項(xiàng)卡添加初始的列表項(xiàng)。 7.7習(xí)題 1. 填空題 (1) 在文檔/視圖結(jié)構(gòu)中,文檔是用來管理和組織數(shù)據(jù)的,視圖的作用是顯示和編輯文檔數(shù)據(jù)。文檔與視圖的關(guān)系是一對多的關(guān)系。 (2) 在文檔/視圖應(yīng)用稈序中,文檔模板負(fù)責(zé)創(chuàng)建文檔/視圖結(jié)構(gòu),而應(yīng)用程序?qū)ο蠊芾砦臋n模板,可以在應(yīng)用程序的InitInstance()函數(shù)中創(chuàng)建一個(gè)和多個(gè)文檔模板。 (3) 在通常情況下,視圖派生類的成員函數(shù)中通過調(diào)用GetDocument()函數(shù)得到當(dāng)前文檔對象的指針。 (4) 文檔類的數(shù)據(jù)成員初始化和文檔的清理工作分別在OnNewDocument()成員函數(shù)和DeleteConte
40、nts()成員函數(shù)中完成。 (5) MFC提供了兩種集合類,一種是基于模板的集合類,另一種是非模板集合類。 (6) MFC應(yīng)用程序通過CDocument的protected類型成員變量mbModified的邏輯值來判斷程序員是否對文檔進(jìn)行過修改。程序員可以通過CDocument的SetModifiedFlag()成員函數(shù)來設(shè)置該值。 (7) MFCAppWizard在創(chuàng)建文檔應(yīng)用程序框架時(shí)已在文檔類中重載了Serialize。函數(shù),通過在該函數(shù)中添加代碼可以達(dá)到實(shí)現(xiàn)文檔序列化的目的。 (8) 調(diào)用cieaieO成員函數(shù)創(chuàng)建動(dòng)態(tài)分割窗口,而靜態(tài)分割窗口是調(diào)用CreateStatic()成
41、員函數(shù)創(chuàng)建的。 2. 簡答題 (1) 通過哪幾個(gè)主要成員函數(shù)完成文檔與視圖之間的相互作用?并簡述這些成員函數(shù)的功能。 文檔與視圖的交互是通過下面幾個(gè)主要的成員函數(shù)完成的: ?視圖類CView的成員函數(shù)GetDocument()該函數(shù)得到與之相關(guān)聯(lián)的文檔對象的指針,利用這個(gè)指針就可以訪問文檔類及其派生類的公有數(shù)據(jù)成員和成員函數(shù)。 ? CDocument類的成員函數(shù)UpdateAllViews()該函數(shù)通知與文檔相關(guān)聯(lián)的所有或部分試圖,更新窗口內(nèi)容。 ?視圖類的成員函數(shù)OnUpdate() 當(dāng)應(yīng)用程序調(diào)用CDocument::UpdateAllViews()函數(shù)時(shí),實(shí)際上是調(diào)用了所有
42、相關(guān)視圖的OnUpdate()函數(shù),以更新相關(guān)的視圖。需要時(shí),可以直接在視圖派生類的成員函數(shù)中調(diào)用該函數(shù)刷新當(dāng)前視圖。另外,在初始化視圖成員函數(shù)CView::OnInitialUpdate()中也調(diào)用了 OnUpdate()函數(shù)。 ? CView類的OnInitialUpdate()函數(shù)當(dāng)應(yīng)用程序被啟動(dòng),或用戶從“文件”菜單中選擇了“新建”或“打開”命令時(shí),CView 的OnInitialUpdate()函數(shù)會(huì)被調(diào)用,該函數(shù)是虛函數(shù)。CView的OnInitialUpdate()函數(shù)除了調(diào)用OnUpdate()函數(shù)之外,不做其他任何事情。 也可以利用派生類的OnInitialUpdat
43、e()函數(shù)對視圖對象進(jìn)行初始化。 (2) 簡述文檔序列化與一般文件處理的區(qū)別。 一般文件處理是通過文件句柄來實(shí)現(xiàn)磁盤輸入和輸出,一個(gè)文件句柄與一個(gè)磁盤文件相關(guān)聯(lián)。而文檔序列化與一般文件處理最大的不同在于:在序列化中,對象本身對讀和寫負(fù)責(zé)。CArchive類對象并不知道也不需要知道它所讀寫數(shù)的內(nèi)部結(jié)構(gòu),CArchive類對象為讀寫CFile類對象中的可序列化數(shù)據(jù)提供了一種安全的緩沖機(jī)制,它們之間形成了如下關(guān)系: Serialize()函數(shù)令CArchive類對象CFile類對象磁盤文件 可見序列化使得程序員可以不直接面對一個(gè)物理文件而進(jìn)行文檔的讀寫。 (3) 如何讓用戶定義的類支持序列
44、化?要讓用戶定義的類支持序列化,必須滿足以下5個(gè)條件: ?從CObject類派生,這樣派生類就具有RTTI(Run-timetypeinformation)、DynamicCreation等功能。 ?類的聲明部分必須有DECLARE_SERIAL宏,此宏需要1個(gè)參數(shù):類名稱。 ?類的實(shí)現(xiàn)部分必須有IMPLEMENT_SERIAL宏,此宏需要3個(gè)參數(shù):一是類名稱,二是基類名稱,三是版本號。 ?重新定義Serialize()虛函數(shù),使它能夠適當(dāng)?shù)匕杨惖某蓡T變量寫入文件中。 ?為此類加上一個(gè)默認(rèn)構(gòu)造函數(shù),這是因?yàn)槿绻粋€(gè)對象來自文件,MFC必須先動(dòng)態(tài)地創(chuàng)建它,而且在沒有任何參數(shù)的情況下調(diào)用
45、構(gòu)造函數(shù),然后才從文件中讀取對象數(shù)據(jù)。 8.5習(xí)題 1. 填空題 (1) MFC通過CView類提供打印功能和打印預(yù)覽功能。 (2) 在打印過程中,CPrintInfo類的主要作用是在框架窗口和CView類之間傳遞消息。 (3) CPrintInfo類中的成員變量mnCurPage表示當(dāng)前打印/預(yù)覽的頁號,成員函數(shù)SetMaxPage()設(shè)置文檔的最大打印頁數(shù)。 (4) 在Windows操作系統(tǒng)中,存在兩種類型的坐標(biāo):設(shè)備坐標(biāo)和邏輯坐標(biāo)。 (5) 不同的映射模式將影響輸出設(shè)備顯示的圖形尺寸因子,Windows的缺省映射模式是MM_TEXT,在該映射方式中,每一個(gè)邏輯單位對應(yīng)一個(gè)設(shè)
46、備像素。 (6) 在MFC應(yīng)用程序中,通過調(diào)用CDC類的SetMapMode()函數(shù)設(shè)置映射方式。 (7) 如果要使程序支持多頁打印功能,首先在打印之前設(shè)置要打印的頁數(shù),然后設(shè)置每一頁視圖原點(diǎn)的打印坐標(biāo)。 (8) 一般在OnBeginPrinting()函數(shù)中設(shè)置要打印的頁數(shù),在OnPrepareDC()函數(shù)中通過調(diào)用CDC類成員函數(shù)SetViewPortOrg()設(shè)置當(dāng)前頁的視圖原點(diǎn)坐標(biāo)。 2. 簡答題 (1)打印和屏幕顯示有何異同? 相同點(diǎn):在MFC應(yīng)用程序中,打印和屏幕顯示最終都是通過調(diào)用視圖類的OnDraw()函數(shù)來完成的。OnDraw()函數(shù)有一個(gè)指向CDC類對象指針的參
47、數(shù),該對象代表了接收OnDraw()函數(shù)輸出的設(shè)備上下文,它可以是代表顯示器的顯示設(shè)備上下文,也可以是代表打印機(jī)的打印設(shè)備上下文。 不同點(diǎn):當(dāng)窗口顯示文檔內(nèi)容時(shí),視圖窗口將收到WM_PAINT消息,程序框架將調(diào)用OnPaint()函數(shù),OnPaint()函數(shù)會(huì)調(diào)用OnDraw()函數(shù),此時(shí)傳遞給OnDraw()函數(shù)的設(shè)備上下文參數(shù)為顯示設(shè)備上下文,OnDraw()函數(shù)的繪制結(jié)果將會(huì)輸出到顯示器。進(jìn)行打印時(shí),用于打印和打印預(yù)覽的OnPrint()函數(shù)也會(huì)調(diào)用OnDraw()函數(shù),而此時(shí)傳遞給OnDraw()函數(shù)的設(shè)備上下文參數(shù)為打印機(jī)設(shè)備上下文,OnDraw()函數(shù)的繪制結(jié)果也會(huì)輸出到打印機(jī)。
48、 (2) 如何在打印和屏幕顯示時(shí)輸出不同內(nèi)容? 有兩種方法: ?分別在OnPaint()和OnPrint()這兩個(gè)函數(shù)中完成屏幕輸出和打印輸出工作,而不必依賴于OnDraw()函數(shù)。 ? OnDraw()函數(shù)中,調(diào)用pDC->IsPrinting(咸設(shè)置變量來識別目前進(jìn)行的輸出工作并區(qū) 別對待。 (3) 打印預(yù)覽和打印有何異同? 相同點(diǎn):在MFC應(yīng)用程序中,打印和屏幕顯示最終都是通過調(diào)用視圖類的OnDraw()函數(shù)來完成的。 不同點(diǎn):打印預(yù)覽和打印不同,它是應(yīng)用程序利用屏幕來模擬打印機(jī)輸出的過程。進(jìn)行打印時(shí),傳遞給OnDraw()函數(shù)的設(shè)備上下文參數(shù)為打印機(jī)設(shè)備上下文。而為了實(shí)
49、現(xiàn)打印預(yù)覽的功能,MFC類庫從CDC類中派生出CPreviewDC類。在進(jìn)行打印預(yù)覽時(shí),傳給OnDraw()函數(shù)的是一個(gè)指向CPreviewDC對象的指針。一般CDC類中保存有兩套相同的設(shè)備描述表,而CPreviewDC類則保存有兩套不同的設(shè)備描述表,其中的屬性設(shè)備描述表指向打印機(jī),而輸出設(shè)備描述表指向屏幕。 (4) MM_LOMETRIC映射方式有何特點(diǎn)? MM_LOMETRIC映射方式將一個(gè)邏輯單位映射到0.1mm,MM_LOMETRIC坐標(biāo)系統(tǒng)Y軸方向與默認(rèn)的MM_TEXT相反。 (5) 簡述添加打印頁眉、頁腳的程序代碼的步驟。 添加打印頁眉、頁腳的程序代碼可以分兩步進(jìn)行: ?
50、在OnPrint()函數(shù)中利用CPrintInfo*pInfo的成員變量m_rectDraw來設(shè)置打印頁上打印區(qū)域的大小。 ? 在m_rectDraw范圍之外打印頁眉和頁腳。 9.5習(xí)題 1. 填空題 (1) Windows的庫類型主要有靜態(tài)鏈接庫和動(dòng)態(tài)鏈接庫。 (2) DLL中一般定義有導(dǎo)出函數(shù)和內(nèi)部函數(shù)兩種類型的函數(shù),其中導(dǎo)出函數(shù)可以被外部程序調(diào)用。 (3) 每個(gè)DLL都含有一個(gè)入口函數(shù)DllMainO,就像我們編寫的應(yīng)用程序必須有main()或WinMain()函數(shù)一樣。該函數(shù)的作用是初始化DLL,并在卸載時(shí)清理DLL。 (4) VisualC++6.0支持多種DLL,包括
51、非MFCDLL、MFC常規(guī)DLL和MFC擴(kuò)展DLL。 (5) 非MFCDLL的內(nèi)部不使用MFC,其導(dǎo)出函數(shù)為標(biāo)準(zhǔn)的C接口,能被非MFC或MFC編寫的應(yīng)用程序調(diào)用。 (6) 在MFC規(guī)則DLL的內(nèi)部可以使用MFC,但是它與應(yīng)用程序的接口不能是MFC,而是C函數(shù)或者C++類。 (7) MFC擴(kuò)展DLL的主要功能是實(shí)現(xiàn)從現(xiàn)有MFC類庫中派生出可重用的類。 (8) 從MFCDLL中導(dǎo)出函數(shù)常用使用模塊定義文件和使用關(guān)鍵字declspec(dllexport)兩種方法。后者不僅可以導(dǎo)出函數(shù),還可以導(dǎo)出一個(gè)完整的類。 (9) DEF文件是一個(gè)包含EXE文件或DLL文件聲明的文本文件。每個(gè).DEF
52、文件至少必須包含LIBRARY語句和EXPORTS語句。 (10) 應(yīng)用程序與DLL鏈接的方式主要有隱式鏈接和顯式鏈接。 (11) 應(yīng)用程序分別使用AfxLoadLibrary()和AfxFreeLibrary()函數(shù)來加載和釋放MFC擴(kuò)展DLL。 (12) MFC擴(kuò)展DLL除了可使用關(guān)鍵字_declspec(dllexport)導(dǎo)出類外,還可以使用宏AFXEXTCLASS來導(dǎo)出類。 2. 簡答題 (1) 什么是動(dòng)態(tài)鏈接庫?它和靜態(tài)鏈接庫有何區(qū)別?生成的動(dòng)態(tài)鏈接庫應(yīng)放在哪些目錄下才能被應(yīng)用程序使用? 動(dòng)態(tài)鏈接庫是一種用來為其它可執(zhí)行文件(包括EXE文件和其它DLL)提供共享的函數(shù)庫
53、。它和靜態(tài)鏈接庫的主要區(qū)別是與應(yīng)用程序的鏈接方式不同,前者進(jìn)行的是動(dòng)態(tài)鏈接后者進(jìn)行的是靜態(tài)鏈接。 生成的動(dòng)態(tài)鏈接庫必須位于下面4個(gè)目錄之一中: ?當(dāng)前目錄 ? Windows的系統(tǒng)的目錄,如Windows'system ? Windows所在的目錄,如WINNT ? 環(huán)境變量PATH中所指定的目錄 (2) VisualC++支持哪幾種DLL?如何選擇選擇DLL的類型? VisualC++支持多種DLL,包括: ? 非MFCDLL ? MFC常規(guī)DLL(MFCRegularDLL) ? MFC擴(kuò)展DLL(MFCExtensionDLL) 我們選擇哪一種DLL的類型可以從以下
54、幾個(gè)方面來考慮: 如果DLL不需要使用MFC,那么使用非MFCDLL是一個(gè)很好的選擇。如果需要?jiǎng)?chuàng)建使用了MFC的DLL,并希望MFC和非MFC應(yīng)用程序都能使用所創(chuàng)建的DLL,那么可以選擇MFC常規(guī)DLL。如果希望在DLL中實(shí)現(xiàn)從MFC派生的可重用的類,或者是希望在應(yīng)用程序和DLL之間傳遞MFC的派生對象時(shí),必須選擇MFC擴(kuò)展DLL。 (3) MFC常規(guī)DLL實(shí)際上包含哪兩方面的含義? MFC常規(guī)DLL實(shí)際上包含有兩方面的含義。一方面它是“MFC的”,這意味著可以在這種DLL的內(nèi)部使用MFC,另一方面它是“常規(guī)的”,這意味著它不同于MFC擴(kuò)展DLL,在MFC規(guī)則DLL的內(nèi)部雖然可以使用MF
55、C,但是它與應(yīng)用程序的接口不能是MFC,而是C函數(shù)或者C++類。 (4) 如何從MFCDLL中導(dǎo)出函數(shù)? 從MFCDLL中導(dǎo)出函數(shù)常用的有兩種方法。 第一種是使用模塊定義文件(.DEF)。DEF文件常用的模塊語句如下: (1) 第一個(gè)語句必須是LIBRARY語句,這個(gè)語句指出DLL的名字,鏈接器將這個(gè)名字放到DLL導(dǎo)入庫(importlibrary)中,DLL導(dǎo)入庫包含了指向外部DLL的函數(shù)索引指針。 (2) EXPORTS語句列出被導(dǎo)出函數(shù)的名字,以及導(dǎo)出函數(shù)的數(shù)值(由@號與數(shù)字構(gòu)成)。序數(shù)值可以省略,編譯器(Compiler)會(huì)為每個(gè)導(dǎo)出函數(shù)指定一個(gè),但這樣指定的值不如自己指定的
56、明確。 (3) 使用DESCRIPTION語句描述DLL的用途,這個(gè)語句可以省略。 (4) 使用“;”開頭的注釋語句。 使用AppWizard創(chuàng)建一個(gè)MFCDLL時(shí),AppWizard將創(chuàng)建一個(gè).DEF文件的框架,并自動(dòng)添加到項(xiàng)目中。建立DLL時(shí),鏈接器使用DEF文件來創(chuàng)建一個(gè)導(dǎo)出文件(.EXP)和一個(gè)導(dǎo)入庫文件CLIB),然后使用導(dǎo)出文件來創(chuàng)建.DLL文件。 另一種方法是在定義函數(shù)時(shí)使用關(guān)鍵字_declspec(dllexport)。這種情況下,不需要.DEF文件。導(dǎo)出函數(shù)的形式為: declspec(dllexport)<返回類型><導(dǎo)出函數(shù)名>(<函數(shù)參數(shù)>); (5) 應(yīng)用
57、程序與DLL鏈接的方式有哪兩種?它們之間有何區(qū)別? 應(yīng)用程序與DLL鏈接的方式主要有如下兩種:隱式鏈接和顯式鏈接。 隱式鏈接又稱為靜態(tài)加載,指的是使用DLL的應(yīng)用程序先鏈接到編譯DLL時(shí)生成的導(dǎo)入庫LIB文件,執(zhí)行應(yīng)用程序的同時(shí)系統(tǒng)也加載所需的DLL。在應(yīng)用程序退出之前,DLL一直存在于該程序運(yùn)行進(jìn)程的地址空間中。 顯式鏈接又稱為動(dòng)態(tài)加載,使用顯式鏈接DLL的應(yīng)用程序必須在代碼中動(dòng)態(tài)地加載所使用的DLL,并使用指針調(diào)用DLL中的導(dǎo)出函數(shù),在使用完畢后,應(yīng)用程序必須卸載所使用的DLL。使用顯式鏈接的一個(gè)非常明顯的好處是,應(yīng)用程序可以在運(yùn)行過程中決定需要加載的DLL。 10.6習(xí)題 1.
58、 填空題 (1) 進(jìn)程和線程都是操作系統(tǒng)的概念,進(jìn)程是操作系統(tǒng)分配資源單位,,線程是操作系統(tǒng)分配處理器的最基本單元。 (2) 可以用VC++所帶的工具Spy++來觀察操作系統(tǒng)管理的進(jìn)稈和線稈。 (3) 每一個(gè)進(jìn)程至少有一個(gè)主線程,該線程由系統(tǒng)創(chuàng)建。 (4) 一般可以使用全局變量和自定義消息進(jìn)行線程間通信。 (5) 常用的同步對象有臨界區(qū)、互斥、信號量和事件。 (6) 為了使用同步類,需要手動(dòng)將頭文件Afxmt.h加到應(yīng)用程序中。 (7) 使用CSingleLock類的成員函數(shù)LockQ請求獲得臨界區(qū)。 (8) CEvent類對象有人工事件和自動(dòng)事件兩種類型。 2. 簡答題
59、(1)什么叫進(jìn)程?什么叫線程?它們有什么區(qū)別和聯(lián)系? 進(jìn)程和線程都是操作系統(tǒng)的概念。進(jìn)程是應(yīng)用程序的執(zhí)行實(shí)例,它是操作系統(tǒng)分配資源單位,每個(gè)進(jìn)程是由私有的虛擬地址空間、代碼、數(shù)據(jù)和其它各種系統(tǒng)資源組成,進(jìn)程在運(yùn)行過程中創(chuàng)建的資源隨著進(jìn)程的終止而被銷毀,所使用的系統(tǒng)資源在進(jìn)程終止時(shí)被釋放或關(guān)閉。線程是操作系統(tǒng)分配處理器的最基本單元,它是進(jìn)程內(nèi)部的一個(gè)獨(dú)立的執(zhí)行單元。 進(jìn)程是沒有活力的,它是一個(gè)靜態(tài)的概念。一個(gè)程序運(yùn)行時(shí),由系統(tǒng)自動(dòng)創(chuàng)建一個(gè)進(jìn)程。系統(tǒng)創(chuàng)建好進(jìn)程后,實(shí)際上就啟動(dòng)執(zhí)行了該進(jìn)程的主線程,主線程以函數(shù)地址形式(一般為main()或WinMain()函數(shù)),將程序的啟動(dòng)點(diǎn)提供給操作系統(tǒng)。
60、主線程終止了,進(jìn)程也就隨之終止。 每一個(gè)進(jìn)程至少有一個(gè)主線程,它無需由用戶去主動(dòng)創(chuàng)建,是由系統(tǒng)自動(dòng)創(chuàng)建的。用戶根據(jù)需要在應(yīng)用程序中創(chuàng)建其它線程,多個(gè)線程并發(fā)地運(yùn)行于同一個(gè)進(jìn)程中。一個(gè)進(jìn)程中的所有線程都在該進(jìn)程的虛擬地址空間中,共同使用這些虛擬地址空間、全局變量和系統(tǒng)資源。 (2)MFC中線程有哪兩種類型?它們有何區(qū)別?如何創(chuàng)建它們? MFC中有兩類線程,分別稱之為工作者線程和用戶界面線程。 創(chuàng)建一個(gè)工作者線程,首先需要編寫一個(gè)希望與應(yīng)用程序的其余部分并行運(yùn)行的自定義函數(shù),該函數(shù)稱為線程函數(shù)。然后,在程序中合適的地方調(diào)用全局函數(shù)AfxBeginThread()創(chuàng)建線程,以啟動(dòng)線程函數(shù)。
61、 創(chuàng)建用戶界面線程,首先需要從CWinThread類派生一個(gè)新類,并重寫派生類的InitInstance()、ExitInstance()及Run()等函數(shù),然后使用AfxBeginThread()函數(shù)的另一個(gè)版本創(chuàng)建并啟動(dòng)用戶界面線程。 (3) 什么是線程函數(shù)?其作用是什么?如何給線程函數(shù)傳遞參數(shù)? 線程函數(shù)是新線程創(chuàng)建后要執(zhí)行的函數(shù),新線程要實(shí)現(xiàn)的功能是由線程函數(shù)實(shí)現(xiàn)的。線程函數(shù)帶有一個(gè)參數(shù)LPVOIDpParam,創(chuàng)建線程的AfxBeginThread()全局函數(shù)的第二個(gè)參數(shù)LPVOIDpParam的類型與線程函數(shù)的參數(shù)類型完全一致,該參數(shù)為啟動(dòng)線程時(shí)傳遞給線程函數(shù)的入口參數(shù)。 (
62、4) 如何終止線程? 當(dāng)一個(gè)工作者線程的線程函數(shù)執(zhí)行一個(gè)返回語句或者調(diào)用AfxEndThread()成員函數(shù)時(shí),這個(gè)工作者線程就終止。對于用戶界面線程,當(dāng)一個(gè)WM_QUIT消息發(fā)送到它的消息隊(duì)列中,或者該線程中的一個(gè)函數(shù)調(diào)用AfxEndThread()成員函數(shù)時(shí),該線程就被終止。 一般來說,線程只能自我終止。如果要從另一個(gè)線程來終止線程,必須在這兩個(gè)線程之間設(shè)置通信方式。 (5) 如何使用自定義消息進(jìn)行通信? 使用Windows消息來進(jìn)行通訊,首先需要定義一個(gè)自定義消息,然后,需要時(shí)在一個(gè)線程中調(diào)用全局函數(shù)::PostMessage()向另一個(gè)線程發(fā)送自定義消息。 (6) 什么叫線程
63、的同步?為什么需要同步? 使隸屬于同一進(jìn)程的各線程協(xié)調(diào)一致地工作稱為線程的同步。這是因?yàn)樵诙嗑€程處理時(shí)線程之間經(jīng)常要同時(shí)訪問一些資源,這有可能導(dǎo)致錯(cuò)誤。例如,對于像磁盤驅(qū)動(dòng)器這樣獨(dú)占性系統(tǒng)資源,由于線程可以執(zhí)行進(jìn)程的任何代碼段,且線程的運(yùn)行是由系統(tǒng)調(diào)度自動(dòng)完成的,具有一定的不確定性,因此就有可能出現(xiàn)兩個(gè)線程同時(shí)對磁盤驅(qū)動(dòng)器進(jìn)行操作,從而出現(xiàn)操作錯(cuò)誤;又例如,對于銀行系統(tǒng)的計(jì)算機(jī)來說,可能使用一個(gè)線程來更新其用戶數(shù)據(jù)庫,而用另外一個(gè)線程來讀取數(shù)據(jù)庫以響應(yīng)儲戶的需要,極有可能讀數(shù)據(jù)庫的線程讀取的是未完全更新的數(shù)據(jù)庫,因?yàn)榭赡茉谧x的時(shí)候只有一部分?jǐn)?shù)據(jù)被更新過。 (7) MFC提供了哪些類來支持線
64、程的同步?它們分別用在什么場合? MFC為我們提供了幾個(gè)同步類和同步輔助類來支持線程的同步,這些類及其適用場合 如下表所示。 類名 說明 同步對象基類CSyncObject 臨界區(qū)類CCriticalSection 互斥類CMutex 信號類CSemaphore 事件類CEvent 同步輔助類CSingleLock、 純虛類,為Win32中的同步對象提供通用性能 當(dāng)在一個(gè)時(shí)間內(nèi)僅有一個(gè)線程可被允許修改數(shù)據(jù)或某些其他控制資源時(shí)使用,用于保護(hù)共享資源。 有多個(gè)應(yīng)用(多個(gè)進(jìn)程)同時(shí)存取相應(yīng)資源時(shí)使用,用于保護(hù)共享資源。一個(gè)應(yīng)用允許同時(shí)有多個(gè)線程訪問相應(yīng)資源時(shí)使用,主要功能用
65、于資源計(jì)數(shù)。 某個(gè)線程必須等待某些事件發(fā)生后才能存取相應(yīng)資源時(shí)使用,以協(xié)調(diào)線程之間的動(dòng)作。 用于在一個(gè)多線程程序中控制對資源的訪問。當(dāng)在一個(gè)時(shí)間只需等待 CMultiLock—個(gè)同步化對象時(shí)使用CSingleLock,否則使用CMultiLock (8)如何使用CSemaphore類實(shí)現(xiàn)多線程同步?使用CSemaphore類實(shí)現(xiàn)多線程同步,有兩種用法。方法一:單獨(dú)使用CSemaphore對象,步驟如下: ?定義CSemaphore類的一個(gè)全局對象(以使各個(gè)線程均能訪問) ?在訪問臨界區(qū)之前,調(diào)用CSemaphore類的成員Lock()獲得臨界區(qū)。 ? 在本線程中訪問臨界區(qū)
66、中的共享資源。 ?訪問臨界區(qū)完畢后,使用CSemaphore的成員函數(shù)UnLock()來釋放臨界區(qū)。方法二:與同步輔助類CSingleLock或CMutiLock類一起使用,步驟如下(以類CSingleLock為例): ? 定義CSemaphore類的一個(gè)全局對象,如critical_section ?在訪問臨界區(qū)之前,定義CSingleLock類的一個(gè)對象,并將critical_section的地址傳送給構(gòu)造函數(shù) ?使用CSingleLock類的成員函數(shù)Lock()請求獲得臨界區(qū)。 ? 在本線程中訪問臨界區(qū)中的共享資源。 ?調(diào)用CSingleLock類的成員函數(shù)UnLock()來釋放臨界區(qū)。 11.6習(xí)題 1.填空題 (1) MFC的ODBC類主要包括5個(gè)類,分別是CDatabase類、CRecordset類、CRecordView類、CFieldExchange類、CDBException類,其中CRecordset類是用戶實(shí)際使用過程中最關(guān)心的。 (2) CDatabase類的作用是建立與數(shù)據(jù)源的連接。 (3) CRecordset類的功能是對表記錄進(jìn)行操作
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 領(lǐng)導(dǎo)班子2024年度民主生活會(huì)對照檢查材料范文(三篇)
- 金融工作主題黨課講稿范文(匯編)
- 鍋爐必備學(xué)習(xí)材料
- 鍋爐設(shè)備的檢修
- 主題黨課講稿:走中國特色金融發(fā)展之路加快建設(shè)金融強(qiáng)國(范文)
- 鍋爐基礎(chǔ)知識:啟爐注意事項(xiàng)技術(shù)問答題
- 領(lǐng)導(dǎo)班子2024年度民主生活會(huì)“四個(gè)帶頭”對照檢查材料范文(三篇)
- 正常運(yùn)行時(shí)影響鍋爐汽溫的因素和調(diào)整方法
- 3.鍋爐檢修模擬考試復(fù)習(xí)題含答案
- 司爐作業(yè)人員模擬考試試卷含答案-2
- 3.鍋爐閥門模擬考試復(fù)習(xí)題含答案
- 某公司鍋爐安全檢查表
- 3.工業(yè)鍋爐司爐模擬考試題庫試卷含答案
- 4.司爐工考試題含答案解析
- 發(fā)電廠鍋爐的運(yùn)行監(jiān)視和調(diào)整