版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C++面向?qū)ο蟪绦蛟O(shè)計(jì)第十二章利用MFC開發(fā)Windows應(yīng)用程序?qū)W習(xí)目標(biāo)
(1)理解Windows編程思想,理解MFC庫及其結(jié)構(gòu)(2)掌握利用MFCAppwizard創(chuàng)建Windows應(yīng)用程序的步驟和方法,弄清MFCAppwizard所創(chuàng)建的應(yīng)用程序中所產(chǎn)生的主要類及其功能、組成文件和程序的框架結(jié)構(gòu)(3)理解消息映射、消息處理函數(shù)的概念。掌握利用ClassWizard增加、修改和刪除窗口消息處理函數(shù)的方法和步驟,并理解程序代碼的變化過程和特點(diǎn)(4)掌握文檔/視圖結(jié)構(gòu)應(yīng)用程序的開發(fā)過程(5)掌握菜單、工具欄、控件的使用(6)掌握對話框應(yīng)用程序的開發(fā)過程以及數(shù)據(jù)庫訪問操作Windows應(yīng)用程序的特點(diǎn)與消息驅(qū)動(dòng)機(jī)制
基于Windows操作系統(tǒng)的應(yīng)用程序的特點(diǎn)標(biāo)準(zhǔn)的圖形用戶界面,比如窗口、菜單、按鈕、列表框等。應(yīng)用程序與硬件無關(guān)的特性,對于同一類硬件,不論哪個(gè)廠家或哪個(gè)型號,程序都無需進(jìn)行任何修改就可以運(yùn)行。所有的Windows應(yīng)用程序都是消息驅(qū)動(dòng)機(jī)制,也就是說Windows程序是通過操作系統(tǒng)發(fā)送的消息來處理用戶的輸入。消息驅(qū)動(dòng)是Windows操作系統(tǒng)的一大特色,操作系統(tǒng)將包括用戶輸入在內(nèi)的各種事件,以消息的形式發(fā)送到目標(biāo),目標(biāo)系統(tǒng)再根據(jù)消息的具體內(nèi)容進(jìn)行相應(yīng)的處理。典型的Windows應(yīng)用程序結(jié)構(gòu)控制臺應(yīng)用程序:在本書第1章~第7章介紹的所有程序均為控制臺應(yīng)用程序??刂婆_應(yīng)用程序結(jié)構(gòu)簡單,可以不使用MFC類庫?;诳蚣艽翱诘膽?yīng)用程序:某些應(yīng)用程序僅需要最小的用戶界面和簡單的窗口結(jié)構(gòu),這時(shí)可以使用基于框架窗口的方案。基于文檔/視圖結(jié)構(gòu)的應(yīng)用程序:文檔/視圖應(yīng)用具有較復(fù)雜的結(jié)構(gòu),當(dāng)然其功能也相應(yīng)增強(qiáng)。又可分為單文檔(SDI)和多文檔界面(MDI)兩種模式?;趯υ捒虻膽?yīng)用程序。學(xué)習(xí)MFC的方法不要一開始學(xué)習(xí)VisualC++就試圖了解整個(gè)MFC類庫。一般的學(xué)習(xí)方法是,先大體上對MFC有個(gè)了解,知道它的概念、組成等之后,從較簡單的類入手,由淺入深,循序漸進(jìn)、日積月累地學(xué)習(xí)。一開始使用MFC提供的類時(shí),只需要知道它的一些常用的方法、外部接口,不必要去了解它的細(xì)節(jié)和內(nèi)部實(shí)現(xiàn)。在學(xué)到一定程度時(shí),再深入研究,采用繼承的方法對原有的類進(jìn)行修改和擴(kuò)充,派生出自己所需的類。利用MFCAppWizard創(chuàng)建Windows應(yīng)用程序
利用MFCAppWizard創(chuàng)建一個(gè)Windows應(yīng)用程序的步驟第1步:啟動(dòng)VisualC++6.0,選擇【File】菜單下的【New】菜單項(xiàng),選擇【Projects】標(biāo)簽,選擇MFCAppWizard(exe)項(xiàng)目類型,在Projectname中輸入項(xiàng)目名MyExp,定位于“C:\EXAMPLE\”文件夾中,單擊【OK】按鈕。第2步:選擇【Singledocument】應(yīng)用類型,即單文檔應(yīng)用程序,其他使用默認(rèn)值,單擊【Next】按鈕。第3步:讓用戶選擇程序中是否加入數(shù)據(jù)庫支持,在此使用默認(rèn)值【None】,單擊【Next】按鈕。第4步:讓用戶選擇在程序中加入復(fù)合文檔,自動(dòng)化支持或ActiveX控件的支持,在此使用默認(rèn)值,單擊【Next】按鈕。第5步:讓用戶選擇應(yīng)用程序的一些特性,在此使用默認(rèn)值,單擊【Next】按鈕。第6步:讓用戶選擇應(yīng)用程序主窗口的風(fēng)格、在源文件中選擇是否加入注釋和使用怎樣的MFC類庫,在此使用默認(rèn)值,單擊【Next】按鈕。第7步:用戶可以對MFCAppWizard提供的缺省類名、基類名、頭文件名、源文件名進(jìn)行修改,在此使用默認(rèn)值,單擊【Finish】按鈕,顯示出用戶在前面幾個(gè)步驟中的選擇內(nèi)容,單擊【OK】按鈕,系統(tǒng)開始創(chuàng)建應(yīng)用程序,并回到VisualC++6.0的主界面。 運(yùn)行過的應(yīng)用程序MyExp可以脫離VisualC++6.0單獨(dú)運(yùn)行,運(yùn)行該文檔可以雙擊“C:\EXAMPLE\Debug”下的MyExp.exe文件,運(yùn)行結(jié)果如圖12.1所示??梢钥吹?,和所有的Windows應(yīng)用程序一樣,MyExp也包含標(biāo)題欄、菜單欄、工具欄、狀態(tài)欄等窗口元素。MFC應(yīng)用程序的類和文件AppWizard在生成應(yīng)用程序時(shí),共派生了5個(gè)類,單擊“MyExpclasses”左側(cè)的“+”展開所有的類,即可顯示出應(yīng)用程序MyExp的5個(gè)類。其中:CAboutDlg:關(guān)于About對話框的對話框類。CMainFrame:主框架窗口類。CMyExpApp:應(yīng)用程序類。CMyExpDoc:文檔類。CMyExpView:視圖類。在工程中,每個(gè)類都擁有自己的類定義文件(*.h)和類實(shí)現(xiàn)文件(*.cpp)。類定義文件主要保存各種類的定義,類實(shí)現(xiàn)文件主要保存各種類的成員函數(shù)的實(shí)現(xiàn)代碼AppWiZard生成的5個(gè)派生類類定義和類實(shí)現(xiàn)文件文件說明AppWizard在自動(dòng)生成工程時(shí),除了生成上面介紹的各個(gè)類的頭文件和實(shí)現(xiàn)文件外,還生成了一些為建立應(yīng)用程序所需要的其他文件。這些文件可以在應(yīng)用程序生成時(shí)指定的路徑(C:\EXAMPLE\MyExp)中找到。如下圖所示關(guān)于這些文件詳細(xì)說明詳見教材在窗口的客戶區(qū)輸出文字和圖形 SDI中顯示字符串 12.2節(jié)中的第1步到第7步。 在左邊的Workspace下面的ClassView中,點(diǎn)擊類CMyExpView左邊的+號,雙擊OnDraw(),如圖所示。在右邊OnDraw()中加入以下陰影部分的代碼,編譯、運(yùn)行結(jié)果如圖所示。voidCMyExpView::OnDraw(CDC*pDC){ CMyExpDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); //TODO:adddrawcodefornativedatahere pDC->Rectangle(10,10,250,60);//顯示一個(gè)矩形框 pDC->TextOut(20,20,"我的VC++的第一個(gè)SDI程序。");//顯示文字}程序說明程序?qū)nDraw()進(jìn)行了擴(kuò)展,使用了CDC類的兩個(gè)成員函數(shù):畫矩形的Rectangle()和文字輸出TextOut()。CDC類中封裝了大量的繪圖和文字輸出方法。文字信息顯示BOOLTextOut(intx,inty,LPCTSTRlpszString);功能:在指定坐標(biāo)(x,y)處顯示字符串lpszString的內(nèi)容,顯示成功返回非0值,否則返回0。說明:坐標(biāo)原點(diǎn)(0,0)在客戶區(qū)左上角,Y軸向下。LPCTSTR為常量字符指針類型,BOOL為邏輯類型,兩者都是Windows的數(shù)據(jù)類型。還有COLORREF、POINT、LPPOINT、LPCRECT等都是WindowsAPI中定義的關(guān)鍵字,通常將它們看作Windows的數(shù)據(jù)類型。畫點(diǎn)COLORREFSetPixel(intx,inty,COLORREFcolor);COLORREFSetPixel(POINTpoint,COLORREFcolor);功能:在指定坐標(biāo)(用參數(shù)x,y或點(diǎn)point給出)處按給定顏色(color)畫點(diǎn),返回值為原來此坐標(biāo)處的顏色。畫線畫線工作需經(jīng)兩步完成:確定線的起始位置。CPointMoveTo(intx,inty);CPointMoveTo(POINTpoint);功能:將繪圖位置移至指定坐標(biāo)處,返回移動(dòng)前的繪圖位置。確定了線的起點(diǎn)后,使用成員函數(shù)LineTo()畫線。BOOLLintTo(intx,inty);//參數(shù)為終點(diǎn)坐標(biāo)BOOLLintTo(POINTpoint);功能:畫線。繪制矩形BOOLRectangle(intx1,inty1,intx2,inty2);BOOLRectangle(LPCRECTlpRect);功能:繪制一個(gè)左上角坐標(biāo)為(x1,y1),右下角坐標(biāo)為(x2,y2)的矩形。繪制橢圓BOOLEllipse(intx1,inty1,intx2,inty2);BOOLEllipse(LPCRECTlpRect);功能:繪制一個(gè)左上角坐標(biāo)為(x1,y1),右下角坐標(biāo)為(x2,y2)的矩形所圍住的橢圓Windows消息處理用戶輸入響應(yīng)是Windows程序必不可少的功能。例如,當(dāng)用戶在窗口中按下鼠標(biāo)左鍵時(shí),Windows系統(tǒng)就會發(fā)送WM_LBUTTONDOWN消息給該窗口,如果程序需要對此消息做出反應(yīng),必然要調(diào)用相應(yīng)的處理函數(shù),如果沒有定義處理函數(shù),則該消息被忽略。編制消息處理函數(shù)有時(shí)又被稱作消息映射或捕獲消息。通過消息映射,消息就和它的處理函數(shù)對應(yīng)起來
消息處理函數(shù)指的是與某個(gè)消息對應(yīng)的函數(shù)。消息處理函數(shù)的執(zhí)行是由其對應(yīng)的消息引發(fā)的,某個(gè)類對象中的消息處理函數(shù)是與這個(gè)類對象能夠得到的一個(gè)消息對應(yīng)的,當(dāng)這個(gè)消息發(fā)生時(shí),這個(gè)函數(shù)就會被執(zhí)行。利用ClassWizard可以管理消息處理函數(shù),ClassWizard是一個(gè)非常強(qiáng)大有用的工具,可以用ClassWizard來創(chuàng)建新類、定義消息處理函數(shù)、覆蓋MFC的虛擬函數(shù),從對話框、表單視圖或記錄視圖的控件中獲取數(shù)據(jù)??梢杂萌N方法來激活ClassWizard對話框:選擇【View】菜單中的【ClassWizard】菜單項(xiàng);直接按下Ctrl+W鍵;在代碼編輯窗口中單擊鼠標(biāo)右鍵(此時(shí),代碼編輯窗口中必須有打開的文件),在彈出菜單中選擇【ClassWizard】菜單項(xiàng)。彈出【MFCClassWizard】對話框在【MFCClassWizard】對話框上面共有五個(gè)選項(xiàng)卡,分別說明如下:【MessageMaps】選項(xiàng)卡用于進(jìn)行消息映射的處理;【MemberVariables】選項(xiàng)卡用于為對話框中的控件所用到的類創(chuàng)建成員變量;【Automation】選項(xiàng)卡幫助用戶管理與OLE自動(dòng)化相聯(lián)系的方法和屬性;【ActiveXEvents】選項(xiàng)卡幫助用戶管理ActiveX類支持的ActiveX事件;【ClassInfo】選項(xiàng)卡顯示類的一般信息,包括定義它的頭文件和源文件、類名以及與之相聯(lián)系的基類。Windows消息消息就是操作系統(tǒng)通知應(yīng)用程序某件事情已經(jīng)發(fā)生的一種方式。例如,當(dāng)用戶移動(dòng)或雙擊鼠標(biāo)、改變窗口大小等,都將向適當(dāng)?shù)拇翱诎l(fā)送消息,一個(gè)窗口可以向另一個(gè)窗口發(fā)送消息。Windows系統(tǒng)中的消息主要有三種類型:標(biāo)準(zhǔn)的Windows消息、控件消息和命令消息標(biāo)準(zhǔn)的Windows消息所有以WM_為前綴的消息都是標(biāo)準(zhǔn)的Windows消息(WM_COMMAND消息除外),如WM_PAINT、WM_QUIT等,這些消息通常含有用于確定如何對消息進(jìn)行處理的一些參數(shù)。標(biāo)準(zhǔn)的Windows消息一般由窗口對象和視圖對象進(jìn)行處理標(biāo)準(zhǔn)的Windows消息可以分為三類,即鍵盤消息、鼠標(biāo)消息和窗口消息鼠標(biāo)消息無論何時(shí)移動(dòng)鼠標(biāo)或操作鼠標(biāo)按鍵,Windows便產(chǎn)生一條或多條消息并將其發(fā)送給位于鼠標(biāo)光標(biāo)下的窗口鍵盤消息鍵盤消息的響應(yīng)函數(shù)是OnKeyDown(),用于處理WM_KEYDOWN消息(按下鍵盤上的按鍵),該函數(shù)的原型為:afx_msgOnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags);窗口消息所有窗口的變化,包括窗口內(nèi)容重繪WM_PAINT,窗口最大化WM_MAXIMIZE,窗口最小化WM_MINIMIZE,窗口重定義大小WM_RESIZE,窗口滾動(dòng)WM_HSCROLL、WM_VSCROLL,窗口定時(shí)WM_TIMER等消息所帶參數(shù)各不相同控件消息控件是一個(gè)小的子窗口,屬于其他窗口(如對話框等),能夠接受操作并象父窗口發(fā)送消息。常見的控件有按鈕、列表框、編輯框、復(fù)合框、滾動(dòng)條等發(fā)送控件消息的控件在VisualC++中使用唯一ID號來進(jìn)行標(biāo)識,使用控件類來操縱控件消息分為兩類:從控件傳給消息,通常這類消息前綴的最后一個(gè)字符為N由系統(tǒng)發(fā)送給控件的消息,這類消息前綴的最后一個(gè)字符為M命令消息命令消息主要包括由用戶界面對象發(fā)送的WM_COMMAND消息,用戶界面對象是指菜單、工具欄、快捷鍵等。它和控件消息的區(qū)別在于:控件消息只能由特定控件向Windows系統(tǒng)傳送,而命令消息是由用戶界面發(fā)送的,它可以被更多的對象處理。在文檔對象、視圖對象、窗體對象、控件對象中都能處理這種消息消息的發(fā)送與接收的基本過程和機(jī)制在Windows中,大部分的消息都是由用戶和應(yīng)用程序的相互作用而產(chǎn)生的。CWinApp類的成員函數(shù)Run()用于處理消息循環(huán),它唯一的功能就是等待消息,并將消息發(fā)送到適當(dāng)?shù)拇翱?。?dāng)消息循環(huán)接收到一條Windows消息時(shí),它首先通過查詢一種內(nèi)部結(jié)構(gòu)來確定消息要發(fā)送的窗口。這種內(nèi)部結(jié)構(gòu)把當(dāng)前所有的窗口映像成其對應(yīng)的窗口類。MFC的基類還能夠檢測這一目標(biāo)類是否在其消息中為這一消息提供了處理函數(shù)入口。如果找到入口,則消息被送往處理函數(shù),結(jié)束消息發(fā)送過程。如果消息無對應(yīng)入口,則對目標(biāo)類進(jìn)行基類消息映射檢測,沿著層次向上查找,直到找到入口函數(shù)為止。文檔/視圖結(jié)構(gòu)文檔/視圖結(jié)構(gòu)大大簡化了多數(shù)應(yīng)用程序的設(shè)計(jì)開發(fā)過程,有如下特點(diǎn)
將對數(shù)據(jù)的操作與數(shù)據(jù)顯示界面分離,放在不同類的對象中處理。這種思路使得程序模塊的劃分更加合理。文檔對象只負(fù)責(zé)數(shù)據(jù)的管理,不涉及用戶界面;視圖只負(fù)責(zé)數(shù)據(jù)輸出和用戶的交互,不考慮數(shù)據(jù)的具體組織結(jié)構(gòu)細(xì)節(jié),并且一個(gè)文檔類可對應(yīng)多個(gè)視圖類。MFC在文檔/視圖結(jié)構(gòu)中提供了許多標(biāo)準(zhǔn)的操作界面,如新建、打開、保存、打印等,還支持打印預(yù)覽、電子郵件發(fā)送等功能(可定制),大大減輕了程序員的工作量。下面兩種情況下不宜采用文檔/視圖結(jié)構(gòu):①不是面向數(shù)據(jù)的應(yīng)用程序或數(shù)據(jù)量很少的應(yīng)用程序,如Windows自帶的磁盤掃描程序、時(shí)鐘程序等工具軟件,以及一些過程控制程序等。②不使用標(biāo)準(zhǔn)窗口界面的程序,如一些游戲軟件等。視圖類視圖類CView是窗口類CWnd類的派生類。視圖類對象完全覆蓋框架窗口的用戶區(qū),沒有自己的邊框。視圖規(guī)定了用戶查看文檔數(shù)據(jù)以及同數(shù)據(jù)交互的方式視圖類的幾個(gè)重要成員函數(shù):GetDocument()成員函數(shù)用于從文檔類中獲取數(shù)據(jù)值OnDraw()成員函數(shù)用于更新視圖OnInitialUpdate()虛成員函數(shù)在應(yīng)用程序啟動(dòng),或用戶從File菜單中選擇了New或者Open選項(xiàng)時(shí)被調(diào)用對視圖類的處理主要集中在以下4點(diǎn)處理視圖類的OnDraw()成員函數(shù),該函數(shù)負(fù)責(zé)顯示文檔數(shù)據(jù)。將Windows消息和用戶界面對象(如菜單項(xiàng)等)與視圖類中的消息處理函數(shù)連接。實(shí)現(xiàn)消息處理函數(shù),以便解釋用戶的輸入。根據(jù)需要,在派生的視圖類中覆蓋CView的其他成員函數(shù)MFC中提供了各種視圖類,這些視圖類可以增強(qiáng)應(yīng)用程序視圖的功能文檔類文檔類的幾個(gè)重要成員函數(shù):OnNewDocument()成員函數(shù)完成對文檔類的數(shù)據(jù)成員的初始化工作DeleteContents()成員函數(shù)完成對文檔的清理工作在使用文檔類管理應(yīng)用程序的數(shù)據(jù)時(shí),必須做以下工作:從CDocument類派生出各種不同類型的文檔類,每種類型對應(yīng)一種文檔。添加用于存儲文檔數(shù)據(jù)的成員變量。如果需要,可以覆蓋CDocument類的其他成員函數(shù)。如覆蓋OnNewDocument()以便初始化文檔的數(shù)據(jù)成員,覆蓋DeleteContents()以便銷毀動(dòng)態(tài)分配的數(shù)據(jù)。在文檔類中覆蓋CDocument類的成員函數(shù)Serialize()。成員函數(shù)Serialize()用于從磁盤讀文檔數(shù)據(jù)或把文檔數(shù)據(jù)存入磁盤中。例:在視圖中顯示鼠標(biāo)單擊位置第1步:建立SDI項(xiàng)目(My),見12.2節(jié)中的第1步到第7步。第2步:修改文檔類的定義,加入一個(gè)CPoint類型的變量(代碼中的陰影部分),記錄鼠標(biāo)當(dāng)前單擊位置。第3步:修改視圖類的OnDraw()函數(shù),加入顯示位置代碼第4步:用ClassWizard建立鼠標(biāo)左鍵按下的消息處理的函數(shù)OnLButtonDown(),并加入以下陰影部分的代碼。第5步:編譯、運(yùn)行。程序開始運(yùn)行時(shí),在窗口中顯示出兩個(gè)很大的數(shù),用鼠標(biāo)左鍵單擊窗口客戶區(qū)任意位置,窗口內(nèi)顯示出當(dāng)前單擊位置的兩個(gè)坐標(biāo)值。例用鍵盤移動(dòng)窗口客戶區(qū)中的一個(gè)氣球(橢圓)第1步:建立SDI項(xiàng)目(Mm),見8.2節(jié)中的第1步到第7步。第2步:修改文檔類的定義,加入一個(gè)CRect類型的變量記錄橢圓的位置(以下陰影部分)。第3步:修改文檔類的OnNewDocument()函數(shù),增加以下陰影部分的代碼,對m_rectBody進(jìn)行初始化。第4步:修改視圖類的OnDraw()函數(shù),加入以下陰影部分的代碼。第5步:用ClassWizard建立鍵盤的消息處理函數(shù)OnKeyDown(),并加入以下陰影部分的代碼。菜單、工具欄菜單是Windows應(yīng)用程序窗口的一個(gè)重要組成部分。在MFC中菜單可以用于SDI(單文檔界面)或MDI(多文檔界面),以及基于對話框的應(yīng)用程序。在基于對話框的應(yīng)用程序中新建、設(shè)計(jì)并編輯菜單后,在該對話框的“屬性”選項(xiàng)卡中,將Menu屬性設(shè)置為該菜單的ID即可。添加/刪除菜單項(xiàng)第1步:建立SDI項(xiàng)目(TestMenu),見12.2節(jié)中的第1步到第7步。第2步:在工程工作區(qū)中單擊資源視圖標(biāo)簽ResourceView,切換到資源視圖。第3步:點(diǎn)擊Menu左邊的+號,展開Menu,可以看到IDR_MAINFRAME,雙擊之,在右邊顯示出IDR_MAINFRAME標(biāo)志的菜單資源第4步:添加菜單項(xiàng)。在要添加的位置上(如“幫助”右邊)擊右鍵,選“Properties”,在“Caption”編輯框中輸入“測試菜單(&C)”,則在菜單欄中出現(xiàn)“測試菜單(&C)”菜單項(xiàng)第5步:添加菜單子項(xiàng)。在“測試菜單(&C)”菜單下面的虛框上擊右鍵,選“Properties”,在“Caption”編輯框中輸入“顯示(&X)”,在“ID”編輯框中輸入“ID_MENUXS”,則在“測試菜單(&C)”菜單下面出現(xiàn)菜單子項(xiàng)“顯示(&X)”第6步:調(diào)整菜單位置。選中要調(diào)整位置的菜單項(xiàng),按住鼠標(biāo)左鍵拖動(dòng)到合適的位置放手即可。若要?jiǎng)h除菜單項(xiàng),選中要?jiǎng)h除的菜單項(xiàng),按Delete鍵即可。第7步:編譯、運(yùn)行,可以看到結(jié)果。但此時(shí)“顯示”菜單子項(xiàng)為灰色,原因是還沒有為其編制消息響應(yīng)函數(shù)。第8步:為菜單子項(xiàng)編制消息響應(yīng)函數(shù)。在“顯示”菜單子項(xiàng)上擊右鍵,選“ClassWizard”,確保【Classname】選“CTestMenuView”,【ObjectIDs】中選中“ID_MENUXS”,【Messages】選中“COMMAND”,單擊右邊的【AddFunction】,為“顯示”菜單子項(xiàng)增加消息響應(yīng)函數(shù)OnMenuxs()第9步:編譯、運(yùn)行,測試結(jié)果對話框與控件
對話框是Windows系統(tǒng)中應(yīng)用程序與用戶交互的重要手段,程序通過對話框獲取用戶的輸入,用戶通過消息框等對話框獲得程序執(zhí)行情況的說明。一般情況下,應(yīng)用程序越復(fù)雜,需要使用的對話框就越多對話框的種類模式對話框和非模式對話框模式對話框壟斷了用戶的輸入,當(dāng)一個(gè)模式對話框打開時(shí)用戶只能與該對話框進(jìn)行交互,其他用戶界面對象均收不到用戶的輸入信息非模式對話框類似普通窗口,不壟斷用戶的輸入。當(dāng)打開非模式對話框后,用戶仍可以與其他窗口對象進(jìn)行交互自定義對話框的設(shè)計(jì)四個(gè)設(shè)計(jì)步驟向項(xiàng)目中添加對話框模板資源。編輯對話框模板資源,加入所需控件。使用ClassWizard創(chuàng)建新的從CDialog類派生的對話框類,加入與各控件相聯(lián)的數(shù)據(jù)成員。使用ClassWizard進(jìn)行消息映射,即將對話框資源的控件與對話框類中的消息處理函數(shù)聯(lián)系起來。程序中使用對話框兩個(gè)步驟在視圖類或框架窗口類的消息響應(yīng)函數(shù)中說明一個(gè)對話框類的對象。調(diào)用CDialog::DoModal()成員函數(shù)。添加一個(gè)版權(quán)說明的對話框,并使用鼠標(biāo)右鍵彈出詳見教材非模式對話框非模式對話框的創(chuàng)建、顯示和管理都要由程序員完成在對話框的創(chuàng)建和刪除過程中,非模式對話框和模式對話框有以下區(qū)別:非模式對話框的模板資源在設(shè)計(jì)時(shí)必須選中Visible屬性(在屬性對話框的MoreStyles頁中設(shè)置),若沒有選中,則必須調(diào)用對話框類的成員函數(shù)ShowWindow()函數(shù);否則對話框不可見,而模式對話框無需設(shè)置此屬性。非模式對話框通過調(diào)用CDialog::Create()函數(shù)來啟動(dòng),而模式對話框使用CDialog::DoModal()函數(shù)來啟動(dòng)。由于Create()函數(shù)不會啟動(dòng)新的消息循環(huán),非模式對話框與應(yīng)用程序共用同一個(gè)消息循環(huán),這樣非模式對話框就不會壟斷用戶的輸入。Create()函數(shù)在顯示了非模式對話框后就立即返回,而DoModal()函數(shù)是在模式對話框被關(guān)閉后才返回的。非模式對話框?qū)ο笫怯胣ew操作符動(dòng)態(tài)創(chuàng)建的,而模式對話框以對象變量的形式出現(xiàn)的。非模式對話框的關(guān)閉是由用戶單擊OK或Cancel按鈕完成的,與模式對話框不同,程序員必須分別重載這兩個(gè)函數(shù),并且在其中調(diào)用CWnd::DestroyWindow()函數(shù)來關(guān)閉對話框。該函數(shù)是用于關(guān)閉窗口。必須有一個(gè)標(biāo)志表明非模式對話框是否打開。應(yīng)用程序根據(jù)該標(biāo)志決定是打開一個(gè)新對話框,還是僅激活原來已經(jīng)打開的對話框。通常可以用擁有者窗口中指向非模式對話框?qū)ο蟮闹羔槪ㄒ驗(yàn)榉悄J綄υ捒驅(qū)ο笫怯胣ew操作符動(dòng)態(tài)創(chuàng)建)作為這個(gè)標(biāo)志,當(dāng)對話框關(guān)閉時(shí)給該指針賦NULL值,表明該對話框?qū)ο笠巡淮嬖诹?。控件VisualC++中可以使用的控件有3類:Windows標(biāo)準(zhǔn)控件,ActiveX控件和其他MFC控件類。Windows標(biāo)準(zhǔn)控件,是由操作系統(tǒng)提供的,MFC中針對每個(gè)控件提供了一個(gè)類來封裝和該控件有關(guān)的低層操作,這些控件類都派生自CWnd類數(shù)據(jù)庫訪問VisualC++6.0擁有ODBC、OLEDB與ADO等多種數(shù)據(jù)庫訪問方式。其中最重要的就是開放式數(shù)據(jù)庫連接(OpenDataBaseConnectivity,ODBC)標(biāo)準(zhǔn)數(shù)據(jù)庫訪問方式。ODBC是微軟公司W(wǎng)OSA(WindowsOpenServiceArchitecture)的組成部分,是微軟公司提出的開放式數(shù)據(jù)庫互聯(lián)的標(biāo)準(zhǔn)接口,用戶可以通過加載連接數(shù)據(jù)庫的驅(qū)動(dòng)程序來建立與各種數(shù)據(jù)庫的連接。利用ODBC,編程時(shí)不需要關(guān)心數(shù)據(jù)庫的類型和它們的存儲格式,可以使應(yīng)用程序直接操作數(shù)據(jù)庫中的數(shù)據(jù),具有數(shù)據(jù)庫的獨(dú)立性。用同樣的ODBC數(shù)據(jù)庫訪問函數(shù)就可以對各種數(shù)據(jù)庫進(jìn)行操作。使用ODBC不僅可以訪問Access、SQLServer、Oracle、Sabase、LotusNotes等數(shù)據(jù)庫
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度油氣儲罐智能控制系統(tǒng)采購合同4篇
- 二零二五年度民政局婚姻登記處協(xié)議離婚書模板版權(quán)授權(quán)合同4篇
- 二零二五年度新型建筑材料運(yùn)輸承包裝卸合同3篇
- 2025年度智能門窗安裝與物聯(lián)網(wǎng)技術(shù)應(yīng)用合同4篇
- 二零二五年度建筑材料進(jìn)出口代理合同6篇
- 2025年度藝術(shù)品儲藏室安全保護(hù)合同4篇
- 2025版牛羊養(yǎng)殖保險(xiǎn)服務(wù)合同匯編2篇
- 二零二五年度出租車司機(jī)服務(wù)評價(jià)與激勵(lì)機(jī)制合同4篇
- 新課改下小學(xué)語文“教、學(xué)、評一體化”高效課堂教學(xué)范式研究
- 二零二五版泥漿外運(yùn)與再生資源利用合同2篇
- 護(hù)理飲食指導(dǎo)整改措施及方案
- 項(xiàng)目工地春節(jié)放假安排及安全措施
- 印染廠安全培訓(xùn)課件
- 紅色主題研學(xué)課程設(shè)計(jì)
- 胸外科手術(shù)圍手術(shù)期處理
- 裝置自動(dòng)控制的先進(jìn)性說明
- 《企業(yè)管理課件:團(tuán)隊(duì)管理知識點(diǎn)詳解PPT》
- 移動(dòng)商務(wù)內(nèi)容運(yùn)營(吳洪貴)任務(wù)二 軟文的寫作
- 英語詞匯教學(xué)中落實(shí)英語學(xué)科核心素養(yǎng)
- 《插畫設(shè)計(jì)》課程標(biāo)準(zhǔn)
- 高中英語名詞性從句講解
評論
0/150
提交評論