我想在父窗体改变大小的同时,使子控件随之按比例改变大小,用movewindow好像没有反映啊,望高手指点。

解决方案 »

  1.   

    MoveWindow前面要使用该控件的对象,是吧?这样做的话没问题的
      

  2.   

    CRect r(10,10,100,100);
    m_btn.MoveWindow(r, TRUE);//此处不能为FALSE m_btn是一个按钮
    不会吧,我用着挺顺的
      

  3.   

    是在父窗体的OnSize()事件中实现的么?应该没问题的
      

  4.   

    //m_pwndTblCtrl为我所使用的控件
    if(m_pwndTblCtrl)
    { RECT rct;
    GetClientRect(&rct);
    rct.bottom;
    rct.left;
    //m_pwndTblCtrl->MoveWindow(&rct);//此用法会抛出异常,改用api函数如下:
    ::MoveWindow(m_pwndTblCtrl->m_hWnd,rct.left,rct.top,rct.right-rct.left,rct.bottom-rct.top,false);//此函数只在程序初始化时有效,初始化后就失效了
    }
      

  5.   

    你的这些代码应该放在OnSize里面,是么?//m_pwndTblCtrl为我所使用的控件
    if(m_pwndTblCtrl)
    { RECT rct;
    GetClientRect(&rct);
    rct.bottom;
    rct.left;
    //m_pwndTblCtrl->MoveWindow(&rct);//此用法会抛出异常,改用api函数如下:
    ::MoveWindow(m_pwndTblCtrl->m_hWnd,rct.left,rct.top,rct.right-rct.left,rct.bottom-rct.top,false);//此函数只在程序初始化时有效,初始化后就失效了
    }
      

  6.   

    >你的这些代码应该放在OnSize里面,是么?
    对啊,对啊,是放在onsize里
      

  7.   

    先添加一个windows的onsize消息函数  然后
    void CXXXXView::OnSize(UINT nType, int cx, int cy) 
    {
    CView::OnSize(nType, cx, cy);
    ////m_pGridCtrl是你的控件控制变量
    if (m_pGridCtrl->GetSafeHwnd())
    {
    CRect rect;
    GetClientRect(rect);
    m_pGridCtrl->MoveWindow(rect);
    }

    }
      

  8.   

    我确实是这样做的,不过老是出现异常,值得注意的是我的CTableForm是用CSplitterWnd分割得到的窗体
    void CTableForm::OnSize(UINT nType, int cx, int cy)
    {
    CFormView::OnSize(nType, cx, cy);
    if(m_pwndTblCtrl->GetSafeHwnd())
    { RECT rct;
    GetClientRect(&rct);
    m_pwndTblCtrl->MoveWindow(&rct);//异常处
    }
    // TODO: 在此添加消息处理程序代码
    }
      

  9.   

    ::MoveWindow(m_pwndTblCtrl->m_hWnd,rct.left,rct.top,rct.right-rct.left,rct.bottom-rct.top,false);//TRUE);//此处不能为FALSE m_btn是一个按钮
      

  10.   

    看来麻烦大了,我用了SetWindowPos()同样出现断言异常,好烦啊,烦死人了,一个简单的程序都要出毛病,
      

  11.   

    void CChildForm::OnSize(UINT nType, int cx, int cy)
    {
    CFormView::OnSize(nType, cx, cy);

    m_wndMyTree.MoveWindow(0, 0, cx/3, cy, TRUE);
    m_wndMyTree.SetBkColor(RGB(0, 255, 0)); //::MoveWindow(m_wndMyTree.m_hWnd, 0, 0, cy, cx, TRUE);}
    我的更晕.执行后FORMVIEW上就多一个TREECTRL,位置是新的位置,而原有的TREECTRL则原地不动.