MFC應(yīng)用程序基礎(chǔ)課件_第1頁
MFC應(yīng)用程序基礎(chǔ)課件_第2頁
MFC應(yīng)用程序基礎(chǔ)課件_第3頁
MFC應(yīng)用程序基礎(chǔ)課件_第4頁
MFC應(yīng)用程序基礎(chǔ)課件_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

MFC應(yīng)用程序基礎(chǔ)目標(biāo)使用VisualC++、MFC庫和DeveloperStudio的向?qū)Ш途庉嬈鲃?chuàng)建應(yīng)用程序。AppWizardClassWizardMFC應(yīng)用程序框架詳解1.AppWizard應(yīng)用程序與環(huán)境這部分的例子包括用MFC規(guī)劃應(yīng)用程序的執(zhí)行,既用應(yīng)用程序向?qū)?,也用?qiáng)制手段;包括應(yīng)用程序與環(huán)境交互的大部分公共問題,如初始化屏幕、顯示圖標(biāo)、處理命令行選項(xiàng)及保存優(yōu)先選項(xiàng)。菜單 下一個(gè)關(guān)注的內(nèi)容是應(yīng)用程序的菜單,即添加命令、更新狀態(tài)、嘗試修改外觀。也包括了怎樣用ClassWizard(類向?qū)?在應(yīng)用程序類添加菜單命令。工具欄和狀態(tài)欄 這部分的例子討論用DeveloperStudio的編輯器創(chuàng)建工具欄和狀態(tài)欄。例子包括更新兩種類型控制條的控件,以反映應(yīng)用程序狀態(tài)變化,以及給任何一種控制條添加非標(biāo)準(zhǔn)控件。視圖 如果選擇創(chuàng)建一個(gè)單文檔界面或多文檔界面應(yīng)用程序,則應(yīng)用程序的視圖將是用戶與應(yīng)用程序交互的主要模式。創(chuàng)建的應(yīng)用程序類型決定了要?jiǎng)?chuàng)建的視圖的類型。視圖的其他方面包括分割視圖和有條件改變鼠標(biāo)形狀等。1.AppWizard…對(duì)話框和對(duì)話條 對(duì)話框和對(duì)話條是與應(yīng)用程序進(jìn)行交互的第二種模式,它們可以是有模式或無模式的,可以全部由你自己建立,也可以定制一個(gè)系統(tǒng)提供的對(duì)話框。控件窗口 按鈕和編輯框一般出現(xiàn)在對(duì)話框中,它們通常叫做控件窗口(由操作系統(tǒng)提供的子窗口)。不僅可以把它們放進(jìn)對(duì)話框,而且還可以把它們放進(jìn)視圖、對(duì)話條或任何有窗口的地方。繪圖 這部分包括從繪圖和文本到操縱位圖。用AppWizard創(chuàng)建一個(gè)MFC應(yīng)用程序步驟1)單擊DeveloperStudio的File(文件)菜單中的New(新建)命令,以顯示New對(duì)話框,選擇MFC(AppWizard(exe)),然后輸入需要?jiǎng)?chuàng)建工程的名稱和目錄。注意,幾乎在所有的工程文件的內(nèi)部和外部都使用該名字,因此,此處的任何錯(cuò)誤在以后都是很難改正的。指定應(yīng)用程序的文件名和位置EnterprojectnameanddirectoryPickMFCAppWizard(exe)2)AppWizard的第一步是選擇應(yīng)用程序的類型,該例子的其余部分假定已選定了一個(gè)單文檔界面或多文檔界面應(yīng)用程序。選擇應(yīng)用程序類型PicktheapplicationtypePickthelanguagestyle3)AppWizard的第二步要求指定應(yīng)用程序所需要的數(shù)據(jù)庫支持種類。選擇HeaderFilesOnly(只有頭文件)使AppWizard只添加支持?jǐn)?shù)據(jù)庫訪問的MFC類。選擇DatabaseViewwtihoutFileSupport(數(shù)據(jù)庫視圖,沒有文件支持)或者DatabaseViewWithFileSupport(數(shù)據(jù)庫支持,具有文件支持)使AppWizard創(chuàng)建一個(gè)具有特殊的視圖和文檔類的簡(jiǎn)單的數(shù)據(jù)庫編輯器。如果選擇DatabaseViewwithoutFile Support,AppWizard將不添加標(biāo)準(zhǔn)文件打開命令到應(yīng)用程序菜單(即:File/New,File/Open等)。從理論上講,如果只訪問一個(gè)數(shù)據(jù)庫,無論如何也不需這些命令—當(dāng)應(yīng)用程序開始運(yùn)行時(shí),合適的數(shù)據(jù)庫將被自動(dòng)打開。然而,如果應(yīng)用程序既要訪問平面文件,又要訪問數(shù)據(jù)庫文件,則應(yīng)該選擇DatabaseViewwithFileSupport。Pickdatabasesupportanddatasource4)AppWizard的第三步要求指定應(yīng)用程序所需要的COM支持。OpenadvancedapplicationoptionsPicksimpleapplicationoptions5)AppWizard的第四步要求選擇一些基本的應(yīng)用程序選項(xiàng),可以選擇應(yīng)用程序是否有一個(gè)工具欄或狀態(tài),是否添加打印命令到菜單,以及是否包括支持e-mail或網(wǎng)絡(luò)通信。RecentFilelist(當(dāng)前文件列表)是應(yīng)用程序打開的最近幾個(gè)文件的一個(gè)列表,它由應(yīng)用程序自動(dòng)維護(hù),用戶必須決定這里的n是多少。單擊Advanced(高級(jí))按鈕進(jìn)行更高級(jí)的選項(xiàng)設(shè)置。選擇應(yīng)用程序選項(xiàng)6)高級(jí)選項(xiàng)的第一頁要選擇將在應(yīng)用程序標(biāo)題欄中顯示的標(biāo)題。如果創(chuàng)建一個(gè)串行化它的文檔到磁盤的應(yīng)用程序,則可以選擇應(yīng)用程序追加給那些文件的文件擴(kuò)展名,然后就可以在打開或保存文檔時(shí)顯示的文件對(duì)話框的過濾域中編輯文本。Enterthethreeletterextensionofthedocumentscreatedbyyourapplication.TheneditthefilternamethatwillappearintheFileDialog.指定應(yīng)用程序標(biāo)題、缺省文件擴(kuò)展名和文件對(duì)話文本7)高級(jí)選項(xiàng)的第二頁要求在應(yīng)用程序中添加視圖分割(Splitting)能力,它將提供允許動(dòng)態(tài)分割他們的視圖的一個(gè)菜單命令。也可以決定是否要求應(yīng)用程序主窗口或子窗口初始最大化或初始最小化,以及用戶是否能夠重調(diào)它們的大小。EnteradvancedapplicationOptions指定應(yīng)用程序的框架窗口選項(xiàng)8)在AppWizard的第五步,必須決定是用MFC庫靜態(tài)鏈接,還是用一個(gè)共享的MFCDLL進(jìn)行鏈接。靜態(tài)鏈接MFC庫使應(yīng)用程序相當(dāng)龐大,但用戶從來不必考慮正確版本的

MFCDLL當(dāng)前是否已經(jīng)安裝在系統(tǒng)上。如果計(jì)劃用MFC庫創(chuàng)建自己的DLL,則必須鏈接MFCDLL。ChoosetostaticallylinkwithMFCorshareitsDLLwithotherapplications9)AppWizard的最后一步,允許改變應(yīng)用程序的視圖類。關(guān)于選項(xiàng)的描述。參見上個(gè)例子。對(duì)于沒有列出的任何視圖類,選擇缺省視圖類—可以在以后編輯名字。Pickviewclassfile…Optionallychooseadifferentviewclass選擇一個(gè)視圖類10)現(xiàn)在,AppWizard將繼續(xù)建立應(yīng)用程序的所有類,這些類是創(chuàng)建一個(gè)完全可以執(zhí)行應(yīng)用程序(雖然特征貧乏)所必須的。只要單擊DeveloperStudio的Build/BuildAll菜單命令,便可以建立執(zhí)行文件。2、ClassWizard

目標(biāo)

把一個(gè)類添加到MFC應(yīng)用程序,該類既可以擴(kuò)展一個(gè)MFC類,也可以獨(dú)立存在。步驟1.擴(kuò)展一個(gè)已存在的MFC類

1)單擊DeveloperStudio的View/ClassWizard菜單命令,打開MFCClassWizard對(duì)話框,然后單擊AddClass(添加類)按鈕,將出現(xiàn)一個(gè)下拉菜單,從中應(yīng)選擇New?以打開NewClass(新類)對(duì)話框。Clickon“addclass“button.用ClassWizard創(chuàng)建一個(gè)新類2)輸入新類的名字,在新類的名字前面添加一個(gè)“C”(當(dāng)創(chuàng)建類的.h和.cpp文件時(shí),ClassWizard將刪除這個(gè)“C”),然后從可用的MFC類列表中選擇一個(gè)基類。如果選擇CRecordSet,ClassWizard還將引導(dǎo)用戶通過捆綁一個(gè)數(shù)據(jù)庫表到新類所必須的步驟。要從CWnd類派生,可以選擇“genericCWnd”;要派生CSplitterWnd,選擇“splitter”。如果想派生的MFC類沒有列出(諸如用CToolBar),則選擇一個(gè)類似的名字(如CToolBarCtrl),然后編輯由此產(chǎn)生的文件。TypeinnewclassPickbaseclass2.創(chuàng)建一個(gè)非MFC類 如果不想用一個(gè)MFC類作為基類,則單擊環(huán)境的Insert/NewClass菜單命令,以打開一個(gè)選擇性的NewClass對(duì)話框。這一選擇性版增加了用以指定ClassType的組合框。選擇GenericType要求指定自己的基類(如果有的話)。3.從ClassWizard刪除一個(gè)類

1)首先,必須從文件的工程列表和工程的子目錄中刪除ClassWizard創(chuàng)建的.cpp和.h文件。

2)你也許會(huì)認(rèn)為那就是所有必須做的了,但是并非如此,下一次應(yīng)用ClassWizard時(shí),誤拼的類象一個(gè)幽靈一樣仍然在那里,ClassWizard對(duì)每一個(gè)在各自的.clw文件中創(chuàng)建的類保持一個(gè)記錄。不過只要?jiǎng)h除.clw文件,下次調(diào)用ClassWizard時(shí),它就會(huì)告訴你沒有找到.clw文件并提問是否想創(chuàng)建一個(gè)新的,回答Yes,則ClassWizard將用工程目錄中的.h文件建立一個(gè)新的.clw文件。說明■從其他工程中插入一個(gè)類,只要從那個(gè)工程目錄中直接拷貝相應(yīng)的文件即可。

ClassWizard不能識(shí)別該新類,直到做了下面這步工作:刪除工程中的.clw文件,并再次調(diào)用ClassWizard。當(dāng)ClassWizard不能找到它的.clw文件時(shí),它將提問是否想重建它,回答Yes?!鯠eveloperStudio6.0版本的ClassWizard自動(dòng)更新它的.clw文件。例子1:初始化應(yīng)用程序屏幕目標(biāo)設(shè)定應(yīng)用程序初始屏幕的位置和大小。策略 我們有兩種可選方案。首先,創(chuàng)建應(yīng)用程序時(shí)在ClassWizard的高級(jí)選項(xiàng)中作出適當(dāng)?shù)倪x擇;然而,如果想改變一個(gè)已有的應(yīng)用程序中的選擇,我們將把代碼添加到CMainFrame的PreCreateWindow()中,以控制應(yīng)用程序主窗口的初始位置和大小。步驟1.使用AppWizard1)單擊Advanced按鈕,選擇WindowStyle標(biāo)簽。選擇一個(gè)ThickFrame,允許用戶通過拖動(dòng)窗口的右下角來重新調(diào)整應(yīng)用程序窗口的大小。選擇Minimized(最小化)或Maximized(最大化),則使窗口初始最小化或最大化。2)如果想在以后改變選擇,則需要直接編輯CMainFrame::PreCreateWindow()函數(shù)。直接 編輯還允許為應(yīng)用程序的初始外觀作某些額外的變化。2.編輯CMainFrame::PreCreateWindow()1)使應(yīng)用程序位于屏幕中央,并只占據(jù)屏幕的90%,可以使用下面的代碼:BOOLCMainFrame::PreCreateWindow(CREATESTRUCT&cs){//centerwindowat90%offullscreenint

xSize=::GetSystemMetrics(SM_CXSCREEN);int

ySize=::GetSystemMetrics(SM_CYSCREEN);cs.cx=xSize*9/10;cs.cy=ySize*9/10;cs.x=(xSize-cs.cx)/2;cs.y=(ySize-cs.cy)/2;returnCMDIFrameWnd::PreCreateWindow(cs);}2)如果還想從應(yīng)用程序的標(biāo)題欄中刪除文檔標(biāo)題,則把下面的代碼添加到PreCreateWindow()中。

cs.style&=~FWS_ADDTOTITLE;3)如果還想從應(yīng)用程序標(biāo)題欄中去掉最小化和最大化按鈕,則添加:

cs.style&=~(WS_MAXIMIZEBOX|WS_MINIMIZEBOX);4)如果想使應(yīng)用程序的大小固定,以致拖動(dòng)窗口的右下角時(shí)沒有反映,那么添加:

cs.style&=~WS_THICKFRAME;5)如果想應(yīng)用程序在開始執(zhí)行時(shí)被最大化,那么找到應(yīng)用程序類中的ShowWindow(),并改變它,令它使用SW_SHOWMAXIMIZED標(biāo)志而不用m_nCmdShow。

pMainFrame->ShowWindow(SW_SHOWMAXIMIZED);//orSW_SHOWMINIMIZED pMainFrame->UpdateWindow();6)如果想在一個(gè)MDI應(yīng)用程序中初始最大化一個(gè)子窗口,則把PreCreateWindow()添加到CChildFrame類中,并給它添加如下代碼:

BOOLCChildFrame::PreCreateWindow(CREATESTRUCT&cs) {

cs.style=WS_CHILD|WS_VISIBLE|WS_OVERLAPPED| WS_CAPTION|WS_SYSMENU|FWS_ADDTOTITLE| WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX| WS_MAXIMIZE; returnCMDIChildWnd::PreCreateWindow(cs);}說明■如果初始最大化應(yīng)用程序的窗口,還應(yīng)該在CMainFrame::PreCreateWindow()中為它設(shè)置一個(gè)初始大小。當(dāng)用戶單擊應(yīng)用程序的恢復(fù)按鈕時(shí),應(yīng)用程序窗口能夠迅速縮小到在PreCreateWindow()中設(shè)定的大小?!霭褢?yīng)用程序窗口的初始大小設(shè)置為固定,并且位置也固定。用戶作用于窗口大小或位置的變化都不作保存,保存窗口的大小和位置參見下一個(gè)例子。然而,如果使用下一個(gè)例子,仍然應(yīng)該會(huì)使用本例。應(yīng)用程序第一次在系統(tǒng)上運(yùn)行時(shí),它沒有任何保存的設(shè)置值,因此,它需要使用這些初始設(shè)置值?!鋈绻辉O(shè)置窗口的初始大小和位置,Windows操作系統(tǒng)將根據(jù)級(jí)聯(lián)(Cascading)算法選擇一個(gè)。每個(gè)新的應(yīng)用程序的窗口被建立在右邊,并在最后一個(gè)應(yīng)用程序的底下。例子2保存應(yīng)用程序屏幕目標(biāo) 保存應(yīng)用程序屏幕的大小、位置和狀態(tài),包括每個(gè)工具欄或?qū)υ挆l的位置和大小,以便應(yīng)用程序在下一次運(yùn)行時(shí)能恢復(fù)它們。策略 當(dāng)應(yīng)用程序關(guān)閉時(shí),不僅保存主窗口的大小和位置,而且還把工具欄和狀態(tài)欄的狀態(tài)保存到系統(tǒng)的一個(gè)注冊(cè)區(qū)。因此,當(dāng)應(yīng)用程序被再次打開時(shí),我們將檢索這些消息,并恢復(fù)窗口和工具欄等等。步驟1.保存設(shè)置值1)在系統(tǒng)注冊(cè)區(qū)中定義一個(gè)位置,在該位置用一個(gè)全局包含文件保存這些信息。 “Company”是“公司”名。

#defineCOMPANY_KEY"Company" #defineSETTINGS_KEY"Settings" #defineWINDOWPLACEMENT_KEY"WindowPlacement"2)在應(yīng)用程序類的InitInstance()成員函數(shù)中,把COMPANY_KEY添加到SetRegistryKey()中。SetRegistryKey(COMPANY_KEY);3)用ClassWizard把一個(gè)WM_CLOSE消息處理函數(shù)添加到CMainFrame類中,用SaveBarState()可以保存條的位置和大小。用GetWindowPlacement()可以得到應(yīng)用程序的當(dāng) 前大小和位置,用WritePr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論