用AddView和DeleteView實現多視

2021-04-02 21:48:42 字數 1932 閱讀 8355

下面是關於cdocument::addview和cdocument::removeview的簡單介紹,具體請參見聯機文件:

void cdocument::addview( cview* pview );
---- 為當前cdocument類例項加入新的檢視。其中引數pview是指向新檢視的指標。

void cdocument::removeview ( cview* pview );
---- 從當前的cdocument類例項中移去乙個檢視。其中引數pview是指向要移去的檢視的指標,注意必須在該檢視不可見的情況下才能移去,否則會產生異常。

---- 通過這兩個函式,我們可以方便的實現增加和移去檢視。

---- 下面是實現的乙個例項:

---- 本例項實現一文件兩檢視的功能。檢視一由cview派生,用來顯示文件中的資料,而檢視二由ceditview派生,用來對文件中的資料進行編輯。用「檢視」選單中的檢視

一、檢視二來選擇檢視。關於如何實現加入新的檢視類和選單請參考其他資料。

---- 下面為主視窗類新增資料成員和訊息處理函式:

cdemoview *m_pview1;    //指向檢視一的指標,cdemoview由應用嚮導生成
cmyeditview *m_pview2;//指向檢視二的指標,cmyeditview派生於
ceditviewint m_nwhichview;//指示當前為哪乙個檢視,並初始化為0
---- 以下是選單選擇檢視二的處理函式:

void cmainframe::onview2()
   else     if(m_nwhichview==0)
m_nwhichview=1;}
---- 以下是選單選擇檢視一的處理函式:

if(m_nwhichview==1)
---- 然後為文件類cdemodoc 新增成員資料 cstring m_hello,用於檢視一的顯示資料和檢視二的編輯資料。 

---- 最後分別加入檢視一和檢視二的處理函式。

---- 在檢視一中加入ondraw處理函式用於顯示資料,如下:

void cdemoview::ondraw(cdc* pdc)
---- 在檢視二中加入用於相應資料改變的處理函式: 

void cmyeditview::onchange() 
---- 注意:編譯前在mainfrm.cpp中加入demoview.h 和myeditview.h 和 demodoc.h三個標頭檔案。於是大功告成,可以進行編譯測試了。

---- 總結:使用mdi和csplitter來實現多視,無非是隱含的使用addview來實現一文件多視,而這裡,筆者直接使用了addview來實現多視。當然,朋友們可能會問,上面這個演示程式,為什麼只能在各個檢視中切換,而不能同時將其顯示在主視窗的客戶區。其實,同時顯示在客戶區是可能的,筆者經過多次試驗,發現兩個檢視完全可以顯示在同一主視窗的客戶區內,不過檢視類視窗不是普通的視窗,沒有標題、系統控制選單和放大縮小按鈕,因此它缺少一些普通視窗的屬性,如不採用特殊手段不能用滑鼠拖動和進行放大縮小操作。當然這可以通過一些api函式來實現,但這可能會太過麻煩。

---- 細心的朋友可能會注意到mdi的每乙個檢視其實是被放置在cmdichildwnd 類派生的主幀視窗的客戶區,由此來獲得普通視窗的各種特性,使得各個檢視視窗在同一主視窗下共存,這也是用mdi實現一文件多視的方法。不過,我們完全可以變通一下,自己建立主幀視窗,並在建立檢視時將其父視窗指標指向該主幀視窗,從而獲得同用mdi實現多視相同的效果,不過這可能會略顯複雜。而分隔器視窗也僅僅為顯示檢視視窗以及為各個檢視視窗的重新定位提供了機制,我們也可以不用分隔器視窗而通過過載主視窗的recalclayout來實現檢視視窗的重新定位,限於篇幅,這裡不再作介紹。有興趣的朋友可以研究一下cmdichildwnd和csplitterwnd實現的mfc源程式。

delete和delete 的區別

剛才在寫一段例子程式的時候,發現對於乙個指標型別的陣列t p,delete p和delete p的效果一樣。看了一下c primer和c programming language都沒有找到解釋,於是在網路上搜尋一下,發現了很好的解釋。整理一下 c 告訴我們在 用 new 分配的單個物件的記憶體空間的...

delete和delete 的區別

c 告訴我們在 用 new 分配的單個物件的記憶體空間的時候用 delete,用 new 分配的一組物件的記憶體空間的時候用 delete。樓主的這個問題提得很好。很多人注意到了這個問題,但是卻不清楚為什麼要這樣做,不這樣做行不行。關於 new 和 delete,其中又分為兩種情況 1 為基本資料型...

關於delete 和 delete 二

3.下面我們來看看上面提到的4位元組是幹什麼用的。int main 執行結果 adress after malloc 0x804a008 size 104 a a adress after new 0x804a00c number of a at 0x804a008 100 size of a at...