MFC窗體分割及相關(guān)注意事項(xiàng)
1.首先從CsplitterWnd繼承一個(gè)子類(lèi)CSplitterWndEx
2.在CMainFrame類(lèi)中添加CsplitterWnd的實(shí)例CSplitterWndEx m_wndSplitter;
3.添加代碼到 CMainFrame::OnCreateClient()函數(shù)
CRect rect;
GetClientRect(rect);
if (!m_wndSplitter.CreateStatic(this,1,2)) { return FALSE; }
if (!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CZYView),CSize(rect.Width()/4*3,100),pContext)) { return FALSE; }
if (!m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CTest),CSize(rect.Width()/4,100),pContext)) { return FALSE; }
m_CreatewndSplitter=true;
m_wndSplitter.SetActivePane(0,1);
return TRUE;
return CFrameWnd::OnCreateClient(lpcs, pContext);
4.。重載CMainFrame::OnSize()函數(shù),在窗口大小改變是調(diào)整分割窗體的大小
CFrameWnd::OnSize(nType, cx, cy);
CRect rect;
GetClientRect(rect);
if(m_CreatewndSplitter)
{
m_wndSplitter.SetColumnInfo(0,rect.Width() *3/4,10);
m_wndSplitter.SetColumnInfo(1,rect.Width() *1/4,10);
m_wndSplitter.RecalcLayout();
}
5.可以屏蔽CSplitterWndEx的鼠標(biāo)調(diào)整大小的操作,重載OnMouseMove函數(shù)
void CSplitterWndEx::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CWnd::OnMouseMove(nFlags, point);
}
-------------------------------------------------------------------------------------------------------
在分割窗體的一個(gè)視圖中調(diào)用另一個(gè)視圖的方法:
CZYView* pZYView;
CMainFrame * pMainFrm = (CMainFrame*)AfxGetMainWnd();
pZYView = (CZYView*)pMainFrm->m_wndSplitter.GetPane(0,0); /*獲取另一個(gè)視圖的指針*/
pZYView->Line(m_x0,m_y0,m_x1,m_y1);
----------------------------------------------------------------------------------------------------
注意事項(xiàng):
在添加頭文件編譯后經(jīng)常會(huì)產(chǎn)生莫名其妙的錯(cuò)誤,改正方法如下:
如果產(chǎn)生如下錯(cuò)誤:
error C2143: syntax error : missing ';' before '*....
error C2501: 'CMyDoc' : missing storage-class or type specifiers
error C2501: 'GetDocument' : missing storage-class or type specifiers
解決方法:
在任何cpp文件的開(kāi)頭都按這樣的順序Include:
#include "XXXDoc.h"
#include "XXXView.h"
#include "MainFrm.h"
注意,Doc的頭文件一定要在最前面。這樣你的CDemoView和CMyView也可以共享一個(gè)CDemoDoc。
一般在Cpp中包含文件是要注意類(lèi)的包含關(guān)系,被包含的類(lèi)定義應(yīng)該在前面。如果實(shí)在有沖突,可以在一個(gè)類(lèi)的頭文件中加:class CXXXDoc;之類(lèi)的空定義。這樣定義過(guò)的頭文件中可以用CXXXDoc申明指針,但是不能申明實(shí)際對(duì)象。
posted on 2008-11-24 11:10
楊彬彬 閱讀(844)
評(píng)論(0) 編輯 收藏 引用