我在对话框上移动控件遇到了问题,
我的目标是无论显示器分辩率怎样,对话框在屏幕上的大小基本不变,其中就要移动对话框
结果就出现了对于同一个目标矩形,两个控件移不到一块去的问题。
请高手指点一下,谢谢代码如下BOOL CCurDlg::OnInitDialog() 
{
float cx,cy;
CDialog::OnInitDialog();
cx = GetSystemMetrics(SM_CXSCREEN);
cy = GetSystemMetrics(SM_CYSCREEN);
MoveWindow((int)(cx * (1 - Xscale) / 2), (int)(cy * (1 - Yscale) / 2),(int)(cx * Xscale), (int)(cy * Yscale)) ;
float scale = cx / 800;
CRect  newrect, clineRect;
GetClientRect(clineRect);
countrect(scale, 373,42,43,11,clineRect,newrect); // 用来计算目标矩形的
GetDlgItem(IDC_CHECK1)->MoveWindow(newrect.left,newrect.top,newrect.right,newrect.bottom);
GetDlgItem(IDC_STATIC3)->MoveWindow(newrect.left,newrect.top,newrect.right,newrect.bottom);
.......
.....
}

解决方案 »

  1.   

    先给定newrect一个值,看看是否有问题,可以判断那一步出了错
      

  2.   

    我把上面两句改成
    GetDlgItem(IDC_CHECK1)->MoveWindow(778,55,821,66);
    GetDlgItem(IDC_STATIC3)->MoveWindow(778,55,821,66);
    还是不行
      

  3.   

    那先不移动对话框再试试,然后再试试把这两句放到别的函数中试试
    GetDlgItem(IDC_CHECK1)->MoveWindow(778,55,821,66);
    GetDlgItem(IDC_STATIC3)->MoveWindow(778,55,821,66);
      

  4.   

    GetDlgItem(IDC_BUTTON2)->MoveWindow(1,1,100,100);
    GetDlgItem(IDC_STATIC2)->MoveWindow(1,1,100,100);
             GetDlgItem(IDC_STATIC1)->MoveWindow(1,1,100,100);
    试过可以的吗?
    怎么会移不到一块呢?
    countrect(scale, 373,42,43,11,clineRect,newrect);
    函数代码能贴出来吗?
      

  5.   

    先直接移动控件,应该可以移到一起的
    GetDlgItem(IDC_CHECK1)->MoveWindow(778,55,821,66);
    GetDlgItem(IDC_STATIC3)->MoveWindow(778,55,821,66);
      

  6.   

    我不清楚你所谓的不能移到一起究竟是个什么现象,
    但从你给出的代码可以得知你的一点疏忽:1、你想过没有你这样把它们移到一起,
       对话框初始化时,IDC_STATIC3会遮盖住IDC_CHECK1 。
    2、
       你没有发觉你给的矩形的高度(66)对一个IDC_CHECK1而言太高了么,
       我的实验发现IDC_CHECK会被放置到矩形区域的底部;
       而IDC_STATIC3会被放置到矩形区域的顶部。
       
        int cyChar = 16;
        GetDlgItem(IDC_STATIC3)->MoveWindow(778,55,821,cyChar,TRUE);
        
        int nRatio = 3;//你试着改变这个数的大小就会发现
        GetDlgItem(IDC_CHECK1)->MoveWindow(778,55,821,nRatio*cyChar,TRUE);
      

  7.   

    不好意思,现在才回,
    其实我本身并不是想把两个控件挪到一起去,他们分别是在上下位置,只是移动后他们的位移并不相同,为了了解是什么原因,我就将两控件的目标矩形放到一起去了,还是移不到一快去
    2 MoveWindow的参数应该是(左, 上, 右,下)吧,矩形高度应该就是 66 - 55 阿
      

  8.   

    void MoveWindow(
       int x,
       int y,
       int nWidth,
       int nHeight, // 你看,你理解错了吧?! 呵呵
       BOOL bRepaint = TRUE 
    );