调整窗口大小

GetWindowRect(LPRECT)GetClientRect(LPRECT)ScreenToClient(LPRECT)MoveWindow(LPRECT)。(注:这里四个函数的参数既可以是CRect,也可以是CRect*

CWnd::GetWindowRect() 的作用是获取CWnd 窗口的坐标位置,这个位置是以屏幕左上角为原点。(顺便说一下,在窗口OnInitDialog 函数执行的时候,窗口的左上角是与屏幕左上角相重合的,在OnInitDialog 执行结束之后才被移动到屏幕中央并显示。)

CWnd::GetClientRect() 的作用也是获取CWnd 窗口的坐标位置,但是这个位置是以该CWnd 窗口自己的客户区(不包括框架)左上角为原点,也就是说用这个函数获取的CRect left top 都一定是0.

用上面两个函数获取到了窗口的坐标CRect 之后、可以通过对CRect topleftrightbottom 进行修改来设置一个想要的窗口的大小与位置。最后用MoveWindow() 函数就可以把窗口移动到新的CRect 指定的矩形区里去、并改变大小了。

假设现在有一个CDialog m_ChildDlg,则可以 m_ChildDlg.MoveWindow(rect); 注意,这里面的rect 必须是以m_ChildDlg 的父窗口为参照系的坐标位置。如果m_ChildDlg 没有父窗口,那么屏幕桌面就是它的父窗口。这时可以直接 m_ChildDlg.GetWindowRect(rect); m_ChildDlg.MoveWindow(rect);

但如果m_ChildDlg 有自己的父窗口呢?分两种情况:

1)、m_ChildDlg 的左上角顶点坐标与其父窗口的客户区的左上角顶点坐标重合。这时可以m_ChildDlg.GetClientRect(rect); m_ChildDlg.MoveWindow(rect);

2)、否则。假设其父窗口是CDialog m_PDlg,这时必须m_ChildDlg.GetWindowRect(rect); 然后m_PDlg.ScreenToClient(rect); 最后才能m_ChildDlg.MoveWindow(rect);

如果MoveWindow之后,界面上显示有问题,不妨试一下InvalidateRect(rect);//添加重绘区。UpdateWindow(); //发送并立即处理WM_PAINT,使重绘区重画。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值