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后,成功运行,但是问题又来了,对话框放大所小,上面的控件是跟着放大缩小,但是会闪屏, 这个该如何解决,最好有代码提供

解决方案 »

  1.   

    1 m_tabctrl还没创建,hwnd为空。
    2 这个是系统设置了dragfullwindow。可以用systemparameterinfo来修改spi_setdragfullwindow。
      

  2.   

    2. 对话框勾上clip children属性
      

  3.   

    Onsize的第一次调用发生在子窗口创建之前的~
      

  4.   

     我知道没有创建,我很奇怪,已经运行到OnSize了,怎么还没有创建啊?主对话框上有tab ctrl, 然后还有两个对话框dlg1, dlg2, 另外,当我将m_tabctrl关联起 对话框dlg1, dlg2的时候,就发现随着主对话框的放大缩小,dlg1, dlg2不能放大缩小。。这是何故啊, 我不关联的时候, tab ctrl可以随着主对话框放大缩小, 关联dlg1, dlg2的时候,就发现dlg1, dlg2好像是被固定死了一样风格我已经设置为child ,Resizing了啊 救命啊
      

  5.   

    楼上正解,控件还没有create之前就会触发wm_size
      

  6.   

    大家好,继续问个问题, tab control控件随着对话框放大缩小, 会闪烁怎么办?
      

  7.   

     有个主对话框,主对话框上有个tab control, tab control 关联了dlg1,dlg2,....tab control控件随着对话框是可以放大缩小的,但是问题出现在:dlg1, dlg2,居然是固定的,不会跟着主对话框一块放大缩小。很奇怪!代码如下:
     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风格