子窗口与父窗口的位置调整

zero_226 2012-05-09 11:04:52
wtl+vs2005的环境下,用了一个ctab,包含两个tab页,每个tab页上显示一个子窗口,但是现在子窗口的位置出现了问题,总不能刚刚好的显示在tab页理,如果我调整了rect的值让之刚刚好显示正确,那么如果换了一个不同size的电脑屏幕,就会出现问题。主要代码如下,请大家帮忙看看

// 获得tab的客户区大小
RECT rs;
m_tab.GetClientRect(&rs);
ScreenToClient(&rs);

// 调整子窗口在父窗口中的位置
rs.left += 453;
rs.top += 202;
rs.right += 460;
rs.bottom += 183;

//设置子对话框尺寸并移动到指定位置
//m_dlg1.MoveWindow(&rs);
//m_dlg2.MoveWindow(&rs);
...全文
317 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zero_226 2012-05-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

不妨用CRect试试
CRect rs;
m_tab.GetClientRect(rs);

rs.left+=453;
......

m_dlg1.MoveWindow(rs);
m_dlg2.MoveWindow(rs);
子窗口的style需设定为child,并且大小不要超过ctab
[/Quote]
thanks first。
那个用CRect效果是一样的,子窗口的style已经设置为child了,至于大小超过不超过ctab,这个有关系吗?我觉得MoveWindows的时候那个大小是会改变的。
liliboy9527 2012-05-09
  • 打赏
  • 举报
回复
不妨用CRect试试
CRect rs;
m_tab.GetClientRect(rs);

rs.left+=453;
......

m_dlg1.MoveWindow(rs);
m_dlg2.MoveWindow(rs);
子窗口的style需设定为child,并且大小不要超过ctab
zero_226 2012-05-09
  • 打赏
  • 举报
回复
哎,这些乱七八糟的坐标系,还是没搞清楚呢,谢谢各位了,非常感谢。
向立天 2012-05-09
  • 打赏
  • 举报
回复
GetClientRect获取的是客户区的坐标
你再用ScreenToClient不就弄乱了
zhllxt 2012-05-09
  • 打赏
  • 举报
回复
m_tab.GetClientRect(&rs);//获得的矩形区域就是(0,0,xxx,xxx)
ScreenToClient(&rs);//这句完全多余,只有在用GetWindowRect后用ScreenToClient才有用处

// 调整子窗口在父窗口中的位置
rs.left += 453;//因为GetClientRect获得的矩形区域就是(0,0,xxx,xxx),再偏移矩形完全多余。

rs.top += 202;
rs.right += 460;
rs.bottom += 183;

zero_226 2012-05-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

m_tab.GetClientRect(&rs);
ScreenToClient(&rs);

// 调整子窗口在父窗口中的位置
rs.left += 453;
rs.top += 202;
rs.right += 460;
r……
[/Quote]
非常感谢,按照你的改代码之后,问题解决了。
如果你没有太忙,能不能请教一下原因?
zhllxt 2012-05-09
  • 打赏
  • 举报
回复
m_tab.GetClientRect(&rs);
ScreenToClient(&rs);

// 调整子窗口在父窗口中的位置
rs.left += 453;
rs.top += 202;
rs.right += 460;
rs.bottom += 183;

改为:
m_tab.GetClientRect(&rs);
rs.top += 24;
后面代码全部去掉

15,979

社区成员

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

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