我在对话框上移动控件遇到了问题,
我的目标是无论显示器分辩率怎样,对话框在屏幕上的大小基本不变,其中就要移动对话框
结果就出现了对于同一个目标矩形,两个控件移不到一块去的问题。
请高手指点一下,谢谢代码如下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);
.......
.....
}
我的目标是无论显示器分辩率怎样,对话框在屏幕上的大小基本不变,其中就要移动对话框
结果就出现了对于同一个目标矩形,两个控件移不到一块去的问题。
请高手指点一下,谢谢代码如下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);
.......
.....
}
GetDlgItem(IDC_CHECK1)->MoveWindow(778,55,821,66);
GetDlgItem(IDC_STATIC3)->MoveWindow(778,55,821,66);
还是不行
GetDlgItem(IDC_CHECK1)->MoveWindow(778,55,821,66);
GetDlgItem(IDC_STATIC3)->MoveWindow(778,55,821,66);
GetDlgItem(IDC_STATIC2)->MoveWindow(1,1,100,100);
GetDlgItem(IDC_STATIC1)->MoveWindow(1,1,100,100);
试过可以的吗?
怎么会移不到一块呢?
countrect(scale, 373,42,43,11,clineRect,newrect);
函数代码能贴出来吗?
GetDlgItem(IDC_CHECK1)->MoveWindow(778,55,821,66);
GetDlgItem(IDC_STATIC3)->MoveWindow(778,55,821,66);
但从你给出的代码可以得知你的一点疏忽: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);
其实我本身并不是想把两个控件挪到一起去,他们分别是在上下位置,只是移动后他们的位移并不相同,为了了解是什么原因,我就将两控件的目标矩形放到一起去了,还是移不到一快去
2 MoveWindow的参数应该是(左, 上, 右,下)吧,矩形高度应该就是 66 - 55 阿
int x,
int y,
int nWidth,
int nHeight, // 你看,你理解错了吧?! 呵呵
BOOL bRepaint = TRUE
);