說明:第一次發表部落格,全當為自己學習做個記錄,將自己的學習新東西和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類定義物...