做一個項目,把一個單文檔的窗口分割成左右兩列,同時還需要設置左邊窗口的最小尺寸。
找了很多資料,都是針對對話框或者文檔的,試了OnSizing和GetMinMaxInfo,結果對分割窗口無效。
後來看到分割窗口的例子有鎖定分割條的代碼,跟同事討論了一下,來了靈感。下面是解決辦法,其實很簡單的,
可能以前有人做過吧,不過我在網上沒有搜索到,所以把我的做法寫出來跟大家分享。
一、新建一個類CMySplitter,基類為CSplitterWnd
二、重載該類的OnMouseMove函數:
void CMySplitter::OnMouseMove(UINT nFlags, CPoint point)
{
// 限制切分條的運動范圍。
if(point.x<228||point.x>600)
{
CWnd::OnMouseMove(nFlags, point);
}
else
{
CSplitterWnd::OnMouseMove(nFlags, point);
}
}
三、 然後就可以跟一般的窗口分割那樣去做了,if(point.x<228||point.x>600)這裡的范圍可以隨你去設置了 ^_^,夠簡單吧。
四、切分窗口
切分窗口就不用講那麼詳細了,在MaiFram.h建立切分條對象:
protected:
CMySplitter m_wndSplitter; //切分窗口對象
//在MaiFram.cpp中實現窗口切分:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,CCreateContext* pContext)
{
// 創建拆分器窗口
if (!m_wndSplitter.CreateStatic(this, 1, 2))
return FALSE;
if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(228, 100), pContext) ||
!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CDataEditView), CSize(100, 100), pContext))
{
m_wndSplitter.DestroyWindow();
return FALSE;
}
return TRUE;
}