CSplitterWnd分成上下2个窗体后,想让下面窗体随着主窗口onsize时,高度不变(类似DialogBar在下面的效果)但在onsize里
m_ViewSplitter.SetRowInfo( 1, m_Height, 0 );这个m_Height不知道在那里取得,在onsize里取得是无变化的,在onsize之前才可以请问,如何解决,谢谢大家
m_ViewSplitter.SetRowInfo( 1, m_Height, 0 );这个m_Height不知道在那里取得,在onsize里取得是无变化的,在onsize之前才可以请问,如何解决,谢谢大家
调用CSplitterWnd::SetRowInfo();CSplitterWnd::RecalcLayout();
再改变主窗口大小时,下面视图高度不变(类似DialogBar在下面的效果)
但允许用户托动分隔条,就是能记住这个高度
BOOL m_bSplitterWnd = FALSE; // CMainFrame类的成员变量,标记,初始值为FALSE
CSplitterWnd m_wndSplitter; //BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
if(!m_wndSplitter.CreateStatic(this, 2, 1))
{
return FALSE;
} if(!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CXXView), CSize(100, 100), pContext))
{
return FALSE;
} if(!m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CXXView2), CSize(0, HEIGHT_WND), pContext))
{
return FALSE;
} m_bSplitterWnd = TRUE; return TRUE;
//return CFrameWnd::OnCreateClient(lpcs, pContext);
}void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if(m_bSplitterWnd && m_wndSplitter.GetSafeHwnd())
{
#define HEIGHT_WND 300
CRect rc;
GetClientRect(rc);
m_wndSplitter.SetRowInfo(0, cy - HEIGHT_WND, 10);
m_wndSplitter.SetRowInfo(1, HEIGHT_WND, 10);
m_wndSplitter.RecalcLayout();
}
}当然这里是限定死了下面视图的高度为HEIGHT_WND,而你需要的是允许用户托动分隔条,就是能记住这个高度,那你可能需要重写CSplitterWnd,处理WM_LBUTTONDOWN,WM_LBUTTONUP, WM_MOUSEMOVE消息,通过GetPane()->GetGetWindowRect()得到下面区域大高度,然后传递到主框架窗口中。