单文档 静态分隔窗口重新布局 出错 解决

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(); 
}


解决办法如下:

在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(); 
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值