请高手帮忙:vc中的getclientrect函数

来源:百度知道 编辑:UC知道 时间:2024/05/15 16:27:38
有本书上有如下语句:
CWnd *pWnd=GetDlgItem(IDC_DRAW);
CRect reClient;
pWnd->GetClientRect(reClient);
编译正确,没有错误,也没用警告。
但是在编程的时候,vc提醒的GetClientRect函数原型位:void GetClientRect(LPRECT lpRect);该函数的参数应该是指向RECT结构的指针,为什么在此处用了CRect类的变量也可以。
另外将上述程序的第三句改成pWnd->GetClientRect(&reClient);
即加了一个取地址符,编译也正确,没有错误,也没警告。
请问大虾们:这个函数到底该怎么用,还有RECT结构与CRect类的区别,为什么在此处仿佛可以互换?

CRect类给了我们这样的机会
在需要传递RECT结构的时候,可以直接给CRect对象
因为class CRect : public tagRECT,而且没有增加任何数据成员,所以它和RECT数据结构是一样的。使用&操作符得到的是该对象的地址,也就是LPRECT指针。
同时,在需要传递LPRECT指针的时候也可以直接传递CRect对象,
因为CRect有操作符来实现类型转换
operator LPRECT() throw() { return this; }
operator LPCRECT() const throw() { return this; }
它们把对象的指针直接返回去了,因此在需要LPRECT指针的地方可以直接使用CRect对象。
同样使用这种方式的还有CString可以放在任何需要LPCTSTR的地方。