我在MFC下调用如下语句能够成功CRect rect;
GetClientRect(rect);而函数原型却为void CWnd::GetWindowRect(
   LPRECT lpRect 
) const;这样的调用为什么不会报错,MFC在背后做了什么工作??

解决方案 »

  1.   

    看看你编写GetWindowRect这句所在的背景就知道了,这是父类的method
      

  2.   

    我的意思是我传入的参数是CRect,而函数需要LPRECT,MFC在背后做了什么工作??
      

  3.   

    GetClientRect这个函数你到MSDN去看下,它不是一个类的成员函数
      

  4.   

    CRect有个类型转换函数LPRECT,C++里可以做这种类型转换重载的。
      

  5.   

    class CRect : public tagRECT
    {public:
    // convert between CRect and LPRECT/LPCRECT (no need for &)
    operator LPRECT() throw();
    operator LPCRECT() const throw();
    }Crect 重载了 LPRECT 操作符, 一个 CRect 对象可以直接转换成 LPRECT  类型
      

  6.   


    BOOL GetClientRect(          HWND hWnd,
        LPRECT lpRect
    );
      

  7.   

    你那个是Platform SDK,我说的是CWnd::GetClientRect
      

  8.   


    ATLTYPES_INLINE CRect::operator LPRECT() throw()
    { return this; }