資源描述:
《基于mfc的窗口拆分》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、1、MFC主要支持兩種類型的窗口拆分:靜態(tài)拆分和動態(tài)拆分。動態(tài)拆分:動態(tài)拆分窗口最多可以有兩行兩列,但它們可以相互拆分和合并。首先創(chuàng)建一個基于MFC的單文檔工程,然后添加下面的代碼,運行,就可以看到窗口動態(tài)拆分的效果。CSplitterWndm_wndSplitter;BOOLCMainFrame::OnCreateClient(LPCREATESTRUCT/*lpcs*/,CCreateContext*pContext){returnm_wndSplitter.Create(this,2,2,//TODO:調(diào)整行數(shù)和列數(shù)CSize(10,10),//TODO:
2、調(diào)整最小窗格大小pContext);}另外,動態(tài)拆分也可以在創(chuàng)建工程的時候,在工程向?qū)Ю锩婀催x拆分窗口的選項,上面的代碼就會自動生成,然后點擊菜單視圖--拆分,就可以手動拆分。2、靜態(tài)拆分:靜態(tài)拆分窗口的行列數(shù)在拆分窗口被創(chuàng)建時就設(shè)置好了,用戶不能更改。但是用戶可以縮放各行各列。一個靜態(tài)拆分窗口最多可以包含16行16列。靜態(tài)拆分的過程:靜態(tài)拆分窗口是用CsplitterWnd::CreateStatic而不是CsplitterWnd::Create創(chuàng)建,并且由于MFC不會自動創(chuàng)建靜態(tài)拆分窗口中顯示的視圖,所以您要親自在CreateStatic返回之后創(chuàng)建視圖。C
3、splitterWnd為此提供了名為CreateView的函數(shù)。1).在父框架中嵌入一個CSplitterWnd成員變量。2).重載父框架的CFrameWnd::OnCreateClient成員函數(shù)。3).從重載的OnCreateClient函數(shù)中調(diào)用類CSplitterWnd的Create或CreateStatic成員函數(shù),并調(diào)用CreateView來創(chuàng)建視圖。3、關(guān)鍵函數(shù)介紹:BOOLCreateStatic(CWnd*pParentWnd,intnRows,intnCols,DWORDdwStyle= WS_CHILD
4、WS_VISIBLE,UINTnI
5、D=AFX_IDW_PANE_FIRST); 函數(shù)有5個參數(shù),意義如下: ●pParentWnd:切分窗口的父窗口指針 ●nRows:水平方向分隔窗口的數(shù)目 ●nCols:垂直方向分隔窗口的數(shù)目 ●dwStyle:切分窗口的風格 ●nID:子窗口的ID值,默認為系統(tǒng)定義的AFX_IDW_PANE_FIRST 返回值:如果創(chuàng)建成功,返回非零值(TRUE),否則返回0(FALSE)?! _wndSplitter.CreateStatic(this,2,1);//切分為2行1列 virtualBOOLCreateView(introw,intco
6、l,CRuntimeClass*pViewClass,SIZEsizeInit,CCreateContext*pContext); 函數(shù)有5個參數(shù),意義如下: ●row:窗格的行標,從0開始 ●col:窗格的列標,從0開始 ●pViewClass:視圖的執(zhí)行期類CRuntimeClass指針,可以用宏RUNTIME_CLASS獲得 ●sizeInit:一個SIZE(或者CSize)類型的數(shù)據(jù),指定窗格的初始大小 ●pContext:一般是由父窗口傳遞過來,包含窗口的創(chuàng)建信息返回值:如果創(chuàng)建成功,返回非零值(TRUE),否則返回0(FALSE)。m_w
7、ndSplitter.CreateView(0,0,RUNTIME_CLASS(CTest),CSize(190,100),pContext)靜態(tài)窗口分割實例:新建一個基于MFC的單文檔工程,并添加3個基于FormView的MFC視圖類CFormView11、CFormView12和CFormView13,并添加CSplitterWndm_wndSplitter;然后添加下面的代碼:BOOLCMainFrame::OnCreateClient(LPCREATESTRUCT/*lpcs*/,CCreateContext*pContext){CRectrt;GetC
8、lientRect(&rt);//創(chuàng)建切分窗口m_wndSplitter.CreateStatic(this,1,3);//為切分窗口創(chuàng)建視圖m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CFormView11),CSize(100,rt.Height()),pContext);m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CFormView12),CSize(500,rt.Height()),pContext);m_wndSplitter.CreateView(0,2,RUNTIM
9、E_CLASS(CFor