请高手帮忙: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类的区别,为什么在此处仿佛可以互换? 展开
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的地方。
在需要传递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的地方。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询