資源描述:
《輕松學(xué)visual c++之多文檔應(yīng)用程序》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第9章多文檔應(yīng)用程序在MFC的定義中,多文檔界面(MDI)表示可以“同時”開啟一份以上的Documents。這些Documents可以是相同類型,也可以是不同類型?;诙辔臋n的應(yīng)用程序和單文檔應(yīng)用程序有很多的相似性,它只是具有多個文檔和視圖對象。本章將簡要介紹多文檔程序的結(jié)構(gòu)、拆分窗口、視圖同步更新以及保存文檔數(shù)據(jù)等內(nèi)容。9.1MDI程序結(jié)構(gòu)Windows應(yīng)用程序中有很多都支持多文檔視圖結(jié)構(gòu)。例如,VC++6.0就采用多文檔架構(gòu),還有文檔編輯器Word等。這一節(jié)我們將從多文檔結(jié)構(gòu)方面入手講解一下多文檔模板。我們先創(chuàng)
2、建一個多文檔應(yīng)用程序,該程序不需要添加任何多余代碼。我們基于該程序來對多文檔的結(jié)構(gòu)進行簡要介紹。9.1MDI程序結(jié)構(gòu)1.文檔類如果應(yīng)用程序功能比較復(fù)雜的話,就需要具有多視圖的能力,一般要使用多個文檔來組織信息。當(dāng)需要在單個應(yīng)用程序中使用多個文檔時,就需要采用多文檔界面的模型。在單文檔應(yīng)用程序中,使用模板類CSingleDocTemplate來創(chuàng)建單文檔應(yīng)用程序。在多文檔應(yīng)用程序中使用多文檔模版類CMultiDocTemplate類創(chuàng)建。9.1MDI程序結(jié)構(gòu)2.多視圖MFC支持單個文檔多個視圖的模式。如果程序需要,可
3、以為單個文檔支持任意多的視圖。MFC支持三種常用的用戶界面。應(yīng)用程序允許同一類的對象顯示在單獨的多文檔框架子窗口中。應(yīng)用程序允許用戶在同一文檔框架窗口中查看同一類的對象。應(yīng)用程序使用拆分窗口,把單文檔窗口的視圖空間拆分成多個單獨的文檔視圖。9.1MDI程序結(jié)構(gòu)3.框架類多文檔應(yīng)用程序的主框架類CMainFrame派生于CMDIFrameWnd。CMDIFrameWnd類提供了Windows多文檔界面框架以及成員函數(shù)用來管理窗口。9.2拆分窗口MDI程序的標(biāo)準(zhǔn)功能是允許在同一份Document開啟一個以上的Views
4、。我們可以用多個視圖窗口查看一份數(shù)據(jù)或多份數(shù)據(jù)。當(dāng)我們用多個視圖窗口查看一份數(shù)據(jù)時,它們的觀看區(qū)可能互相重疊。而拆分窗口實現(xiàn)了將這些隸屬于同一Document的Views能夠結(jié)合在一個大窗口之內(nèi)。本節(jié)將以兩種方法來實現(xiàn)拆分窗口。9.2.1手動實現(xiàn)拆分窗口上面,我們已經(jīng)介紹拆分窗口的概念。下面,我們以例子的形式介紹怎樣利用CSplitterWnd類中的方法來實現(xiàn)窗口的拆分。我們接著上面創(chuàng)建好的Multiple程序來講解。9.2.2利用向?qū)崿F(xiàn)拆分窗口AppWizard支持動態(tài)拆分窗口。只需在第四步單擊Advanced
5、,在彈出的對話框中選擇WindowsStyles選項卡選中Usesplitwindow選項即可。9.3接收鍵盤信息并存檔這一節(jié),我們將編寫一個多文檔程序。實現(xiàn)接收鍵盤信息,并實現(xiàn)保存數(shù)據(jù)功能。通過這個小例子來了解多文檔視圖的同步更新,以及文檔的數(shù)據(jù)保存。9.3.1接收鍵盤信息本小節(jié),我們將在多文檔中實現(xiàn)實時接收鍵盤按鍵消息,并在各個拆分窗口中同步顯示出來。具體的操作步驟如下。9.3.2數(shù)據(jù)存檔上一小節(jié)我們實現(xiàn)了在多文檔視圖窗口中顯示接收到的鍵盤消息。這一小節(jié)我們來實現(xiàn)怎樣將輸入的信息進行存檔,并同時能打開。實現(xiàn)方法
6、非常簡單,只需在文檔類的成員方法CTextDoc::Serialize()中添加如下兩行代碼即可。9.4小結(jié)本章簡要講解了多文檔程序的結(jié)構(gòu)、拆分窗口、視圖同步更新以及保存文檔數(shù)據(jù)等內(nèi)容。這些內(nèi)容也是本章的重點,也是編寫多文檔程序的基礎(chǔ)。其中保存文檔數(shù)據(jù)所用的Serialize()函數(shù)非常巧妙,是MFC的經(jīng)典之作,我們在以后還會繼續(xù)探討。