【发布时间】:2013-02-24 01:44:04
【问题描述】:
在 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;
}
}
【问题讨论】:
-
MSDN中的评论与你的问题无关。
-
绘制选择矩形的技巧是将绘图笔设置为 XOR 模式
SetROP2(hDC, R2_XORPEN);并使用空心画笔。第一次绘制将绘制一个反转原始屏幕像素的直线矩形,第二次在同一矩形上绘制将恢复原始像素。参考这个例子:programmersheaven.com/mb/windows/104684/104684/… -
如果您在项目中使用 MFC,您可以简单地使用
CRectTracker类。
标签: windows drawing message gdi