[英]Drawing in WM_MOUSEMOVE
美好的一天,
绘制鼠标移动的最佳实践是什么? 在WM_MOUSEMOVE中执行绘图时,我看到了很多示例(也在MSDN上)。 但是我认为,更好的方法都是将WM_PAINT引入其中。
例:
版本1
case WM_MOUSEMOVE:
{
DummyFunctionForClientCoords();
DummyFunctionForDrawing();
}
break;
版本2
case WM_MOUSEMOVE:
{
DummyFunctionForClientCoords();
InvalidateRect(hwnd, &rc, TRUE); /* For sake of simplicity, update region is all area. */
}
break;
case WM_PAINT:
{
DummyFunctionForDrawing();
}
break;
也许这个问题是基于观点的,但是我想知道版本1与版本2的优缺点。
除非您有惊人的理由,否则应始终在WM_PAINT
处理程序中执行渲染。 如果更新区域为非空并且消息队列中没有其他更高优先级的消息,则根据需要生成WM_PAINT
消息。 这有两个直接后果:
InvalidateRect
多次调用合并为一个WM_PAINT
消息。 这样可以降低总体渲染成本。 您在版本2下发布的代码可以从系统提供的优化中受益。
版本1的一个缺点是,当系统决定生成WM_PAINT
消息时,它渲染到屏幕上的任何内容都会被覆盖。 这既浪费,又可能无法获得预期的结果。
WM_MOUSEMOVE
消息中的事件更高精度的鼠标移动事件,则可以调用GetMouseMovePointsEx来获取多达64个先前(中间)的鼠标指针位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.