void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
CRect rect;
GetClientRect(&rect);
//添加了下面这几句运行出错(如下图).
m_wndSplitter1.SetRowInfo(1,rect.Height()/5,0);
m_wndSplitter2.SetColumnInfo(0,rect.Width()/6,0);
m_wndSplitter3.SetRowInfo(0,rect.Height()/6,0);
m_wndSplitter1.RecalcLayout();
m_wndSplitter2.RecalcLayout();
m_wndSplitter3.RecalcLayout();
}
{
CFrameWnd::OnSize(nType, cx, cy);
CRect rect;
GetClientRect(&rect);
//添加了下面这几句运行出错(如下图).
m_wndSplitter1.SetRowInfo(1,rect.Height()/5,0);
m_wndSplitter2.SetColumnInfo(0,rect.Width()/6,0);
m_wndSplitter3.SetRowInfo(0,rect.Height()/6,0);
m_wndSplitter1.RecalcLayout();
m_wndSplitter2.RecalcLayout();
m_wndSplitter3.RecalcLayout();
}
解决办法如下:
在MFC框架中有个地方要注意那就是调用OnSize的时候可能该窗口的子窗口还没有创建完成,这是问题所在!
将代码改成如下:
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
CRect rect;
GetClientRect(&rect);
//添加了下面这几句运行出错(如下图).
if (!::IsWindow(m_wndSplitter1.m_hWnd)) // 如果还没有创建
{
return;// 直接返回放弃本次对子窗口的操作
}
m_wndSplitter1.SetRowInfo(1,rect.Height()/5,0);
m_wndSplitter2.SetColumnInfo(0,rect.Width()/6,0);
m_wndSplitter3.SetRowInfo(0,rect.Height()/6,0);
m_wndSplitter1.RecalcLayout();
m_wndSplitter2.RecalcLayout();
m_wndSplitter3.RecalcLayout();
}