【发布时间】:2018-06-13 17:51:35
【问题描述】:
我试图在 MFC 中围绕当前光标的位置绘制一个矩形。当我移动鼠标时它可以工作,但是当我停止移动鼠标时矩形消失了。
void CView1::OnMouseMove(UINT nFlags, CPoint point)
{
if (!m_mouse_tracking)
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.dwFlags = TME_HOVER;
tme.hwndTrack = this->m_hWnd;
tme.dwHoverTime = HOVER_DEFAULT;
if (::_TrackMouseEvent(&tme))
{
m_mouse_tracking = true;
// Draw the 1st rect
draw_rect_(m_pDC);
}
}
else
{
// Draw new rect and erase old rect
RedrawWindow(NULL, NULL, RDW_INVALIDATE);
draw_rect_(m_pDC);
}
}
void CView1::OnMouseHover(UINT nFlags, CPoint point)
{
m_mouse_tracking = false;
draw_rect_(m_pDC);
}
我的源代码有问题吗?请帮我。
【问题讨论】:
-
您调用
RedrawWindow使客户区无效,这将导致重绘一段时间draw_rect_()返回。这可能不是你所期望的。试试RDW_UPDATENOW,但实际上你应该在WM_PAINT中完成所有绘画,而在其他任何地方你只使客户区无效。 -
m_pDC是内存 DC 吗?有内存位图吗?如果不是MCVE,请提供有关变量和函数的更多信息。 -
如果矩形足够小,改变光标本身不是一个好主意吗?