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

有本书上有如下语句:CWnd*pWnd=GetDlgItem(IDC_DRAW);CRectreClient;pWnd->GetClientRect(reClient);... 有本书上有如下语句:
CWnd *pWnd=GetDlgItem(IDC_DRAW);
CRect reClient;
pWnd->GetClientRect(reClient);
编译正确,没有错误,也没用警告。
但是在编程的时候,vc提醒的GetClientRect函数原型位:void GetClientRect(LPRECT lpRect);该函数的参数应该是指向RECT结构的指针,为什么在此处用了CRect类的变量也可以。
另外将上述程序的第三句改成pWnd->GetClientRect(&reClient);
即加了一个取地址符,编译也正确,没有错误,也没警告。
请问大虾们:这个函数到底该怎么用,还有RECT结构与CRect类的区别,为什么在此处仿佛可以互换?
展开
 我来答
wawoo2007
2008-03-21 · TA获得超过626个赞
知道小有建树答主
回答量:465
采纳率:0%
帮助的人:638万
展开全部
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的地方。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式