單文件mfc視窗分割

2021-08-09 20:50:43 字數 2677 閱讀 1173

說明:第一次發表部落格,全當為自己學習做個記錄,將自己的學習新東西和bug整理記錄,方便自己日後的學習。內容有借鑑別人的地方,結尾均附上別人的鏈結。

1、新建單文件專案,生成如下幾個類

2、在mainfrm。h檔案中新增如下**

csplitterwnd m_splitwnd1;  

csplitterwnd m_splitwnd2;

3、插入對話方塊cformview對話方塊,新增類csplitwnd_r,基類選擇cformview;

在mainfrm中包含標頭檔案:

#include "csplitwnd_r.h"   //右邊插入的子視窗的類h檔案

#include "ex1doc.h" //單文件專案生成的「***doc.h"和」***view.h"

#include "ex1view.h"

4、mainfrm中過載oncreatclient函式,可以在mainfrm類屬性中新增,也可以在類嚮導中新增虛函式新增。

(由於第一次嘗試的時候在if的判斷條件中少打了乙個「!」,導致執行後總是彈出「建立文件失敗"的提示。)

bool cmainframe::oncreateclient(lpcreatestruct lpcs, ccreatecontext* pcontext)

if(!m_splitwnd1.createview(0, 0, runtime_class(cex1view),csize(clirect.width()/2, clirect.height()), pcontext))

return false;

if(!m_splitwnd1.createview(0,1,runtime_class(csplitwnd_r),csize(clirect.width()/2,clirect.height()),pcontext))

return false;

return true;

//return cframewndex::oncreateclient(lpcs, pcontext);

}

5、執行後介面效果圖如下,視窗被分割為一行兩列

6、注意

在第4步中,必須為每乙個子視窗都關聯子類,否則會報錯

此時我們注意到生成視窗左上角標題顯示「無標題」,怎麼更改?

只需要在mainfrm中找到precreatwindow,新增標題;

//改變標題

cs.style &=~fws_addtotitle;

cs.lpszname="分割視窗";

7、繼續分割右邊分割好的視窗

再次分割子視窗,就需要用到第二個分割條物件csplitterwnd   m_splitwnd2;

然後在cmainfrm.cpp中的oncreatclient中新增**。

(第乙個分割條把視窗分為一行兩列,為左邊子視窗關聯類後,繼續為右邊子視窗進行分割,然後再為兩個子視窗分別關聯類) 其中

m_splitwnd2.createstatic(&m_splitwnd1, 2, 1, ws_visible|ws_child, m_splitwnd1.idfromrowcol(0,1))的

第乙個引數為上乙個分割物件位址,後邊是把子視窗要分割行數和列數,最後乙個引數是選擇上一次分割得到的子視窗。

bool cmainframe::oncreateclient(lpcreatestruct lpcs, ccreatecontext* pcontext)

if(!m_splitwnd1.createview(0, 0, runtime_class(cex1view),csize(clirect.width()/2, clirect.height()), pcontext))

return false;

//if(!m_splitwnd1.createview(0,1,runtime_class(csplitwnd_r),csize(clirect.width()/2,clirect.height()),pcontext))

// return false;

if (!m_splitwnd2.createstatic(&m_splitwnd1, 2, 1, ws_visible|ws_child, m_splitwnd1.idfromrowcol(0,1)))

if(!m_splitwnd2.createview(0, 0, runtime_class(cex1view),csize(clirect.width()/2, clirect.height()/2), pcontext))

return false;

if(!m_splitwnd2.createview(1, 0, runtime_class(csplitwnd_r),csize(clirect.width()/2, clirect.height()/2), pcontext))

return false;

m_splitwnd2.setactivepane(1, 0);//用分割條選擇乙個分割好的視窗設定選中狀態

return true;

//return cframewndex::oncreateclient(lpcs, pcontext);

}

為每乙個子視窗都繫結乙個子類,能夠避免一些意外問題的發生

8、參考部落格

MFC單文件分割視窗

建立單文件程式 新建兩個對話方塊,用於分割視窗,對話方塊的style屬性改為child,border屬性改為none,最開始沒有改這個,程式執行的時候報錯了。將兩個對話方塊生成從cformview派生的類。在cmainframe中新增兩個成員變數,型別為csplitterwnd,如下所示 cspli...

MFC基於單文件分割視窗

建立乙個mfc單文件應用程式命名為test 開啟資源管理器dialog,右擊滑鼠,插入兩個對話方塊選擇基於cformview類 屬性style改為child,broad改為none 在對話方塊中插入類,分別命名為cdialogdata,cdialoga.開啟類檢視,右擊cmainfrm類,選擇屬性,...

MFC 單文件 拆分視窗

自定義兩個類cusertreeview 繼承於ctreeview,顯示使用者資訊 cmediclistview 繼承於clistview,顯示藥品資訊 類檢視中,選中頂層資料夾 右擊 新增類 mfc 在框架類中做處理,使用csplitterwnd類實現拆分功能,h中 csplitterwnd類定義物...