VisualC程序設(shè)計(jì)與應(yīng)用教程課后答案.doc
《VisualC程序設(shè)計(jì)與應(yīng)用教程課后答案.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《VisualC程序設(shè)計(jì)與應(yīng)用教程課后答案.doc(22頁(yè)珍藏版)》請(qǐng)?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ò)展名為 .dsw 。(4) 應(yīng)用程序向?qū)ppWizard的作用是 幫助用戶一步步生成一個(gè)新的應(yīng)用程序,并且自動(dòng)生成應(yīng)用程序所需的基本代碼 。通過 ClassWizard 可以增加消息映射和成員變量。(5) 菜單選擇可以通過兩種方法來進(jìn)行:一種是 鼠標(biāo)操作 ;另一種是鍵盤操作 。(6) 編譯微型條工
2、具欄最右邊按鈕的功能是 Insert/Remove Breakpoint 。(7) 快捷鍵或菜單及相關(guān)資源的資源符號(hào)的前綴是IDR_。(8) 用戶可以通過項(xiàng)目工作區(qū)窗口的ResourceView視圖來查看資源。2. 選擇題(1) 項(xiàng)目文件的擴(kuò)展名是( )。A. .exe B. .dsp C. .dsw D. .cpp(2) 設(shè)置斷點(diǎn)的默認(rèn)方式是( )。(第2章)A. Location B. Data C. Message D. Breakpoints(3) 用應(yīng)用程序向?qū)ppWizard創(chuàng)建C+源文件,應(yīng)選擇( )選項(xiàng)卡。A. Files B. Projects C. Workspaces
3、D. Other Documents (4) Standard工具欄中最左邊按鈕與( )菜單命令的功能一樣 。A. NewB. New File C. New Text File D. New Workspace(5) Windows資源提供的資源編輯器不能編輯( )。A. 菜單 B. 工具欄 C. 狀態(tài)欄 D. 位圖3. 判斷題(1) 打開一個(gè)項(xiàng)目,只需打開對(duì)應(yīng)的項(xiàng)目工作區(qū)文件。 ( T )(2) 用戶可以通過Tools | Customize菜單命令設(shè)置集成開發(fā)環(huán)境的工具欄。( T )(3) 通過應(yīng)用程序向?qū)ppWizard建立的程序不能被立即執(zhí)行。( F )(4) 在同一項(xiàng)目中,Vis
4、ual C+在內(nèi)部用來標(biāo)識(shí)資源的資源符號(hào)不能重復(fù)。 ( T )(5) 在Windows環(huán)境下,資源與程序源代碼緊密相關(guān)。 ( F )4. 簡(jiǎn)答題(1) 什么是項(xiàng)目? 它是由什么組成的?在Visual C+集成開發(fā)環(huán)境中,把實(shí)現(xiàn)程序設(shè)計(jì)功能的一組相互關(guān)聯(lián)的C+源文件、資源文件以及支撐這些文件的類的集合稱為一個(gè)項(xiàng)目。項(xiàng)目是Visual C+ 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)。另外,根
5、據(jù)項(xiàng)目類型的不同,一個(gè)項(xiàng)目包含有不同的源文件、資源文件和其他類別的文件。(2) 解釋項(xiàng)目工作區(qū)中各個(gè)視圖的功能。ClassView用于顯示項(xiàng)目中定義的類;ResourceView用于顯示項(xiàng)目中所包含的資源文件;FileView 用于顯示所創(chuàng)建的項(xiàng)目。(3) WizardBar工具欄的作用是什么?WizardBar工具欄可以對(duì)ClassView和ClassWizard中的命令進(jìn)行快速訪問,使類和成員函數(shù)的操作更加方便,WizardBar會(huì)自動(dòng)跟蹤用戶程序的上下文。(4) 簡(jiǎn)述向項(xiàng)目添加一個(gè)資源的方法。用戶可以通過在Insert菜單中選擇Resource菜單項(xiàng)來創(chuàng)建新的資源。單擊Resource菜
6、單項(xiàng),彈出Insert Resource對(duì)話框。首先在對(duì)話框的左側(cè)選擇資源類型,然后根據(jù)具體情況,單擊右側(cè)的不同按鈕。若資源需要臨時(shí)創(chuàng)建,則單擊New按鈕,在打開的相應(yīng)資源編輯器中創(chuàng)建資源。若資源文件已經(jīng)存在,則單擊Import按鈕,在Import Resource對(duì)話框中選擇資源文件,然后單擊Import按鈕。2.5 習(xí) 題1.填空題(1)MFC的全稱是 Microsoft Foundation Class 。 (2)Windows是一個(gè)基于 事件 的消息驅(qū)動(dòng)系統(tǒng)。(3)句柄是Windows使用的一種無(wú)重復(fù)整數(shù),主要用來標(biāo)識(shí)應(yīng)用程序中的一個(gè)對(duì)象。(4)利用MFC AppWizardexe可以
7、創(chuàng)建三種類型的應(yīng)用程序,即 單文檔、多文檔和基于對(duì)話框的應(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事件處理消息 D以上都不對(duì)(2) 下面( )不是MFC應(yīng)用程序外觀的選項(xiàng)。 A
8、Docking toolbar BContext-sensitive Help CActiveX Controls DPrinting and print preview(3)對(duì)MFC類的下列描述中,( )是錯(cuò)誤的。 A應(yīng)用程序類CWinApp是CWinThread的子類 B窗口類CWnd提供了MFC中所有窗口類的基本功能 CCView是CWnd類的子類 DCDocTemplate類是Template類的子類(4)下列( )不是MFC消息映射機(jī)制有關(guān)的宏。 ADECLARE_MESSAGE_MAP( )宏 BBEGIN_MESSAGE_MAP( )宏 CDECLARE_SERIAL( )宏 D
9、END_MESSAGE_MAP( )宏3.判斷題(1) 窗口是Windows應(yīng)用程序的基本操作單元,是應(yīng)用程序與用戶之間交互的接口環(huán)境,也是系統(tǒng)管理應(yīng)用程序的基本單位。 ( t )(2)所有的Windows應(yīng)用程序都是消息驅(qū)動(dòng)的。 (t )(3) 所有的Windows應(yīng)用程序都是用MFC AppWizardexe向?qū)?chuàng)建的。 ( f )(4)使用MFC AppWizardexe向?qū)?chuàng)建應(yīng)用程序框架時(shí),向?qū)傻奈募皖惷遣豢筛牡摹?( f )(5)消息映射是將消息處理函數(shù)與它要處理的特定消息連接起來的一種機(jī)制。 (t )(6) 命令消息是由菜單項(xiàng)、工具欄按鈕、快捷鍵等用戶界面對(duì)象發(fā)出的W
10、M_COMMAND消息。 ( t ) (7) 利用MFC編程時(shí),所有的消息與消息處理函數(shù)的添加都必須采用ClassWizard類向?qū)硗瓿伞?( f )(8) WinMain函數(shù)是所有Windows應(yīng)用程序的入口。 ( t ) (9)用快捷鍵F9既可設(shè)置斷點(diǎn),又可取消斷點(diǎn)。 ( t )(10)調(diào)式程序時(shí),會(huì)同時(shí)出現(xiàn)Variable窗口和Watch窗口。 ( t ) 4.簡(jiǎn)答題(1)簡(jiǎn)述MFC應(yīng)用程序的執(zhí)行過程。MFC應(yīng)用程序啟動(dòng)時(shí),首先創(chuàng)建應(yīng)用程序?qū)ο髏heApp。這時(shí)將自動(dòng)調(diào)用應(yīng)用程序類的構(gòu)造函數(shù)初始化對(duì)象theApp,然后由應(yīng)用程序框架調(diào)用MFC提供的WinMain( )主函數(shù)。在WinM
11、ain( )主函數(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ù)Run( )收到WM_QUIT消息。MFC首先調(diào)用CWinApp類的成員函數(shù)ExitInstance( ),然后調(diào)用靜態(tài)對(duì)象的析構(gòu)函數(shù),包括CWinApp對(duì)象,最后退出應(yīng)用程序,將控制權(quán)
12、交給操作系統(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)用指定對(duì)象的消息處理函數(shù)。如果消息隊(duì)列中沒有消息,函數(shù)Run( )就調(diào)用函數(shù)OnIdle( )進(jìn)行空閑時(shí)間的處理。(2)簡(jiǎn)述文檔/視圖與其他類對(duì)象的關(guān)系。在MFC應(yīng)用程序中,文檔類和視圖類是用戶最常用的兩個(gè)類,它們之間是密切相關(guān)的。文檔視圖體系結(jié)構(gòu)是MFC應(yīng)用程序框架結(jié)構(gòu)的基石,它定
13、義了一種程序結(jié)構(gòu),這種結(jié)構(gòu)利用文檔對(duì)象保存應(yīng)用程序的數(shù)據(jù),依靠視圖對(duì)象控制視圖顯示數(shù)據(jù),文檔與視圖的關(guān)系是一對(duì)多的關(guān)系,也就是說,文檔中的數(shù)據(jù)可以以不同的方式顯示。MFC在類CDocument和CView中為文檔和視圖提供了基礎(chǔ)結(jié)構(gòu)。CWinApp、CFrameWnd和其他類與CDocument和CView共同把所有的程序片段連在一起。文檔/視圖與其他類對(duì)象的關(guān)系如下圖所示。(3) 簡(jiǎn)述MFC消息映射機(jī)制。MFC采用消息映射來處理消息。這種消息映射機(jī)制包括一組消息映射宏,用于把一個(gè)Windows消息和其消息處理函數(shù)聯(lián)系起來。MFC應(yīng)用程序框架提供了消息映射功能,所有從CCmdTarget類派生
14、出來的類都能夠擁有自己的消息映射。(4) 消息WM_LBUTTONDOWN的消息映射宏和消息處理函數(shù)是什么?消息WM_LBUTTONDOWN的消息映射宏是ON_WM_LBUTTONDOWN( ) ,消息處理函數(shù)是OnRButtonDown()。(5) 如何自定義消息?如何發(fā)送自定義消息?Windows將所有的消息值分為4段:0 x00000 x03FF消息值范圍段用于Windows系統(tǒng)消息,0 x04000 x7FFF段用于用戶自定義的窗口消息,0 x80000 xBFFF段為Windows保留值,0 xC0000 xFFFF段用于應(yīng)用程序的字符串消息。常量WM_USER(為0 x0400)與
15、第一個(gè)自定義消息值相對(duì)應(yīng),用戶必須為自己的消息定義相對(duì)于WM_USER的偏移值,利用#define語(yǔ)句直接定義自己的消息,如下所示:#define WM_USER WM_USER+3 ;/ 自定義消息WM_USER 也可以調(diào)用窗口消息注冊(cè)函數(shù)RegisterWindowMessage( )來定義一個(gè)Windows消息,由系統(tǒng)分配消息一個(gè)整數(shù)值。該函數(shù)原型為:UINT RegisterWindowMessage(LPCTSTR lpString);其中參數(shù)lpString是要定義的消息名,調(diào)用成功后將返回該消息的ID值。發(fā)送自定義消息消息采用的函數(shù)是SendMessage( )函數(shù)。(文中未講清
16、楚)3.7 習(xí) 題1填空題(1) Windows引入GDI的主要目的是為了實(shí)現(xiàn) 設(shè)備無(wú)關(guān)性 。 (2) 與DOS字符方式下的輸出文本不同,Windows是按 圖形 方式輸出的。(3) 為了體現(xiàn)Windows的設(shè)備無(wú)關(guān)性,應(yīng)用程序的輸出面向一個(gè)稱之為 設(shè)備環(huán)境 的虛擬邏輯設(shè)備。(4) 在一個(gè)MFC應(yīng)用程序中獲得DC的方法主要有兩種:一種是 接受一個(gè)參數(shù)為指向CDC對(duì)象的指針;另一種是聲明一個(gè) MFC設(shè)備環(huán)境類的對(duì)象,并使 用 this 指針為該對(duì)象賦值。(5) Windows用 COLORREF 類型的數(shù)據(jù)存放顏色,它實(shí)際上是一個(gè) 32 位整數(shù)。它采用3個(gè)參數(shù)表示紅、綠、藍(lán)分量值,這3個(gè)值的取值
17、范圍為0255 。(6) 庫(kù)存對(duì)象是由操作系統(tǒng)維護(hù)的用于繪制屏幕的常用對(duì)象,包括庫(kù)存畫筆、畫刷、字體 等。(7) 可以利用CGdiObject類的成員函數(shù)CreateStockObject( ) 將GDI對(duì)象設(shè)置成指定的庫(kù)存對(duì)象。(8) 創(chuàng)建畫筆后必須調(diào)用CDC類的成員函數(shù)SelectOject( ) 將創(chuàng)建的畫筆選入當(dāng)前設(shè)備環(huán)境。(9) 在默認(rèn)情況下輸出文本時(shí),字體顏色是 黑色 ,背景顏色是 白色 ,背景模式為 不透明模式 。(10) 創(chuàng)建畫筆的方法有兩種,一種是 定義畫筆對(duì)象時(shí)直接創(chuàng)建,另一種是先定義一個(gè)沒有初始化的畫筆對(duì)象,再調(diào)用CreatePen( )函數(shù)創(chuàng)建指定畫筆。2選擇題(1)
18、下面( )不是MFC設(shè)備環(huán)境類CDC類的派生類。AGDI 類 BCPaintDC類CCClientDC類DCWindowDC類(2) 下面( )不是GDI對(duì)象。ACFont類BCPalette類 CCClientDC類 DCBitmap類(3) 下列描述中,( )是錯(cuò)誤的。ACreatePointFont( )是CFont類提供的創(chuàng)建函數(shù)B可使用SetTextAlign( )函數(shù)改變文本對(duì)齊方式C使用函數(shù)GetTextMetrics( )可以獲得所選字體中指定字符串的寬度和高度D可使用DrawText( )函數(shù)在給定的矩形區(qū)域內(nèi)輸出文本(4) 下列( )不是MFC CDC類中常用的文本輸出函數(shù)
19、。ATextOut( )BDrawText( )CExtTextOut( ) DExtDrawText( )3判斷題(1) CDC類是MFC設(shè)備環(huán)境類的基類。 ( t )(2) CClientDC代表整個(gè)窗口的設(shè)備環(huán)境。 ( f )(3) CPen和CFont均是GDI對(duì)象。 ( t )(4) 深綠色RGB值為(0,128,0) ( t )(5) 刪除CPen對(duì)象可調(diào)用CPen對(duì)象的DeleteObject( )函數(shù)。 ( f )(6) 創(chuàng)建陰影畫刷函數(shù)是CreateHatchBrush( )。 ( t )(7) 默認(rèn)的對(duì)齊方式是TA_LEFT| TA_BOTTOM。 ( f )(8) DDB
20、又稱GDI位圖,它依賴于具體設(shè)備,只能存在于內(nèi)存中。 ( t )4簡(jiǎn)答題(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的主要功能有以下幾種:l 允許應(yīng)用程序使用一個(gè)輸出設(shè)備。l 提供Windows應(yīng)用程序、設(shè)備驅(qū)動(dòng)和輸出設(shè)備之間的連接。l 保存當(dāng)前信息,例如當(dāng)前的畫筆、畫刷、字體和位圖等圖形對(duì)象及其屬性,以及顏色和背景等影響圖形輸出的繪圖模式。l 保存窗口剪切區(qū)域(Clipping Re
21、gion),限制程序輸出到輸出設(shè)備中窗口覆蓋的區(qū)域。(3) 什么是GDI,它有什么功能?MFC將GDI函數(shù)封裝在哪個(gè)類中?GDI是Windows提供了一個(gè)圖形設(shè)備接口的抽象接口。GDI負(fù)責(zé)管理用戶繪圖操作時(shí)功能的轉(zhuǎn)換,其主要功能是實(shí)現(xiàn)設(shè)備無(wú)關(guān)性。MFC將GDI函數(shù)封裝在CDC類中。(4) 請(qǐng)敘述設(shè)備無(wú)關(guān)性的含義,實(shí)現(xiàn)設(shè)備無(wú)關(guān)性需要哪幾個(gè)環(huán)節(jié)?所謂設(shè)備無(wú)關(guān)性,是指操作系統(tǒng)屏蔽了硬件設(shè)備的差異,使用戶編程時(shí)一般無(wú)須考慮設(shè)備的類型,如不同種類的顯示器或打印機(jī)。當(dāng)然,實(shí)現(xiàn)設(shè)備無(wú)關(guān)性的另一個(gè)重要環(huán)節(jié)是設(shè)備驅(qū)動(dòng)程序。不同設(shè)備根據(jù)其自身不同的特點(diǎn)(如分辨率和色彩數(shù)目)提供相應(yīng)的驅(qū)動(dòng)程序。下圖描述了Windo
22、ws應(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)境類的功能如下表所示。設(shè)備環(huán)境類功能描述CDC 所有設(shè)備環(huán)境類的基類,對(duì)GDI的所有繪圖函數(shù)進(jìn)行了封裝;可用來直接訪問整個(gè)顯示器或非顯示設(shè)備(如打印機(jī)等)的上下文CPaintDCCPaintDC用于響應(yīng)窗口重繪消息(WM_PAINT)的繪圖輸出,不僅可對(duì)客戶區(qū)進(jìn)行操作,還可以對(duì)非客戶區(qū)進(jìn)行操作CClient
23、DC代表窗口客戶區(qū)的設(shè)備環(huán)境,一般在響應(yīng)非窗口消息并對(duì)客戶區(qū)繪圖時(shí)要用到該類CWindowDC代表整個(gè)窗口的設(shè)備環(huán)境,包括客戶區(qū)和非客戶區(qū);除非要自己繪制窗口邊框和按鈕,否則一般不用它CMetaFileDC代表Windows圖元文件的設(shè)備環(huán)境;一個(gè)Windows圖元文件包括一系列的圖形設(shè)備接口命令,可以通過重放這些命令來創(chuàng)建圖形;對(duì)CMetaFileDC對(duì)象進(jìn)行的各種繪制操作可以被記錄到一個(gè)圖元文件中(6) 簡(jiǎn)述傳統(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)用
24、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) 簡(jiǎn)述創(chuàng)建和使用自定義畫筆的步驟。如果要在設(shè)備環(huán)境中使用自己的畫筆繪圖,首先需要?jiǎng)?chuàng)建一個(gè)指定風(fēng)格的畫筆,然后選擇所創(chuàng)建的畫筆,最后還原畫筆。(8) 簡(jiǎn)述采用MFC方法編程時(shí),顯示一個(gè)DDB位圖的步驟。采用MFC方法編程時(shí),顯示一個(gè)DDB位圖需要執(zhí)行以下幾個(gè)步驟。l 聲明一個(gè)CBitmap類的對(duì)象,使用LoadBitmap( )函數(shù)將位圖裝入內(nèi)存。l 聲明一個(gè)CDC類的對(duì)象,使用CreateC
25、ompatibleDC( )函數(shù)創(chuàng)建一個(gè)與顯示設(shè)備環(huán)境兼容的內(nèi)存設(shè)備環(huán)境。l 使用CDC:SelectObject( )函數(shù)將位圖對(duì)象選入設(shè)備環(huán)境中,并保存原來設(shè)備環(huán)境的指針。l 利用CDC的相關(guān)輸出函數(shù)輸出位圖。l 使用CDC:SelectObject( )函數(shù)恢復(fù)原來設(shè)備環(huán)境。4.6 習(xí) 題1. 填空題(1) 常見的菜單類型有主菜單、彈出菜單和快捷菜單3種。(2) 在Visual C+中,每一個(gè)快捷鍵除了ID屬性外,還有兩個(gè)屬性: 鍵 和 類型 。 (3) 基于對(duì)話框的應(yīng)用程序在運(yùn)行時(shí) 沒有 菜單欄。(4) 在MFC中,工具欄的功能由類 CToolBar 實(shí)現(xiàn)。(5) 調(diào)用CToolBar
26、類的成員函數(shù)CToolBar:Create( )或CreateEx( ) 創(chuàng)建并初始化工具欄窗口對(duì)象。(6) 設(shè)置工具欄??刻匦?,需要調(diào)用 EnableDocking( ) 函數(shù)。(7) 狀態(tài)欄實(shí)際上是一個(gè)窗口,一般分為幾個(gè) 窗格 ,用來顯示不同的信息。(8) 在MFC中,狀態(tài)欄的功能由 CStatusBar 類實(shí)現(xiàn)。(9) 狀態(tài)欄顯示的內(nèi)容由數(shù)組 indicators 決定,需要在狀態(tài)欄中顯示各窗格的 標(biāo)識(shí)符、位置以及個(gè)數(shù)。(10) CStatusBar類的成員函數(shù) SetPaneInfo() 用來設(shè)置給定索引值的窗格ID、風(fēng)格和寬度,成員函數(shù) SetPaneText() 用來更新窗格的文本
27、2. 選擇題(1) 在編輯某菜單項(xiàng)時(shí),若要指明該菜單項(xiàng)是一個(gè)彈出式子菜單,必須選擇屬性對(duì)話框中的( )。ASeparator BPop-up CInactive DGrayed(2) 要使鼠標(biāo)箭頭在按鈕上暫停時(shí)能顯示工具欄按鈕提示,必須設(shè)置工具欄的風(fēng)格為( )。ACBRS_TOOLTIPS BCBRS_FLYBYCCBRS_NOALIGN DWS_VISIBLE(3) MFC應(yīng)用程序框架為狀態(tài)欄定義的靜態(tài)數(shù)組indicators放在文件( )中。AMainFrm.cpp BMainFrm.h CstdAfx.cpp DstdAfx.h(4) 下列有關(guān)菜單的敘述中不確的是( )。A“&”字符的作
28、用是使其后的字符加上下劃線B“t” 轉(zhuǎn)移字符表示使快捷鍵按右對(duì)齊顯示 C自定義菜單項(xiàng)ID不能與系統(tǒng)菜單項(xiàng)ID相同 D選中菜單項(xiàng)屬性對(duì)話框中的Separator,指明菜單項(xiàng)是一個(gè)水平線分隔條3. 判斷題(1) 給菜單項(xiàng)定義快捷鍵,只需在菜單項(xiàng)屬性設(shè)置對(duì)話框的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類和CStatusBa
29、r類的根基類是相同的。 ( t )4. 簡(jiǎn)答題(1) 簡(jiǎn)述菜單設(shè)計(jì)的主要步驟。菜單設(shè)計(jì)一般需要經(jīng)過下面兩步:l 使用菜單編輯器編輯菜單資源;l 使用ClassWizard進(jìn)行消息映射,編輯成員函數(shù),完成菜單所要實(shí)現(xiàn)的功能。(2) 為應(yīng)用程序創(chuàng)建快捷菜單主要有哪些方法?為應(yīng)用程序創(chuàng)建快捷菜單主要有以下兩種方法:l 使用Component Gallery創(chuàng)建快捷菜單l 使用TrackPopupMenu( )函數(shù)創(chuàng)建快捷菜單(3) 如何動(dòng)態(tài)創(chuàng)建菜單?動(dòng)態(tài)創(chuàng)建菜單分為以下3個(gè)步驟。l 利用CreateMenu( )函數(shù)創(chuàng)建一個(gè)空的彈出式菜單l 調(diào)用AppendMenu( )或InsertMenu( )
30、函數(shù)在菜單中加入菜單項(xiàng)l 調(diào)用函數(shù)SetMenu( )加載動(dòng)態(tài)菜單(4) 創(chuàng)建工具欄的基本步驟有哪些?創(chuàng)建工具欄的基本步驟是:l 創(chuàng)建工具欄資源;l 構(gòu)建一個(gè)CToolBar對(duì)象;l 調(diào)用CToolBar:Create( )或CreateEx( )函數(shù)創(chuàng)建工具欄窗口;l 調(diào)用CToolBar:LoadToolBar()載入工具欄資源。(5) 簡(jiǎn)述MFC創(chuàng)建狀態(tài)欄所做的工作。首先構(gòu)造一個(gè)CToolBar類的對(duì)象,然后調(diào)用CToolBar:Create( )或CreateEx( )函數(shù)創(chuàng)建工具欄窗口,最后調(diào)用CToolBar:LoadToolBar( )函數(shù)載入工具欄資源。5.7 習(xí) 題1.填空題
31、(1) 對(duì)話框的主要功能是輸出信息和接收用戶的輸入。(2) 從對(duì)話框的工作方式看,對(duì)話框可分為模態(tài)對(duì)話框和非模態(tài)對(duì)話框兩種類型。 (3) 對(duì)話框主要由對(duì)話框模板資源與對(duì)話框類兩部分組成。(4) 使用DoModal()函數(shù)可以創(chuàng)建模式對(duì)話框,使用Create()函數(shù)可以創(chuàng)建非模式對(duì)話框。(5) 為了支持屬性頁(yè)對(duì)話框,MFC提供了CPropertySheet類和CPropertyPage類。2.選擇題(1) 對(duì)話框的功能被封裝在( )類中。 A. CWnd B. CDialog C. CObject D. CCmdTarget(2) ( )是非模式對(duì)話框。 A.“查找”對(duì)話框 B.“字體”對(duì)話框
32、C.“段落”對(duì)話框 D.“顏色”對(duì)話框(3) 要將模式對(duì)話框在屏幕上顯示需要用到函數(shù)( )。A. Create B. DoModal C. OnOK D. 構(gòu)造函數(shù)(4) 通常將對(duì)話框的初始化工作在( )函數(shù)中進(jìn)行。A. OnOK B. OnCancel C. OnInitDialog D. DoModal(5) 使用( )通用對(duì)話框類可以打開文件。A. CFileDialog B. CColorDialog C. CPrintDialog D. CFontDialog3.簡(jiǎn)答題(1) 簡(jiǎn)述創(chuàng)建和使用模態(tài)對(duì)話框的主要步驟。l 使用對(duì)話框編輯器來創(chuàng)建包含不同控件的對(duì)話框模板資源l 從MFC的CD
33、ialog中派生出一個(gè)類,用來負(fù)責(zé)對(duì)話框行為。l 利用ClassWizard把這個(gè)類和先前你產(chǎn)生的對(duì)話框資源連接起來。l 對(duì)話框的初始化。l 創(chuàng)建一個(gè)對(duì)話框?qū)ο?,調(diào)用CDialog:DoModal()函數(shù)打開對(duì)話框。(2) 如何向?qū)υ捒蚰0遒Y源添加控件?如何添加與控件關(guān)聯(lián)的成員變量?在一個(gè)對(duì)話框資源中增加控件的操作十分方便,只需從控件工具欄中選中要增加的控件,再將此控件拖動(dòng)至對(duì)話框模板中的確定位置上,松開鼠標(biāo)按鍵即添加了一個(gè)控件。調(diào)整控件的位置和大小的操作與Word中對(duì)文本框的操作完全一樣??梢岳肅lassWizard類向?qū)У腗ember Variables頁(yè)面為對(duì)話框類添加與對(duì)話框控件關(guān)聯(lián)
34、的成員變量。在Member Variables頁(yè)面中,雙擊一個(gè)ID或選定ID后,單擊Add Variable按鈕,將彈出Add Member Variable對(duì)話框。在Member variable name框用于輸入成員變量名,在Category下拉框選擇成員變量的類別。(3) 什么是DDX和DDV?編程時(shí)如何使用MFC提供的DDX功能?DDX為對(duì)話框數(shù)據(jù)交換,它用于將成員變量與對(duì)話框控件相連接,完成數(shù)據(jù)在成員變量和控件之間的交換。DDV為對(duì)話框數(shù)據(jù)驗(yàn)證,它能自動(dòng)校驗(yàn)輸入的數(shù)據(jù)是否符合設(shè)計(jì)要求。我們只需通過ClassWizard為對(duì)話框類添加與對(duì)話框控件關(guān)聯(lián)的成員變量即可使用MFC提供的DD
35、X功能。(4) 簡(jiǎn)述創(chuàng)建屬性頁(yè)對(duì)話框的主要步驟。l 設(shè)計(jì)對(duì)話框資源。分別為各個(gè)頁(yè)創(chuàng)建對(duì)話框模板,每頁(yè)的模板最好具有相同尺寸,如果尺寸不統(tǒng)一,則框架將根據(jù)尺寸最大的頁(yè)來確定屬性頁(yè)對(duì)話框的大小。l 用ClassWizard為每頁(yè)創(chuàng)建新類,并加入與控件對(duì)應(yīng)的成員變量。l 打開屬性頁(yè)對(duì)話框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及Extend Styles三個(gè)屬性頁(yè)構(gòu)成。 (3) 當(dāng)編輯框中的文本已被修改,在新的文本顯示之后發(fā)送EN_CHANGE通
36、知消息。(4) CButton類控件包括按鍵按鈕、單選按鈕、復(fù)選框和組框等4種類型。(5) 一組單選按鈕在對(duì)話框類中只能映射一個(gè)int類型值變量,對(duì)應(yīng)單選按鈕在組中的序號(hào),序號(hào)從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ā)送WM_VSCROLL消息,水平滑塊發(fā)送WM_HSCROLL消息。
37、(10) MFC的CProgressCtrl類封裝了進(jìn)度條控件的各種操作,該類的成員函數(shù)SetRange()用來設(shè)置進(jìn)度條的范圍。2.簡(jiǎn)答題(1) 在應(yīng)用程序中訪問控件的方法有哪些?應(yīng)用程序訪問控件一般有3種方法:l 利用對(duì)話框的數(shù)據(jù)交換功能訪問控件l 通過控件對(duì)象來訪問控件l 利用CWnd類的一些用于管理控件的成員函數(shù)來訪問控件(2) 單選按鈕控件如何成組?將一組單選按鈕放在一個(gè)組框控件中,并為同組中的第一個(gè)單選按鈕設(shè)置Group屬性。 (3) 組合框與列表框相比有什么不同?如何給組合框添加初始的列表項(xiàng)?列表框可列出各種可能的選項(xiàng),但用戶卻不能在列表框中輸入新的列表項(xiàng)。而組合框不僅可以顯示列
38、表項(xiàng)供用戶進(jìn)行選擇,而且允許用戶輸入新的列表項(xiàng)??梢酝ㄟ^組合框控件屬性對(duì)話框的Data選項(xiàng)卡添加初始的列表項(xiàng)。7.7 習(xí) 題1.填空題(1) 在文檔/視圖結(jié)構(gòu)中,文檔是用來管理和組織數(shù)據(jù)的,視圖的作用是顯示和編輯文檔數(shù)據(jù)。文檔與視圖的關(guān)系是一對(duì)多的關(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)前文檔對(duì)象的指針。(4) 文檔類的數(shù)據(jù)成員初始化和文檔的清理工作分別在OnNewDocume
39、nt()成員函數(shù)和DeleteContents()成員函數(shù)中完成。(5) MFC提供了兩種集合類,一種是基于模板的集合類,另一種是非模板集合類。(6) MFC應(yīng)用程序通過CDocument的protected類型成員變量m_bModified的邏輯值來判斷程序員是否對(duì)文檔進(jìn)行過修改。程序員可以通過CDocument的SetModifiedFlag()成員函數(shù)來設(shè)置該值。(7) MFC AppWizard在創(chuàng)建文檔應(yīng)用程序框架時(shí)已在文檔類中重載了Serialize()函數(shù),通過在該函數(shù)中添加代碼可以達(dá)到實(shí)現(xiàn)文檔序列化的目的。(8) 調(diào)用create()成員函數(shù)創(chuàng)建動(dòng)態(tài)分割窗口,而靜態(tài)分割窗口是調(diào)
40、用CreateStatic()成員函數(shù)創(chuàng)建的。2.簡(jiǎn)答題(1) 通過哪幾個(gè)主要成員函數(shù)完成文檔與視圖之間的相互作用?并簡(jiǎn)述這些成員函數(shù)的功能。文檔與視圖的交互是通過下面幾個(gè)主要的成員函數(shù)完成的:l 視圖類CView的成員函數(shù)GetDocument()該函數(shù)得到與之相關(guān)聯(lián)的文檔對(duì)象的指針,利用這個(gè)指針就可以訪問文檔類及其派生類的公有數(shù)據(jù)成員和成員函數(shù)。l CDocument類的成員函數(shù)UpdateAllViews()該函數(shù)通知與文檔相關(guān)聯(lián)的所有或部分試圖,更新窗口內(nèi)容。l 視圖類的成員函數(shù)OnUpdate()當(dāng)應(yīng)用程序調(diào)用CDocument:UpdateAllViews()函數(shù)時(shí),實(shí)際上是調(diào)用了
41、所有相關(guān)視圖的OnUpdate()函數(shù),以更新相關(guān)的視圖。需要時(shí),可以直接在視圖派生類的成員函數(shù)中調(diào)用該函數(shù)刷新當(dāng)前視圖。另外,在初始化視圖成員函數(shù)CView:OnInitialUpdate()中也調(diào)用了OnUpdate()函數(shù)。l 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ù)之外,不做其他任何事情。也可以利用派生類的OnInitialUpdate()函數(shù)對(duì)視
42、圖對(duì)象進(jìn)行初始化。(2) 簡(jiǎn)述文檔序列化與一般文件處理的區(qū)別。一般文件處理是通過文件句柄來實(shí)現(xiàn)磁盤輸入和輸出,一個(gè)文件句柄與一個(gè)磁盤文件相關(guān)聯(lián)。而文檔序列化與一般文件處理最大的不同在于:在序列化中,對(duì)象本身對(duì)讀和寫負(fù)責(zé)。CArchive類對(duì)象并不知道也不需要知道它所讀寫數(shù)的內(nèi)部結(jié)構(gòu),CArchive類對(duì)象為讀寫CFile類對(duì)象中的可序列化數(shù)據(jù)提供了一種安全的緩沖機(jī)制,它們之間形成了如下關(guān)系:Serialize()函數(shù) CArchive類對(duì)象 CFile類對(duì)象 磁盤文件可見序列化使得程序員可以不直接面對(duì)一個(gè)物理文件而進(jìn)行文檔的讀寫。(3) 如何讓用戶定義的類支持序列化?要讓用戶定義的類支持序列化
43、,必須滿足以下5個(gè)條件:l 從CObject類派生,這樣派生類就具有RTTI(Run-time type information)、Dynamic Creation等功能。l 類的聲明部分必須有DECLARE_SERIAL宏,此宏需要1個(gè)參數(shù):類名稱。l 類的實(shí)現(xiàn)部分必須有IMPLEMENT_SERIAL宏,此宏需要3個(gè)參數(shù):一是類名稱,二是基類名稱,三是版本號(hào)。l 重新定義Serialize( )虛函數(shù),使它能夠適當(dāng)?shù)匕杨惖某蓡T變量寫入文件中。l 為此類加上一個(gè)默認(rèn)構(gòu)造函數(shù),這是因?yàn)槿绻粋€(gè)對(duì)象來自文件,MFC必須先動(dòng)態(tài)地創(chuàng)建它,而且在沒有任何參數(shù)的情況下調(diào)用構(gòu)造函數(shù),然后才從文件中讀取對(duì)象
44、數(shù)據(jù)。8.5 習(xí) 題1.填空題(1) MFC通過CView類提供打印功能和打印預(yù)覽功能。(2) 在打印過程中,CPrintInfo類的主要作用是在框架窗口和CView類之間傳遞消息。(3) CPrintInfo類中的成員變量m_nCurPage表示當(dāng)前打印/預(yù)覽的頁(yè)號(hào),成員函數(shù)SetMaxPage( )設(shè)置文檔的最大打印頁(yè)數(shù)。(4) 在Windows操作系統(tǒng)中,存在兩種類型的坐標(biāo):設(shè)備坐標(biāo)和邏輯坐標(biāo)。(5) 不同的映射模式將影響輸出設(shè)備顯示的圖形尺寸因子,Windows的缺省映射模式是MM_TEXT,在該映射方式中,每一個(gè)邏輯單位對(duì)應(yīng)一個(gè)設(shè)備像素。(6) 在MFC應(yīng)用程序中,通過調(diào)用CDC類的
45、SetMapMode()函數(shù)設(shè)置映射方式。(7) 如果要使程序支持多頁(yè)打印功能,首先在打印之前設(shè)置要打印的頁(yè)數(shù),然后設(shè)置每一頁(yè)視圖原點(diǎn)的打印坐標(biāo)。(8) 一般在OnBeginPrinting()函數(shù)中設(shè)置要打印的頁(yè)數(shù),在OnPrepareDC()函數(shù)中通過調(diào)用CDC類成員函數(shù)SetViewPortOrg( )設(shè)置當(dāng)前頁(yè)的視圖原點(diǎn)坐標(biāo)。2.簡(jiǎn)答題(1) 打印和屏幕顯示有何異同?相同點(diǎn):在MFC應(yīng)用程序中,打印和屏幕顯示最終都是通過調(diào)用視圖類的OnDraw()函數(shù)來完成的。OnDraw()函數(shù)有一個(gè)指向CDC類對(duì)象指針的參數(shù),該對(duì)象代表了接收OnDraw()函數(shù)輸出的設(shè)備上下文,它可以是代表顯示器
46、的顯示設(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ī)。(2) 如何在打印和屏幕顯示時(shí)輸出不同內(nèi)容?有兩種方法:l 分別在OnPaint
47、()和OnPrint()這兩個(gè)函數(shù)中完成屏幕輸出和打印輸出工作,而不必依賴于OnDraw()函數(shù)。l OnDraw()函數(shù)中,調(diào)用pDC-IsPrinting()或設(shè)置變量來識(shí)別目前進(jìn)行的輸出工作并區(qū)別對(duì)待。 (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í)現(xiàn)打印預(yù)覽的功能,MFC類庫(kù)從CDC類中派生出CPreviewDC類。在進(jìn)行打印預(yù)覽時(shí),傳給OnDraw()
48、函數(shù)的是一個(gè)指向CPreviewDC對(duì)象的指針。一般CDC類中保存有兩套相同的設(shè)備描述表,而CPreviewDC類則保存有兩套不同的設(shè)備描述表,其中的屬性設(shè)備描述表指向打印機(jī),而輸出設(shè)備描述表指向屏幕。(4) MM_LOMETRIC映射方式有何特點(diǎn)?MM_LOMETRIC映射方式將一個(gè)邏輯單位映射到0.l mm, MM_LOMETRIC坐標(biāo)系統(tǒng)Y軸方向與默認(rèn)的MM_TEXT相反。(5) 簡(jiǎn)述添加打印頁(yè)眉、頁(yè)腳的程序代碼的步驟。添加打印頁(yè)眉、頁(yè)腳的程序代碼可以分兩步進(jìn)行:l 在OnPrint()函數(shù)中利用CPrintInfo*pInfo的成員變量m_rectDraw來設(shè)置打印頁(yè)上打印區(qū)域的大小。
49、l 在m_rectDraw范圍之外打印頁(yè)眉和頁(yè)腳。9.5 習(xí) 題1.填空題(1) Windows的庫(kù)類型主要有靜態(tài)鏈接庫(kù)和動(dòng)態(tài)鏈接庫(kù)。(2) DLL中一般定義有導(dǎo)出函數(shù)和內(nèi)部函數(shù)兩種類型的函數(shù),其中導(dǎo)出函數(shù)可以被外部程序調(diào)用。(3) 每個(gè)DLL都含有一個(gè)入口函數(shù)DllMain(),就像我們編寫的應(yīng)用程序必須有main()或WinMain()函數(shù)一樣。該函數(shù)的作用是初始化DLL,并在卸載時(shí)清理DLL。(4) Visual C+ 6.0支持多種DLL,包括非MFC DLL、MFC常規(guī)DLL和MFC擴(kuò)展DLL。(5) 非MFC DLL的內(nèi)部不使用MFC,其導(dǎo)出函數(shù)為標(biāo)準(zhǔn)的C接口,能被非MFC或MFC
50、編寫的應(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類庫(kù)中派生出可重用的類。(8) 從MFC DLL中導(dǎo)出函數(shù)常用使用模塊定義文件和使用關(guān)鍵字_declspec(dllexport)兩種方法。后者不僅可以導(dǎo)出函數(shù),還可以導(dǎo)出一個(gè)完整的類。(9) DEF文件是一個(gè)包含EXE文件或DLL文件聲明的文本文件。每個(gè).DEF文件至少必須包含LIBRARY語(yǔ)句和EXPORTS 語(yǔ)句。(10) 應(yīng)用程序與DLL鏈接的方式主要有隱式鏈接和顯式鏈接。(11) 應(yīng)用程序分別使用AfxLoa
51、dLibrary()和AfxFreeLibrary()函數(shù)來加載和釋放MFC擴(kuò)展DLL。(12) MFC擴(kuò)展DLL除了可使用關(guān)鍵字_declspec(dllexport) 導(dǎo)出類外,還可以使用宏AFX_EXT_CLASS來導(dǎo)出類。2.簡(jiǎn)答題(1) 什么是動(dòng)態(tài)鏈接庫(kù)?它和靜態(tài)鏈接庫(kù)有何區(qū)別?生成的動(dòng)態(tài)鏈接庫(kù)應(yīng)放在哪些目錄下才能被應(yīng)用程序使用?動(dòng)態(tài)鏈接庫(kù)是一種用來為其它可執(zhí)行文件(包括EXE文件和其它DLL)提供共享的函數(shù)庫(kù)。它和靜態(tài)鏈接庫(kù)的主要區(qū)別是與應(yīng)用程序的鏈接方式不同,前者進(jìn)行的是動(dòng)態(tài)鏈接,后者進(jìn)行的是靜態(tài)鏈接。生成的動(dòng)態(tài)鏈接庫(kù)必須位于下面4個(gè)目錄之一中:l 當(dāng)前目錄l Windows的系
52、統(tǒng)的目錄,如Windowssysteml Windows所在的目錄,如WINNTl 環(huán)境變量PATH中所指定的目錄(2) Visual C+支持哪幾種DLL?如何選擇選擇DLL的類型?Visual C+支持多種DLL,包括:l 非MFC DLLl MFC常規(guī)DLL(MFC Regular DLL)l MFC擴(kuò)展DLL(MFC Extension DLL)我們選擇哪一種DLL的類型可以從以下幾個(gè)方面來考慮:如果DLL不需要使用MFC,那么使用非MFC DLL是一個(gè)很好的選擇。如果需要?jiǎng)?chuàng)建使用了MFC的DLL,并希望MFC和非MFC應(yīng)用程序都能使用所創(chuàng)建的DLL,那么可以選擇MFC常規(guī)DLL。如果
53、希望在DLL中實(shí)現(xiàn)從MFC派生的可重用的類,或者是希望在應(yīng)用程序和DLL之間傳遞MFC的派生對(duì)象時(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)部雖然可以使用MFC,但是它與應(yīng)用程序的接口不能是MFC,而是C函數(shù)或者C+類。(4) 如何從MFC DLL中導(dǎo)出函數(shù)?從MFC DLL中導(dǎo)出函數(shù)常用的有兩種方法。第一種是使用模塊定義文件(.DEF)。DEF文件常用的模塊語(yǔ)句如下:(
54、1) 第一個(gè)語(yǔ)句必須是LIBRARY語(yǔ)句,這個(gè)語(yǔ)句指出DLL的名字,鏈接器將這個(gè)名字放到DLL導(dǎo)入庫(kù)(import library)中,DLL導(dǎo)入庫(kù)包含了指向外部DLL的函數(shù)索引指針。(2) EXPORTS 語(yǔ)句列出被導(dǎo)出函數(shù)的名字, 以及導(dǎo)出函數(shù)的數(shù)值(由號(hào)與數(shù)字構(gòu)成)。序數(shù)值可以省略, 編譯器(Compiler)會(huì)為每個(gè)導(dǎo)出函數(shù)指定一個(gè),但這樣指定的值不如自己指定的明確。(3) 使用DESCRIPTION語(yǔ)句描述DLL的用途,這個(gè)語(yǔ)句可以省略。(4) 使用“;”開頭的注釋語(yǔ)句。使用AppWizard創(chuàng)建一個(gè)MFC DLL時(shí),AppWizard將創(chuàng)建一個(gè).DEF文件的框架,并自動(dòng)添加到項(xiàng)目中
55、。建立DLL時(shí),鏈接器使用.DEF文件來創(chuàng)建一個(gè)導(dǎo)出文件(.EXP)和一個(gè)導(dǎo)入庫(kù)文件(.LIB),然后使用導(dǎo)出文件來創(chuàng)建.DLL文件。另一種方法是在定義函數(shù)時(shí)使用關(guān)鍵字_declspec(dllexport)。這種情況下,不需要.DEF文件。導(dǎo)出函數(shù)的形式為:declspec(dllexport) ();(5) 應(yīng)用程序與DLL鏈接的方式有哪兩種?它們之間有何區(qū)別?應(yīng)用程序與DLL鏈接的方式主要有如下兩種:隱式鏈接和顯式鏈接。隱式鏈接又稱為靜態(tài)加載,指的是使用DLL的應(yīng)用程序先鏈接到編譯DLL時(shí)生成的導(dǎo)入庫(kù)LIB文件,執(zhí)行應(yīng)用程序的同時(shí)系統(tǒng)也加載所需的DLL。在應(yīng)用程序退出之前,DLL一直存在
56、于該程序運(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.填空題(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)
57、常用的同步對(duì)象有臨界區(qū)、互斥、信號(hào)量和事件。(6) 為了使用同步類,需要手動(dòng)將頭文件Afxmt.h加到應(yīng)用程序中。 (7) 使用CSingleLock類的成員函數(shù)Lock()請(qǐng)求獲得臨界區(qū)。(8) CEvent 類對(duì)象有人工事件和自動(dòng)事件兩種類型。2.簡(jiǎn)答題(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)
58、部的一個(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)。主線程終止了,進(jìn)程也就隨之終止。每一個(gè)進(jìn)程至少有一個(gè)主線程,它無(wú)需由用戶去主動(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中有兩類
59、線程,分別稱之為工作者線程和用戶界面線程。創(chuàng)建一個(gè)工作者線程,首先需要編寫一個(gè)希望與應(yīng)用程序的其余部分并行運(yùn)行的自定義函數(shù),該函數(shù)稱為線程函數(shù)。然后,在程序中合適的地方調(diào)用全局函數(shù)AfxBeginThread()創(chuàng)建線程,以啟動(dòng)線程函數(shù)。創(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ù)LPVOID pParam,創(chuàng)建線程的AfxBeginThread()全局函數(shù)的第二個(gè)參數(shù)LPVOID pParam的類型與線程函數(shù)的參數(shù)類型完全一致,該參數(shù)為啟動(dòng)線程時(shí)傳遞給線程函數(shù)的入口參數(shù)。(4) 如何終
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 指向核心素養(yǎng)發(fā)展的高中生物學(xué)1輪復(fù)習(xí)備考建議
- 新課程新評(píng)價(jià)新高考導(dǎo)向下高三化學(xué)備考的新思考
- 新時(shí)代背景下化學(xué)高考備考策略及新課程標(biāo)準(zhǔn)的高中化學(xué)教學(xué)思考
- 2025屆江西省高考政治二輪復(fù)習(xí)備考建議
- 新教材新高考背景下的化學(xué)科學(xué)備考策略
- 新高考背景下的2024年高考化學(xué)二輪復(fù)習(xí)備考策略
- 2025屆高三數(shù)學(xué)二輪復(fù)習(xí)備考交流會(huì)課件
- 2025年高考化學(xué)復(fù)習(xí)研究與展望
- 2024年高考化學(xué)復(fù)習(xí)備考講座
- 2025屆高考數(shù)學(xué)二輪復(fù)習(xí)備考策略和方向
- 2024年感動(dòng)中國(guó)十大人物事跡及頒獎(jiǎng)詞
- XX教育系統(tǒng)單位述職報(bào)告教育工作概述教育成果展示面臨的挑戰(zhàn)未來規(guī)劃
- 2025《增值稅法》全文解讀學(xué)習(xí)高質(zhì)量發(fā)展的增值稅制度規(guī)范增值稅的征收和繳納
- 初中資料:400個(gè)語(yǔ)文優(yōu)秀作文標(biāo)題
- 初中語(yǔ)文考試專項(xiàng)練習(xí)題(含答案)