分割视,在OnSize函数的GetColumnInfo出错,在OnSizing中竟没有问题
keyek 2002-11-26 10:31:02 我想试着将视静态分割成2*2的,并且在改变子窗口的时候保持比例(包括resize和min,max).但用在OnSize函数
的GetColumnInfo出错,在OnSizing中竟没有问题.经跟踪在OnSizing对GetColumnInfo的调用中的m_pColInfo
显示为+ m_wndSplitter {CSplitterWnd hWnd=0x001e035c} CSplitterWnd,
里面的m_pColInfo为
- m_pColInfo 0x003879d0 CSplitterWnd::CRowColInfo * .
而在OnSize函数对GetColumnInfo的调用中
+ m_pColInfo 0x00000000 CSplitterWnd::CRowColInfo *
没有m_wndSplitter,添加监视后显示
m_wndSplitter CXX0017: 错误:没有找到符号“m_wndSplitter”
代码如下,请帮帮忙,操作系统xp,语言vc.net:
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
//将子窗口最大化
//CMDIChildWnd::ActivateFrame(SW_SHOWMAXIMIZED);
CRect rect;
GetClientRect(&rect);
m_wndSplitter.CreateStatic(this,2,2);
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CMyMtSrbView),CSize(rect.Width() -100,rect.Height()/2),pContext);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CMyMtSrbView),CSize(100,rect.Height()/2),pContext);
m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CMyMtSrbView),CSize(rect.Width() -100,rect.Height()/2),pContext);
m_wndSplitter.CreateView(1,1,RUNTIME_CLASS(CMyMtSrbView),CSize(100,0),pContext);
return true;
}
void CChildFrame::OnResizeSplitter(void)
{
//稳健检查
HWND hWnd=m_wndSplitter.GetSafeHwnd();
if (hWnd==NULL || !::IsWindow(hWnd))
{
return;
}
CRect rect;
GetClientRect(&rect);
int cxCur,cxMin;
m_wndSplitter.GetColumnInfo(0,cxCur,cxMin);
m_wndSplitter.SetColumnInfo(0,rect.Width() -100,cxMin);
m_wndSplitter.GetColumnInfo(1,cxCur,cxMin);
m_wndSplitter.SetColumnInfo(1,100,cxMin);
int cyCur,cyMin;
m_wndSplitter.GetRowInfo(0,cyCur,cyMin);
m_wndSplitter.SetRowInfo(0,rect.Height()/2,cyMin);
m_wndSplitter.GetRowInfo(1,cyCur,cyMin);
m_wndSplitter.SetRowInfo(1,rect.Height()/2,cyMin);
m_wndSplitter.RecalcLayout();
}
void CChildFrame::OnSizing(UINT fwSide, LPRECT pRect)
{
CMDIChildWnd::OnSizing(fwSide, pRect);
// TODO: 在此添加消息处理程序代码
OnResizeSplitter();//在此可以正常调用
}
void CChildFrame::OnSize(UINT nType, int cx, int cy)
{
CMDIChildWnd::OnSize(nType, cx, cy);
// TODO: 在此添加消息处理程序代码
OnResizeSplitter();//在此不能正常调用
}