我在窗体中加了一个ListCrol控件,我想在改变主窗口大小时也改变控件的大小,该怎么作啊,
谢谢!
我刚刚学,请说明详细一点。

解决方案 »

  1.   

    主窗口的OnSize()里对ListCtrl MoveWindow()
      

  2.   

    SetWindowPos()
    or
    MoveWindow()
      

  3.   

    CRichEditCtrl m_rich;(1)SDK:BOOL MoveWindow(
      HWND hWnd,      // handle to window
      int X,          // horizontal position
      int Y,          // vertical position
      int nWidth,     // width
      int nHeight,    // height
      BOOL bRepaint   // repaint flag
    );
    ::MoveWindow(m_rich.m_hWnd,0,0,rc.Width()-8,rc.Height()-25,FALSE);(2)CWnd:
    if(m_rich.GetSafeHwnd())
    m_rich.MoveWindow(0,0,rc.Width()-8,rc.Height()-25);
    或者:if(GetDlgItem(IDC_RICHEDIT1)->GetSafeHwnd())
    GetDlgItem(IDC_RICHEDIT1)->MoveWindow(0,0,rc.Width()-8,rc.Height()-25);
      

  4.   

    我者是让 m_rich 调整到相对对话框的大小。
      

  5.   

    主窗口加OnSize()消息加SetWindowPos() 
      

  6.   

    .h文件里头加afx_msg void OnSize(UINT nType, int cx, int cy);
    .cpp文件里加
    BEGIN_MESSAGE_MAP(CChatDlg, CDialog)
    ON_WM_SIZE()
    END_MESSAGE_MAP()下面是处理OnSize函数
    void CChatDlg::OnSize(UINT nType, int cx, int cy)
    {
    CDialog::OnSize(nType, cx, cy);
    DlgWidth = cx;
        DlgHeight = cy;
    if(Chang)
    {
    if(changeforvideo == false)
    {
    GetDlgItem(IDC_STATIC_VIDEO)->SetWindowPos(NULL, DlgWidth - 146, rectrichedit21.top - 10, rectvideo.Width(), rectrichedit21.Height() + 10, NULL);
    GetDlgItem(IDC_STATIC_MYVIDEO)->SetWindowPos(NULL, DlgWidth - 104, 346, rectmyvideo.Width(), rectmyvideo.Height(), NULL);
    GetDlgItem(IDC_LIST1)->SetWindowPos(NULL, cx - 10 - rectlist1.Width(), 68, rectlist1.Width(), rectrichedit21.Height() + 10, NULL);
    GetDlgItem(IDC_RICHEDIT21)->SetWindowPos(NULL, rectrichedit21.left, rectrichedit21.top, cx - 161 - rectrichedit21.left, cy - 157 -rectrichedit21.top, NULL);
    GetDlgItem(IDC_RICHEDIT22)->SetWindowPos(NULL, rectrichedit21.left, cy - 120, cx - 161 - rectrichedit21.left, rectrichedit22.Height(), NULL);

    //GetDlgItem(IDC_CHATDLG_ADDGROUPMEMBER)->SetWindowPos(NULL, cx - 10 - rectaddchatmember.Width(), rectlist1.top-8-rectaddchatmember.Height(), rectaddchatmember.Width(), rectaddchatmember.Height(), NULL);
    //GetDlgItem(IDC_STATIC_CHATDLG_ADDGROUPMEMBER)->SetWindowPos(NULL, cx - 10 - rectaddchatmember.Width() - 14-rectbitmapaddmember.Width(), rectbitmapaddmember.top, rectbitmapaddmember.Width(), rectbitmapaddmember.Height(), NULL);
    }
    else
    {
    GetDlgItem(IDC_STATIC_VIDEO)->SetWindowPos(NULL, DlgWidth - 291, rectrichedit21.top, 280, rectrichedit21.Height(), NULL);
    GetDlgItem(IDC_STATIC_MYVIDEO)->SetWindowPos(NULL, DlgWidth - 104, 346, rectmyvideo.Width(), rectmyvideo.Height(), NULL);
    GetDlgItem(IDC_LIST1)->SetWindowPos(NULL, cx - 10 - rectlist1.Width(), 68, rectlist1.Width(), rectrichedit21.Height() + 10, NULL);
                GetDlgItem(IDC_RICHEDIT21)->SetWindowPos(NULL, rectrichedit21.left, rectrichedit21.top, DlgWidth  - 300 - rectrichedit21.left, DlgHeight - 157 -rectrichedit21.top, NULL);
    GetDlgItem(IDC_RICHEDIT22)->SetWindowPos(NULL, rectrichedit21.left, DlgHeight - 120, DlgWidth - 300 - rectrichedit21.left, rectrichedit22.Height(), NULL);
    //GetDlgItem(IDC_STATIC_VIDEO_WAIT)->SetWindowPos(NULL, DlgWidth - 295, DlgHeight - 27, 288, 20, NULL);
    GetDlgItem(IDC_STATIC_GROUPBOXVIDEO)->SetWindowPos(NULL, DlgWidth - 293, rectrichedit21.top - 9, 284, rectrichedit21.Height() + 12, NULL);
    GetDlgItem(IDC_STATIC_GROUPBOXMYVIDEO)->SetWindowPos(NULL, DlgWidth - 106, 337, rectmyvideo.Width() + 4, rectmyvideo.Height() +12, NULL);
    }
    }
    else
    {
    Chang =true;
    }
    }
      

  7.   

    窗体的WM_SIZE消息调用SizeGetWindowRect获得窗体尺寸,MoveWindow()移尺寸,这里的参数要
    用窗体比例值。
      

  8.   

    我用的是非模态对话框,加OnSize()消息后,编译没有问题,运行后弹出对话框总是出现致命错误。不知道为什么.