Dialog中放了个tab control控件为了使这个控件随对话框一块放大缩小,于是重载OnSize
CDialog::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码 //处理tab ctronl控件的问题
if(m_tabctrl.GetSafeHwnd()) //如果没有这行代码立即报错,
{
CRect rc;
GetClientRect(rc);
m_tabctrl.MoveWindow(rc);
}为什么会报错?我知道OnSize函数在对话框运行的时候会调用一次,然后随着对话框放大缩小,它又会不断的被调用肯定是第一次 被调用的时候出错了。 ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL)); 代码跳到这里。
第二个问题,我加了GetSafeHwnd后,成功运行,但是问题又来了,对话框放大所小,上面的控件是跟着放大缩小,但是会闪屏, 这个该如何解决,最好有代码提供
CDialog::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码 //处理tab ctronl控件的问题
if(m_tabctrl.GetSafeHwnd()) //如果没有这行代码立即报错,
{
CRect rc;
GetClientRect(rc);
m_tabctrl.MoveWindow(rc);
}为什么会报错?我知道OnSize函数在对话框运行的时候会调用一次,然后随着对话框放大缩小,它又会不断的被调用肯定是第一次 被调用的时候出错了。 ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL)); 代码跳到这里。
第二个问题,我加了GetSafeHwnd后,成功运行,但是问题又来了,对话框放大所小,上面的控件是跟着放大缩小,但是会闪屏, 这个该如何解决,最好有代码提供
2 这个是系统设置了dragfullwindow。可以用systemparameterinfo来修改spi_setdragfullwindow。
void CTargetStateDialog::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
//对tab control控件及tab control控件相关联在对话框在WM_SIZE消息进行处理
if(m_tabCtrl.GetSafeHwnd())
{
CRect rc;
GetClientRect(&rc);
m_tabCtrl.MoveWindow(&rc); if(dlg1->GetSafeHwnd())
{
rc.bottom -= 20;
rc.left += 1;
rc.right -= 1;
dlg1->MoveWindow(&rc );
}
}
}
dlg1我将它设为:Resizing 了,是child风格