在MoveWindow/SetWindowPos()子窗口控件之前先判断一下子窗口的GetSafeHwnd()是否不为NULL
OnSize(...)
{
  CWnd *pBoder = GetDlgItem(IDC_STATICC);
if(pBoder && pBoder->GetSafeHwnd()
{
  CRect m_rBoder ;
  pBoder->GetWindowRect(&m_rBoder);
ScreenToClient(&m_rBoder);
m_huanre.MoveWindow(&m_rBoder)
}}

解决方案 »

  1.   

    pBoder= GetDlgItem(IDC_STATICC);
    if(pBoder.m_hWnd!=NULL)//在这里加个判断
    {
     ..........
    }
      

  2.   

    1.获得子窗体的指针MoveWindow来控制(MoveWIndow是SetWindowPos的封装)
    大版主和2楼都判断了句柄,这个是很重要的2.另外推荐个控件EasySizeEasySize能比较好的满足楼主需要
      

  3.   

    本楼主有看过你的提议,但是再三思量那个方法不行,我的静态文本和编辑框很多,easysize要对每个控件设计距离,靠近窗体边框的控件还好说,中间的太多的控件没法设计,我控件布局有点满,各控件大小一样。拉伸的时候可以。但是缩小的时候很难最麻烦的是每句easysize,我要想想该如何设计。不知道我讲的对不对。或许你可以指点我一二少走弯路。。
      

  4.   

    本楼主有看过你的提议,但是再三思量那个方法不行,我的静态文本和编辑框很多,easysize要对每个控件设计距离,靠近窗体边框的控件还好说,中间的太多的控件没法设计,我控件布局有点满,各控件大小一样。拉伸的时候可以。但是缩小的时候很难最麻烦的是每句easysize,我要想想该如何设计。不知道我讲的对不对。或许你可以指点我一二少走弯路。。
      

  5.   

    和我问题很类似啊~~~
    我从网上搜到解决方法
    if(nType==SIZE_MINIMIZED)
    {
      //需要判断一下,是最小化则退出。
      //如果是最小化,恢复的时候会BUG,因为整数除以0
      return ;
    }CWnd *pWnd; 
    pWnd = GetDlgItem(IDC_LIST); //获取控件句柄 
    if(pWnd)//判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建 

    CRect rect; //获取控件变化前大小 
    pWnd->GetWindowRect(&rect); 
    ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标 
    // cx/m_rect.Width()为对话框在横向的变化比例 rect.left=rect.left*cx/m_rect.Width();//调整控件大小(我的问题,这里少了一个修正值的处理) 
    rect.right=rect.right*cx/m_rect.Width(); 
    rect.top=rect.top*cy/m_rect.Height(); 
    rect.bottom=rect.bottom*cy/m_rect.Height(); 
    pWnd->MoveWindow(rect);//设置控件大小 

    GetClientRect(&m_rect);//将变化后的对话框大小设为旧大小
    但是有个问题,就是窗口变化时候,位置比例关系似乎不对,少了一个修正值的处理
      

  6.   

    我创建一个对话框,继承类是FormView,CLeftPaneView : public CFormView然后再对话框CLeftPaneView中按照上述步骤进行编程,BEGIN_EASYSIZE_MAP(CLeftPaneView)
    EASYSIZE(IDC_LeftHouseSituation,ES_KEEPSIZE,ES_KEEPSIZE,ES_BORDER,ES_BORDER,0)
    END_EASYSIZE_MAP对应的IDC_LeftHouseSituation的按钮不显示,要怎么修改呢,谢谢大侠,帮帮我!
      

  7.   

    我的“edit”子窗口随着View窗口大小变化,在OnSize加这些就可以:
    CMyDoc* pDoc=GetDocument();//rect数据在Doc里
    ASSERT_VALID(pDoc);
    if (!pDoc)
    return;
    GetClientRect(&pDoc->m_viewrect);
    CWnd::FromHandle(this->m_hwndeditl)->MoveWindow(0,0,
    (int)(pDoc->m_viewrect.right-pDoc->m_viewrect.left)/3,
    pDoc->m_viewrect.bottom-pDoc->m_viewrect.top,true);//改位置和大小
    虽然我来晚了