请教大家一个问题,我现在MOUSEMOVE中实现,当鼠标移动动到某一点的时候,判断这个点在矩形内就显示矩形,不在就不显示,这个显示和不显示可以用什么函数实现,我的矩形是通过_dc.Rectangle(rect)来实现的.
比如这样的:
if (!m_rcLastCharacter.PtInRect(point))
{
不显示上次画的矩形;
}
else
{
        显示上次矩形;
}
画矩形是用的下面的方法画的:
int _oldROP2 = _dc.SetROP2(R2_NOTXORPEN);
COLORREF _oldBkColor = _dc.SetBkColor(RGB(0, 0, 255));_rc.left = _ChangeCharacterType.x - 5;
_rc.top = _ChangeCharacterType.y - 5;
_rc.right = _ChangeCharacterType.x + 5;
_rc.bottom = _ChangeCharacterType.y + 5;SwitchToScreenSpace(&_dc);
_dc.Rectangle(_rc);
m_rcLastCharacter = _rc;_dc.SetROP2(_oldROP2);
_dc.SetBkColor(_oldBkColor);想问问这个显示和不显示部分,怎么实现?

解决方案 »

  1.   

    用一个类标志变量m_bDrawRect初始为FALSE
    把画矩形做成一个成员函数 如DrawRect(CDC* pDC, ...); // XOR显示if   (!m_rcLastCharacter.PtInRect(point))
    {
        // 不显示
        if(m_bDrawRect){
            DrawRect(&_dc,...);
            m_bDrawRect = FALSE;
         }
    }
    else
    {
         // 显示
         if(!m_bDrawRect){
             DrawRect(&_dc,...);
             m_bDrawRect = TRUE;
         }
    }
    再在OnDraw中加 
    if(m_bDrawRect){
        DrawRect(&pDC,...);
    }
      

  2.   

    可以设置绘图方式为_dc.SetROP2(R2_NOT);
    显示与不显示时都重绘一次,如果你只有一个矩形|