添加VC里的现成的控件,比如按钮,编辑框等等,但是这些控件的大小和位置都不会变,比如窗口变大的时候,按钮还是在那个位置,并没有按比例放缩和改变大小,现在想做成一个让控件可以随着窗口的大小变化而变化大小和位置的界面,就是要让界面的整体布局(按比例上讲)固定,不管分辨率和窗口大小,控件会随着窗口的大小变化自己的位置和大小。
我试了下,采用了MM_ANISOTROPIC映射模式,在ONDRAW()函数利用MOVEWINDOW函数移动按钮控件,不过还得每次都要自己计算下当前窗口里的客户区的大小,然后在计算按钮应该显示的相对位置和大小才能搞定,并且MOVEWINDOW里的数值好像不是逻辑坐标,仍然是象素坐标,这样就很麻烦~~~
应该更简单的方法实现吧,比如设置一个按钮的什么什么属性~
可是我看了CBUTTON类没发现类似的函数啊?
难道MFC里面没有考虑到用户的这种需求吗??请教高手

解决方案 »

  1.   

    谢谢livedeal(怀念)!!! 
    利用MOVEWINDOW是可以
    可是大小和坐标还是要计算才能保证整体布局
    如果控件比较多也挺麻烦
    我就是想知道是不是有简单的办法
    控件大小和位置随窗口变化而发生改变这个需求应该比较普遍
    难道MFC没有提供类似的操作和属性什么的?
      

  2.   

    自己维护自己的尺寸,每个控件重载OnSize消息,每个控件的移动都基于其父窗口大小。也就是说你的控件移动是相对于父窗口的,而不是整个屏幕,这样处理才简单些吧,
      

  3.   

    xianglitian 说的控件序列是什么意思啊
    能具体点吗我要实现的就是Huberhui 说的那样,谢谢
      

  4.   

    没有简单的方法,就是MoveWindow其实也不麻烦,就是自己写个函数,根据窗体的大小,将所有控件Move到相应位置。其实,有这个时间问早就写好了
      

  5.   

    void OnSize(SIZE_RESTORED,int cx,int cy )
    void MoveWindow(
       int x,
       int y,
       int nWidth,
       int nHeight,
       BOOL bRepaint = TRUE 
    );
    void MoveWindow(
       LPCRECT lpRect,
       BOOL bRepaint = TRUE 
    );
    试一下
      

  6.   

    void CResizeDlgDlg::OnSize(UINT nType, int cx, int cy) 
    {
    CDialog::OnSize(nType, cx, cy);

    CWnd *pWnd = GetDlgItem( IDC_BUTTON_TEST ); CRect DlgRc; GetWindowRect( &DlgRc );
    CRect BtnRc;  if ( pWnd )
    {
    pWnd->GetWindowRect( &BtnRc ); pWnd->MoveWindow( DlgRc.Width()/2-BtnRc.Width()/2, DlgRc.Height()-50, BtnRc.Width(), BtnRc.Height() );
    } pWnd = GetDlgItem( IDC_LIST );
    if ( pWnd )
    {
    pWnd->GetWindowRect( &BtnRc ); pWnd->MoveWindow( 10, 10, DlgRc.Width()-20, DlgRc.Height()-70 );
    }
    }你自己修改修改
      

  7.   

    你看看这个,理解了的话用起来很方便。但是那个宏如果设不好会有点抖动。http://www.codeproject.com/KB/dialog/easysize.aspx
      

  8.   

    http://www.codeproject.com/KB/dialog/resizablelib.aspx
    这个应该是你需要的
      

  9.   

    自己写个对话框类继承一下,建议各位不要在这个时候随便用MoveWindow,不然效果会有点不好。
      

  10.   

    http://www.codeproject.com/KB/docview/cpropertyview.aspx
    现成的类cdxCSizingDialog,以前我用过,挺方便的
      

  11.   

    发邮件到[email protected]或访问www.thirddata.com给你源代码啊
      

  12.   

    控件的尺寸都按照 窗口的比例来设定,然后重载onsize消息  调用 movewindow
      

  13.   

    响应WM_SIZE消息.
    你可以自己建个专门用来保存每个控件位置的类,并且这个类兼顾移动控件,就叫它"窗口布局类"吧.当然你也可以用全局或静态变量,或者变量都不用,但好象太乱了.当每次来了WM_SIZE消息就按保存的位置一个个控件给MoveWindow到合适的位置.精心设计好这个控件保存位置的类,你的主程序就会很整洁的.我一直这样做,对于控件的窗口这样做不失为一个好方法,C++的类一个很重要的方面不就是设计用来做这种琐事的么.
      

  14.   

    获取到控件的RECT以后用ScreenToClient转换以后用SetWindowPos或者MoveWindow!
      

  15.   

    学习了,以前用过easysize,没想到codeproject还有那么多其它的代码呀。