在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;
}
}
答案 0 :(得分:1)
要绘制矩形,可以绘制4条线。或者使用清晰的画笔 - 使用画笔样式BS_HOLLOW
。
要解决的另一个问题是,当用户移动鼠标并且缩放矩形将移动时,您将需要重新绘制下面的内容。这样做如下:
InvalidateRect
为缩放矩形的上一个位置传递一个矩形。UpdateRect
强制进行绘画循环并绘制上一个缩放矩形下的内容。