我想在窗口改变大小时,窗口中的控件也随之改变大小.我在网上找了几个例子,但是有些复杂,而且还是重写CDialog类的.请问大家如何解决,有无例子或者相关的文章可以参考的呢?谢谢~

解决方案 »

  1.   

    MoveWindow就可以了.VCKBase有个类[忘记在什么地方了]
      

  2.   

    这一段应该可以[在对话框]
    CRect m_ClientOld;
    CRect m_ClientNew;
    GetClientRect(m_ClientOld);
    RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0,reposQuery,m_ClientNew);
    CPoint pOffset(m_ClientNew.left-m_ClientOld.left,m_ClientNew.top-m_ClientOld.top);
    CRect m_Child;
    CWnd* pChild=GetWindow(GW_CHILD);
    while(pChild)
    {
    pChild->GetWindowRect(m_Child);
    ScreenToClient(m_Child);
    m_Child.OffsetRect(pOffset);
    pChild->MoveWindow(m_Child,FALSE);
    pChild=pChild->GetNextWindow();
    } CRect m_Window;
    GetWindowRect(m_Window);
    m_Window.right+=m_ClientOld.Width()-m_ClientNew.Width();
    m_Window.bottom+=m_ClientOld.Height()-m_ClientNew.Height();
    MoveWindow(m_Window,FALSE);
      

  3.   

    这下面有个东东挺好使的。
    http://www.codeproject.com/dialog/resizabledialog.asp另外,也可以在OnSize下面处理,使用MoveWindow对每个控件的位置和大小进行调整。
      

  4.   

    http://www.codeproject.com/dialog/easysize.asp
      

  5.   

    好的,我先试试.我记得我原来在OnSize里用过MoveWindow做过控件位置改动,不过失败了,一产生OnSize事件系统就报错.
      

  6.   

    要注意,在OnSize中要判断cx和cy的值是否是合法的值后再改变控件的位置。否则有些控件都还没有创建,调用MoveWindow会出错的。
      

  7.   

    我在试
    http://www.codeproject.com/dialog/resizabledialog.asp
    编译时出现一下错误,请问大概会是什么问题造成的呢?
    Demo.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall CResizableDialog::~CResizableDialog(void)" (??1CResizableDialog@@UAE@XZ)
      

  8.   

    对不起,我发错链接了,应该是RacoXu(Raco)的那个
    http://www.codeproject.com/dialog/easysize.asp
    这个我原来用过,应该没问题。
      

  9.   

    谢谢baberson(平平狐),终于解决问题啦~~~