关于GetClientRect和GetWindowRect 类的函数再总结

 

1. 以对话框上的一个控件为对象讨论:

假设对话框的大小为rcClient,控件的大小rcCtrl;

也就是GetWindowRect( &rcClient );

■ GetWindowRect:

         m_ctrl.GetWindowRect( &rcCtrl);//获取到的是控件相对于整个屏幕的坐标.rcCtrl   

       ScreenToClient( &rcCtrl);//将坐标转化为客户区的坐标;也是一个相对坐标

        //rcCtrl.left = rcCtrl.left - rcClient.left - 客户区左边框

       //rcCtrl.top = rcCtrl.top - rcClient.top - 标题栏的高度

        m_ctrl.MoveWindow( &rcCtrl);//m_ctrl移到rc指定的位置(这个位置相对于客户区)

■ GetClientRect:

m_ctrl.GetClientRect(&rcCtrl);//获取到的是控件的大小.

m_ctrl.ClientToScreen(&rcCtrl);//rcCtrl.left  += rcClient.left + 客户区的左边框;

//rcCtrl.top  += rcClient.top  + 标题栏的高度;

总结:1. 以控件为例GetWindowRect是获取指定控件相对于屏幕的坐标位置.这个位置一般只是作为一个"中间位置".因为Windows API并没有直接对此进行操作的函数.通常是使用ScreenToClient来进行转换,使得MoveWindowSetWindowPos等一系列函数进行移动.

2. 以对话框为例(对话框不存在父窗口),GetWindowRect得到的也是对话框相对于屏幕的坐标位置.因为这里不存在边框等问题,所以这个值可以直接利用MoveWindow来进行操作.

3. 当我们在自绘控件的时候,需要自己向父窗口发送刷新消息,使得父窗口来刷新控件.这是需要用到刷新区域.在使用上述函数的时候,一定要区分到底是哪个对象的函数.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值