关于没有WM_PAINT消息的绘图的问题

时间:2013-03-08 13:39:19

标签: windows drawing message gdi device-context

在MSDN中,我读了这个

  

在不使用WM_PAINT消息绘图时,通常是应用程序   不会使窗口无效。相反,它以这种方式绘制   它可以轻松恢复窗口并删除图纸。

这意味着什么?因为我写了一个GIS程序,我想实现“放大”功能, 鼠标左键向下移动并移动鼠标绘制一个矩形,它绘制一个矩形但矩形覆盖地图,首先我认为这是因为矩形不透明,然后我使用AlphaBlend()绘制一个透明矩形,它是相同。 我该怎么办?

draw a rectangle

LRESULT OnMouseMove(UINT nflags, CPoint point)
{
    if (m_bZoomInMode)
    {
        m_curScreenPoint.x = point.x;
        m_curScreenPoint.y = point.y;
        HDC hdc = GetDC();
        SelectObject(hdc, (HBRUSH)NULL_BRUSH);
        Rectangle(hdc, m_startScreenPoint.x, m_startScreenPoint.y, point.x, point.y);
        ReleaseDC(hdc);
        return 0;
    }
}

1 个答案:

答案 0 :(得分:1)

要绘制矩形,可以绘制4条线。或者使用清晰的画笔 - 使用画笔样式BS_HOLLOW

要解决的另一个问题是,当用户移动鼠标并且缩放矩形将移动时,您将需要重新绘制下面的内容。这样做如下:

  1. 调用InvalidateRect为缩放矩形的上一个位置传递一个矩形。
  2. 调用UpdateRect强制进行绘画循环并绘制上一个缩放矩形下的内容。
  3. 绘制新的缩放矩形。