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

你可能感兴趣的:(关于GetClientRect和GetWindowRect 类的函数再总结)