我已经将视图成功分割,但是分割线我想让它按框架大小相对移动。
比如我将视图按1:1的比例左右分割,
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(COneView),CSize(rect.Width()/2,rect.Height()),pContext);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(COneView),CSize(rect.Width()/2,rect.Height()),pContext);
但是我在改变框架大小的时候,左边的视图宽度不变,而右边的视图宽度改变了。
我的问题就是如何将分割线框架大小相对移动,在本例中就是在1:1左右分割的时候,让分割线永远居中。
比如我将视图按1:1的比例左右分割,
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(COneView),CSize(rect.Width()/2,rect.Height()),pContext);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(COneView),CSize(rect.Width()/2,rect.Height()),pContext);
但是我在改变框架大小的时候,左边的视图宽度不变,而右边的视图宽度改变了。
我的问题就是如何将分割线框架大小相对移动,在本例中就是在1:1左右分割的时候,让分割线永远居中。
===================
处理左右视图的WM_SIZE消息,在里面相应的改变它们的大小就行了。
CRect rect;
GetClientRect( &rect );
m_wndSplitter.SetColumnInfo(0, rect.Width()/2, 10);
m_wndSplitter.SetColumnInfo(1, rect.Width()/2, 10);
m_wndSplitter.RecalcLayout();有中断错误
void CSplitterWnd::SetColumnInfo(int col, int cxIdeal, int cxMin)
{
ASSERT_VALID(this);
ASSERT(col >= 0 && col < m_nMaxCols);
ASSERT(cxIdeal >= 0);
ASSERT(cxMin >= 0); m_pColInfo[col].nIdealSize = cxIdeal;
m_pColInfo[col].nMinSize = cxMin;
}错误是m_pColInfo没有分配到空间,怎么回事呢?
在CMainFrame主框架类定义一个BOOL bOK= FALSE;的成员变量,初始值为FALSE;表示CSplitterWnd是否创建成功,在OnCreateClient中,待m_wndSplitter.CreateStatic(..);CreateView()调用完成以后,将该BOOL bOk置为TRUE;
然后再OnSize函数中,先判断bOK是否为TRUE,如果是的话,就加上你上面的代码
BOOL bOK;初始化函数中
bOK = FALSE;OnCreateClient函数中
{
m_splitter.CreateStatic(...);
m_splitter.CreateView(...);
...
bOk = TRUE;
return TRUE;
}OnSize函数中
{
....
...
if(bOK)
{
// 加上你上面的代码
}
}