在一本书上看到:利用红色画刷填充鼠标拖动过程中所形成的矩形区域:1) CBrush brush(RGB(255,0,0));2) CClientDC dc(this);3) dc.FillRect(CRect(point1,point2),&brush);在第三个句子中,调用FillRect()函数。该函数的原型为:FillRect(LPCRECT lpRect,CBrush *pbrush);从该函数的原型可看出,其第一个参数要求为一个 LPCRECT 型指针,但在程序中,直接用的是CRect(point1,point2),而CRect 是类CRect的构造函数(它肯定不是CBrush类的成员函数)啊,构造函数都是无返回值的啊。这里的CRect到底是什么呢?

解决方案 »

  1.   

    CRect(point1,point2)应该理解成强制类型转换吧?
      

  2.   

    这里的CRect是要填充的矩形区域。
      

  3.   

    operator &
     Creates the intersection of CRect and a rectangle and returns the resulting CRect.
     
    重载了地址运算符,所以可以强制转换成功
      

  4.   

    先调用CRect构造函数生成了一个对象后 类型转换为LPCRECT  类型转换是系统做的
      

  5.   

    CRect类有一个重载的operator
    就是operator LPCRECT( ) const throw( );
    的你通过参数传递一个CRect对象时,如果参数类型是LPCRECT时,CRect可以进行自动的隐式类型转换.这就是为什么你觉得CRect应容如此方便的原因.我们在编程的时候也可以借鉴.