|
如何在MFC單文檔中創(chuàng)建多視圖 2009-03-19 21:16 基本步驟如下: 1.首先創(chuàng)建一個(gè)MFC單文檔應(yīng)用程序。 2.添加4個(gè)MFC類TopLView、BottomLView、TopRView、BottomRView,基類為CView。 3.添加一個(gè)MFC類CControlForm,基類為CFormView,對(duì)話框ID默認(rèn)。 4.創(chuàng)建一個(gè)切分類,如MySplitter,基類為CSplitterWnd(默認(rèn)基類選項(xiàng)中無此類,自己添加即可)。 5.在框架類Cmainframe的頭文件中,添加2個(gè)MySplitter的變量(因?yàn)橄旅嬉M(jìn)行兩次切分操作)。 6.重寫框架類Cmainframe的OnCreateClient函數(shù),如下: //第一次靜態(tài)切分CreateStatic,一行兩列 if (!m_wndSplitter.CreateStatic(this,1,2)) return FALSE; //第二次靜態(tài)切分(將第一次切分后的第二列再分為2*2)及所有的子視圖創(chuàng)建(CreateView函數(shù))。 if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CControlForm), CSize(100, 100), pContext) || // return CFrameWnd::OnCreateClient(lpcs, pContext); //注釋掉原有的響應(yīng)函數(shù) 注意:記得在Mainfrm.h中添加以上五個(gè)視圖類的頭文件: #include "CControlForm.h" 6. 切分視圖完成,結(jié)果如下: 其中,最左的視圖為FormView類型,操作類似對(duì)話框(可以在Resource-Dialog看到其對(duì)應(yīng)的對(duì)話框資源);右邊四個(gè)的操作則類似普通視圖。
補(bǔ)充內(nèi)容: a. 此時(shí)創(chuàng)建的各個(gè)子視圖之間的分割條可以拖動(dòng),以改變視圖其大小。如果想固定分割條,則需要重載MySplitter類的鼠標(biāo)響應(yīng)函數(shù)??梢酝ㄟ^一個(gè)Bool型變量來控制是否可以拖動(dòng)分割條: if (Isvisable) //Isvisable在構(gòu)造函數(shù)中已被初始為FALSE b. 還可以通過重載MySplitter類的OnDrawSplitter函數(shù)來改變分割條的樣式。以下為該函數(shù)代碼: { #define LP RGB(128,128,128) //如果pDC 為 NULL則僅使分割窗口區(qū)域無效 CRect rc = rect; } 注:以上程序在vs2008上調(diào)試成功。 |
|
|