原帖:
一、基本的csplitterwnd的使用
1. 在cmainframe中新增乙個csplitterwnd成員:
csplitterwnd m_splitterwnd1;
2. 基於cview建立兩個新的檢視類,cviewleft和cviewright,乙個用於在左邊顯示,乙個用於在右邊顯示。
3. 過載cmainframe的oncreateclient函式,在並其中呼叫csplitterwndr的createstatic函式建立該分割視窗,createview函式建立左右兩個檢視,setcolumninfo設定分割視窗的列的寬度:
bool cmainframe::oncreateclient(lpcreatestruct lpcs, ccreatecontext* pcontext)
執行後就可以看到生成了分割為左右兩個檢視的視窗。
二、為分割窗新增一些自己需要的功能
從系統的csplitterwnd類派生乙個新類。
在類檢視中右鍵,選擇「新增」->「類」,在彈出視窗中選擇mfc類,輸入新類的名字cmysplitter,基類選擇為cwnd(這裡基類的選項裡面沒有csplitterwnd,所以要先選擇cwnd)。然後把生成的mysplitter.h和mysplitter.cpp裡面的三個地方的「cwnd」改成「csplitterwnd」。
mysplitter.h中:
class cmysplitter : public csplitterwnd
mysplitter.cpp中:
implement_dynamic(cmysplitter, csplitterwnd)
begin_message_map(cmysplitter, csplitterwnd)
1. 雙擊分隔欄展開或者收起左邊的一欄
過載onlbuttondblclk函式:
void cmysplitterwnd::onlbuttondblclk(uint nflags, cpoint point)
else
recalclayout();
//重新構建視窗布局
}2. 設定分隔欄的寬度
在cmysplitter的建構函式中(這裡是把寬度設為11畫素):
m_cxsplittergap = 11;
m_cxsplitter = 11;
//int m_cxsplitter, m_cysplitter; // size of splitter bar
//int m_cxbordershare, m_cybordershare; // space on either side of splitter
//int m_cxsplittergap, m_cysplittergap; // amount of space between panes
//int m_cxborder, m_cyborder; // borders in client area
3. 禁止拖動分隔欄的位置
(1)過載onlbuttondown函式,改成什麼都不做:
void cmysplitter::onlbuttondown(uint nflags, cpoint point)
(2)過載onmousemove函式,也改成什麼都不做:
void cmysplitter::onmousemove(uint nflags, cpoint point)
4. 在分隔欄上新增乙個」按鈕「
(1)在資源檢視中匯入兩張位圖資源,分另是乙個向左的箭頭和乙個向右的箭頭,大小為(6*31)畫素:idb_bitmap_left,idb_bitmap_right
(2)為cmysplitter類新增顯示該「按鈕」相關的成員:
cbitmap m_bitmapleft; //左箭頭位圖
cbitmap m_bitmapright; //右箭頭位圖
cdc m_dcmem; //
crect m_rectimgbtn; //顯示該「按鈕」的矩形區域
(3)新增乙個成員函式得到顯示該「按鈕」的矩形區域:
//這個函式用來得到顯示該按鈕的矩形區域
void cmysplitter::getimgbtnrect(void)
}else}}
(4)過載ondrawsplitter函式,畫出該按鈕:
void cmysplitter::ondrawsplitter(cdc* pdc, esplittype ntype,
const crect& rect)
getimgbtnrect();
pdc->bitblt(m_rectimgbtn.left, m_rectimgbtn.top,
m_rectimgbtn.width(), m_rectimgbtn.height(),
&m_dcmem, 0, 0, srccopy); //從m_dcmem中把複製到pdc中並畫出來(大概是這個意思)
}}}(5)過載onlbuttonup函式,使得點選該「按鈕」時可以收起或者展開左欄
void cmysplitter::onlbuttonup(uint nflags, cpoint point)
else
}(6)過載onmousemove函式,當滑鼠移動到「按鈕」上時,把滑鼠形狀變成手形
void cmysplitter::onmousemove(uint nflags, cpoint point)
else
}
使用CSplitterWnd類分割視窗
一 在單文件 檢視結構中 將視窗進行分割 步驟如下 1 在框架類中定義乙個csplitterwnd類物件 m wndsplitter 2 過載框架類的oncreateclient 函式 這其中要注意 在cmainframe的原始檔cpp中新增工程view標頭檔案 如 include splitwnd...
CSplitterWnd 控制項的特性
最近,調ui,發現 csplitterwnd 這個控制項的特性,很有意思。先貼點它自繪的原始碼。void mycsplitter ondrawsplitter cdc pdc,esplittype ntype,const crect rectarg otherwise,actually draw c...
php使用技巧 轉
靜態呼叫的成員一定要定義成 static php5 only 貼士 php 5 引入了靜態成員的概念,作用和 php 4 的函式內部靜態變數一致,但前者是作為類的成員來使用。靜態變數和 ruby 的類變數 class variable 差不多,所有類的例項共享同乙個靜態變數。quote php co...