0

在 MSDN 中,我读到了这个

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

这是什么意思 ?因为我写了一个GIS程序,我想实现“放大”功能,鼠标左键向下移动鼠标绘制一个矩形,它正在绘制一个矩形但是矩形覆盖了地图,首先我认为是因为矩形是不透明的,那我用 AlphaBlend() 画一个透明的矩形,也是一样的。我应该怎么办 ?

画一个矩形

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;
    }
}
4

1 回答 1

1

要绘制矩形,您可以绘制 4 条线。或者使用透明画笔——即使用画笔样式BS_HOLLOW

另一个要解决的问题是,当用户移动鼠标时,缩放矩形会移动,您需要重新绘制下面的内容。执行以下操作:

  1. 调用InvalidateRect为缩放矩形的先前位置传递一个矩形。
  2. 要求UpdateRect强制绘制循环并绘制上一个缩放矩形下方的内容。
  3. 绘制新的缩放矩形。
于 2013-03-08T14:08:28.977 回答