请教关于用MoveWindow移动控件的问题

oyxdl07 2005-01-21 03:53:05
我在对话框上移动控件遇到了问题,
我的目标是无论显示器分辩率怎样,对话框在屏幕上的大小基本不变,其中就要移动对话框
结果就出现了对于同一个目标矩形,两个控件移不到一块去的问题。
请高手指点一下,谢谢

代码如下

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);
.......
.....
}
...全文
294 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanqing 2005-01-22
  • 打赏
  • 举报
回复
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);
函数代码能贴出来吗?

I_Love_CPP 2005-01-22
  • 打赏
  • 举报
回复
void MoveWindow(
int x,
int y,
int nWidth,
int nHeight, // 你看,你理解错了吧?! 呵呵
BOOL bRepaint = TRUE
);
oyxdl07 2005-01-22
  • 打赏
  • 举报
回复
不好意思,现在才回,
其实我本身并不是想把两个控件挪到一起去,他们分别是在上下位置,只是移动后他们的位移并不相同,为了了解是什么原因,我就将两控件的目标矩形放到一起去了,还是移不到一快去
2 MoveWindow的参数应该是(左, 上, 右,下)吧,矩形高度应该就是 66 - 55 阿
I_Love_CPP 2005-01-22
  • 打赏
  • 举报
回复
我不清楚你所谓的不能移到一起究竟是个什么现象,
但从你给出的代码可以得知你的一点疏忽:

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);
oyljerry 2005-01-22
  • 打赏
  • 举报
回复
先直接移动控件,应该可以移到一起的
GetDlgItem(IDC_CHECK1)->MoveWindow(778,55,821,66);
GetDlgItem(IDC_STATIC3)->MoveWindow(778,55,821,66);
erben 2005-01-21
  • 打赏
  • 举报
回复
那先不移动对话框再试试,然后再试试把这两句放到别的函数中试试
GetDlgItem(IDC_CHECK1)->MoveWindow(778,55,821,66);
GetDlgItem(IDC_STATIC3)->MoveWindow(778,55,821,66);
fanqing 2005-01-21
  • 打赏
  • 举报
回复
关注
oyxdl07 2005-01-21
  • 打赏
  • 举报
回复
我把上面两句改成
GetDlgItem(IDC_CHECK1)->MoveWindow(778,55,821,66);
GetDlgItem(IDC_STATIC3)->MoveWindow(778,55,821,66);
还是不行
erben 2005-01-21
  • 打赏
  • 举报
回复
先给定newrect一个值,看看是否有问题,可以判断那一步出了错

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧