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ù)免費閱讀

下載本文檔

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

文檔簡介

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

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

目標

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

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

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

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

ClassWizard不能識別該新類,直到做了下麵這步工作:刪除工程中的.clw檔,並再次調(diào)用ClassWizard。當ClassWizard不能找到它的.clw檔時,它將提問是否想重建它,回答Yes。■DeveloperStudio6.0版本的ClassWizard自動更新它的.clw檔。例子1:初始化應(yīng)用程式螢?zāi)荒繕嗽O(shè)定應(yīng)用程式初始螢?zāi)坏奈恢煤痛笮 2呗?我們有兩種可選方案。首先,創(chuàng)建應(yīng)用程式時在ClassWizard的高級選項中作出適當?shù)倪x擇;然而,如果想改變一個已有的應(yīng)用程式中的選擇,我們將把代碼添加到CMainFrame的PreCreateWindow()中,以控制應(yīng)用程式主窗口的初始位置和大小。步驟1.使用AppWizard1)單擊Advanced按鈕,選擇WindowStyle標籤。選擇一個ThickFrame,允許用戶通過拖動窗口的右下角來重新調(diào)整應(yīng)用程式窗口的大小。選擇Minimized(最小化)或Maximized(最大化),則使窗口初始最小化或最大化。2)如果想在以後改變選擇,則需要直接編輯CMainFrame::PreCreateWindow()函數(shù)。直接 編輯還允許為應(yīng)用程式的初始外觀作某些額外的變化。2.編輯CMainFrame::PreCreateWindow()1)使應(yīng)用程式位於螢?zāi)恢醒?,並只佔據(jù)螢?zāi)坏?0%,可以使用下麵的代碼: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)用程式的標題欄中刪除文檔標題,則把下麵的代碼添加到PreCreateWindow()中。

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

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

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

pMainFrame->ShowWindow(SW_SHOWMAXIMIZED);//orSW_SHOWMINIMIZED pMainFrame->UpdateWindow();6)如果想在一個MDI應(yīng)用程式中初始最大化一個子窗口,則把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è)置一個初始大小。當用戶單擊應(yīng)用程式的恢復(fù)按鈕時,應(yīng)用程式窗口能夠迅速縮小到在PreCreateWindow()中設(shè)定的大小。■把應(yīng)用程式窗口的初始大小設(shè)置為固定,並且位置也固定。用戶作用於窗口大小或位置的變化都不作保存,保存窗口的大小和位置參見下一個例子。然而,如果使用下一個例子,仍然應(yīng)該會使用本例。應(yīng)用程式第一次在系統(tǒng)上運行時,它沒有任何保存的設(shè)置值,因此,它需要使用這些初始設(shè)置值?!鋈绻辉O(shè)置窗口的初始大小和位置,Windows操作系統(tǒng)將根據(jù)級聯(lián)(Cascading)演算法選擇一個。每個新的應(yīng)用程式的窗口被建立在右邊,並在最後一個應(yīng)用程式的底下。例子2保存應(yīng)用程式螢?zāi)荒繕?保存應(yīng)用程式螢?zāi)坏拇笮?、位置和狀態(tài),包括每個工具欄或?qū)υ挆l的位置和大小,以便應(yīng)用程式在下一次運行時能恢復(fù)它們。策略 當應(yīng)用程式關(guān)閉時,不僅保存主窗口的大小和位置,而且還把工具欄和狀態(tài)欄的狀態(tài)保存到系統(tǒng)的一個註冊區(qū)。因此,當應(yīng)用程式被再次打開時,我們將檢索這些消息,並恢復(fù)窗口和工具欄等等。步驟1.保存設(shè)置值1)在系統(tǒng)註冊區(qū)中定義一個位置,在該位置用一個全局包含檔保存這些資訊。 “Company”是“公司”名。

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

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論