發(fā)表日期:2004年12月25日 【編輯錄入:
webmaster】
最近需要在對話(huà)框中使用分割控件,也就是CSplitterWnd了,但是,CSplitterWnd只能用于CFrameWnd或CFrameWnd的子類(lèi)中,在對話(huà)框中還不知道如何處理。研究我們常用的一個(gè)工具“影音傳送帶”,上面實(shí)現分割和我需要的差不多,于是研究了一下,原來(lái)還是可以的。
首先明白CSplitterWnd還是需要在CFrameWnd中創(chuàng )建,其實(shí)也就是我們把CFrameWnd分割了,然后將CFrameWnd放到我們需要的地點(diǎn)。
以下說(shuō)明針對我提供的模仿程序代碼
首先我們建立一個(gè)SDI的MFC框架,不要DOC支持,在CMainFrame中添加一個(gè)CTabCtrlEx的對象,CTabCtrlEx的CTabCtrl的派生類(lèi)
然后在OnCreate中添加如下代碼
m_TabCtrl.Create(TCS_TABS | TCS_FIXEDWIDTH | WS_CHILD |
WS_VISIBLE | TCS_SINGLELINE, CRect(), this, AFX_IDW_PANE_FIRST);
m_TabCtrl.SetFont(m_wndToolBar.GetFont());
m_TabCtrl.InsertItem(0, "下載");
m_TabCtrl.InsertItem(1, "代理服務(wù)器");
m_TabCtrl.InsertItem(2, "站點(diǎn)探測器");
將其ID設置為:AFX_IDW_PANE_FIRST這樣我們就不需要維護他的顯示控制了,當窗體變化大小的時(shí)候,TabCtrl會(huì )自動(dòng)變化大小,當然大家可以刪除原來(lái)創(chuàng )建的那個(gè)VIEW
然后我們添加一個(gè)新類(lèi)CTabCtrlEx,父類(lèi)為CTabCtrl,增加OnCreate,OnPaint,OnSize,TCN_SELCHANGE,處理
在定義中增加CTestFrameWnd的一個(gè)指針對象,CTestFrameWnd是CFrameWnd的派生
在OnCreate中添加
m_pwndFrame1 = new CTestFrameWnd;
m_pwndFrame1->Create(NULL, "下載", WS_CHILD|WS_VISIBLE, CRect(), this);
這個(gè)對象我們必須定義為指針,而且不能主動(dòng)delete,因為系統會(huì )對創(chuàng )建的CFrameWnd對象自動(dòng)調用delete
OnPaint中主要處理閃爍問(wèn)題(主窗體大小變化的時(shí)候,CTabCtrl默認會(huì )重畫(huà)界面,從而出現閃爍),解決原理主要是修改了系統默認的處理函數OnPaint,注意不是簡(jiǎn)單的修改OnEraseBkgnd就能解決問(wèn)題的,參考代碼,這個(gè)還是有點(diǎn)用處哦。OnSize中處理m_pwndFrame1 的位置,TCN_SELCHANGE處理顯示控制
上面需要CTestFrameWnd,當然我們就要新建CTestFrameWnd類(lèi)
在CTestFrameWnd中唯一要做的就是虛函數OnCreateClient,代碼請參考文件,主要窗體分割,比較簡(jiǎn)單就不說(shuō)明了,代碼寫(xiě)的非常簡(jiǎn)化且沒(méi)有檢查,這是不對的,不過(guò)這是DEMO也就不計較了,大家不要模仿
這樣框架就完成了,效果如下:
申明:DEMO中代碼不是很規范,希望大家不要學(xué)習
歡迎大家互相交流學(xué)習
很多信息
http://zhugang.net http://www.zhugang.net請點(diǎn)擊圖標下載瀏覽:
附件