我的程序是基于对话框的,上面摆了很多控件,如何让这些控件的大小随着屏幕的改变而改变?
现有一种办法就是对控件一个一个的设置SetWindowPos(),但是控件太多,很麻烦,有没有好的办法?

解决方案 »

  1.   

    本人上次搜索了N多以前的帖子也没找到....这次又关注ing
      

  2.   

    其实改分辨率并不会影响窗口的布局吧。好像使用“大字体”和“小字体”倒是会影响dialog的显示尺寸。如果窗口的尺寸会发生变化,好像一般只能用movewindow()等等搞定,暂时还不知道其他的办法。其实你可以这样,在dialog上放控件的时候随手乱放,不要去布局,然后自己写一个布局函数比如Relayout()等等,在这个函数里区分对待各种情况,用movewindow()把控件放到合适的地方。别的办法还暂时没见到。
      

  3.   

    保留改变前后的两个分辨率算出之间的比例a.
    使用getwindo()函数.
    得到第一个子窗口(),循环至最后一个子窗口.
    得到子窗口在dialog上的相对位置,与a相乘,在用setwindowpos
      

  4.   

    chenzhou35(vcworm.51.net) :谢谢你,你可能误会了。不同的分辨率确实会影响。如在1024*768能完全显示,在800*600不一定能显示完全。
      

  5.   

    我刚刚作了一个,实际上就是动态的定义你的空间大小及其位置:
    CWnd *pwnd = GetDlgItem(IDC_STATIC_PICTURE);
    int ox, oy, width, height;
       CRect rc,rc1;
    GetClientRect(&rc);
    if(pwnd->GetSafeHwnd())
    {
    height = cy*2/3;
    width = height*194/191;
    oy = rc.top + rc.Height()/2 - height/1.75;
    ox = rc.left + rc.Width()/2. - width/2;
    pwnd->MoveWindow(ox, oy, width, height, false);
    }
      

  6.   

    控件太多当然是比较麻烦,但是只能这样做
    唯一可以偷懒的方法就是定义成数组,把你以前定义的那么控制变量改成数组变量,但是这样一来你在ClassWizard里面看不到哪个控件与哪个变量关联,可能可读性差点,但是如果实在太多的话就只能这样做了
    比如:
    你以前的内容:CEdit m_edCtl1;
    在DDX里面有:DDX
    还有消息里面的东西这些都要改。
      

  7.   


    GetWindow(WS_CHILE)
    GetNextWindow
    函数循环得到控件的窗口
    在设置可以把
      

  8.   

    先得到当前的分辨率:
       int cy = GetSystemMetric( SM_CYSCREEN);
       int cx = GetSystemmetric( SM_CXSCREEN);
    然后跟据屏幕的大小计算对话框的大小和各个控件的位置.
      

  9.   

    下面是比较完整的代码,还不明白我就没办法了
    CRect rectChild;
    CWnd* pWndChild = GetWindow(GW_CHILD);
    while (pWndChild)
    {     
       pWndChild->GetWindowRect(rectChild);
       //修改rectChild
       pWndChild->MoveWindow(rectChild);
       pWndChild = pWndChild->GetNextWindow();
    }记得给分,呵呵