Posted on 2010-08-28 18:39
幻海蓝梦 阅读(2853)
评论(0) 编辑 收藏 所属分类:
C++
1)CRect rect;
GetClientRect(rect);
2)CRect rect;
GetClientRect(&rect);
....
为什么这两段代码的效果一样??
1.因为 CRect 重载了到 LPRECT 的操作:
CRect::operator LPRECT( ); GetClientRect(rect); 隐含的调用了该操作。
摘自 : http://topic.csdn.net/t/20020816/13/946020.html
2.首先要知道 GetClientRect 函数的原型,如下:
void GetClientRect( LPRECT lpRect ) const;
说明这个函数的参数是 LPRECT, 而并非 CRect 或是 CRect* ,那为什么你所说的两种情况都正确呢!
http://msnpiki.msnfanatic.com/index.php/Main_Page-->
s New Roman;"> 1 )、对于 GetClientRect(rc) ,这里的参数是 CRect ,因为 CRect 类里有个 LPRECT 运算符重载( operator LPRECT() ),所以当传一个 CRect 变量给这个函数的时候,这个变量会自动转换成 LPRECT.
2) 、对于 GetClientRect(&rc) 那就更好理解了,因为还有一点, CRect 是从 RECT 继承的,所以你传一个 CRect* 给这个函数的时候,它会自动转换成其基类形式( RECT )的地址 , 所以也是对的!
文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/3_program/c++/cppjs/20100630/288201.html