1.定義csplitterwnd型別變數
在mainfrm.h檔案中加入如下**:
protected:
csplitterwnd m_wndsplitter;
定義splitter變數用於分割客戶區視窗,本例中將客戶區分割為兩列一行。
2.構建分割後各分割槽的檢視
本例中構建乙個ctreeview檢視和cformview檢視
(1)insert->new class..構建base class為ctreeview檔名稱為mytreeview的樹檢視;
(2)在資源檢視中新增對話方塊資源,右擊->properties->style:child,border:none。右擊->classwizard...建立類名為:cmyformview,base class:cformview的檢視。
需要注意的是,基於ctreeview和cformview的檢視類嚮導自動新增了兩個允許檢視執行時建立的兩個巨集:declare_dyncreate(cmytreeview)和implement_dyncreate(cmytreeview, ctreeview),前者一般宣告在標頭檔案建構函式下方,後者宣告在原始檔建構函式實現**上方。如若使得繼承與cdialog類的對話方塊資源也可以執行時建立,就需要在類檔案中分別新增這兩個巨集。
3.構建分割檢視
在mainfrm.cpp檔案中的oncreateclient()函式中新增如下構建分割檢視的**:
m_wndsplitter.createstatic(this,1,2);
m_wndsplitter.createview(0,0,runtime_class(cmytreeview),csize(200,100),pcontext);
m_wndsplitter.createview(0,1,runtime_class(cmyformview),csize(100,100),pcontext);
runtime_class即執行執行時建立。
4.分別為treeviw和formview新增初始化及使用者所需**
對於formview由於對應的是對話方塊資源,其相關操作與對話方塊操作類似。下面主要分析treeview。
.cpp檔案中初始化**:
void cmytreeview::oninitialupdate()
5.兩檢視間互動操作
互動主要是資料的互動,有兩種解決方式:一種是以document為中間媒介,資料都有document進行管理,方便實現資料互動;二是通過mainfrm中定義的csplitterwnd變數在本檢視中獲取另一檢視的指標,並作強制型別轉換成其對應檢視變數後,訪問檢視中的資料。本例採用第二種方式。
void cmytreeview::onmousemove(uint nflags, cpoint point)
6.編譯執行結果
如圖:
設定視窗客戶區大小的方法
話說,windows sdk貌似並沒有提供設定乙個視窗的客戶區大小的api.setwindowpos,movewindow 它們都只能設定整個視窗的大小,如果不採取點其它的 方法,是不能直接設定客戶區的大小的.設定客戶區的大小用處不是很多,但有 時候會用到,比如在客戶區上進行文字輸出計算的時候.wi...
如何調整視窗以適應客戶區大小
以下黑色字型部分為 假設我們用createwindow 0,0,w,h,建立乙個視窗,我們將獲得乙個w x h大小的視窗,通常我們需要的是客戶區大小為w x h,如何做呢?乙個方法是呼叫api函式setwindowpos,通常我們需要提供3個引數 視窗控制代碼hwnd,視窗寬度w,視窗高度h。下面是...
MFC獲取視窗和客戶區座標分析
cwnd pwnd getdlgitem idb but recognize pwnd getclientrect rect 指該控制項自身客戶區的矩形,原點為控制項左上角,長寬為整個控制項的尺寸 clienttoscreen rect 座標原點從控制項所屬視窗客戶區移動到螢幕左上角,長寬為整個控制...