【发布时间】:2014-01-23 12:50:16
【问题描述】:
我的代码有问题。我已经为拖放创建了一个类,但是在拖动对象期间,我看到正在拖动的对象出现烦人的闪烁效果
void CDragDropListBox::DrawDragRect(CPoint point, CDragItem* DragItem,SIZE Size)
{
CDC* pDC = GetDC();
ScreenToClient(&point);
//Rect centered under mouse pointer
point.x -= Size.cx/2;
point.y -= Size.cy/2;
CRect rectFull(point,m_RectSize);
//Delete previous rect
ClientToScreen(&m_OldRect);
_DstWnd->ScreenToClient(&m_OldRect);
_DstWnd->InvalidateRect(m_OldRect, true);
_DstWnd->UpdateWindow();
//Draw new rect based on mouse position
DrawSelectFrame(pDC,rectFull);
DrawSingleItem(DragItem,pDC,rectFull);
m_OldRect = rectFull;
}
在我的代码中,每次我移动鼠标时,我都会删除之前绘制的拖动矩形并绘制一个新的,但是闪烁非常挑剔...... 有什么我可以做的吗?
【问题讨论】:
-
当然,您的 UpdateWindow() 调用会强制窗口重新绘制而不显示矩形。然后你再次绘制矩形。像廉价汽车旅馆一样闪烁。使 WM_PAINT 处理程序意识到必须绘制矩形是解决方法。使用 InvalidateRect() 与新旧矩形的并集来请求更新。
-
对不起,我不明白。 InvalidateRect 采用单个 rect 参数,我不明白如何使用它来升级两个 rect。
标签: visual-studio-2010 visual-c++ mfc drag-and-drop flicker