请教移动图片会闪烁的问题
本帖最后由 yifuzhiming 于 2013-09-24 13:59:12 编辑
我在移动图片的时候,调用了this->InvalidateRect(this->m_paintbox_rect);结果在这个画图区域中会不停的刷新闪烁,我参照了网上的使用双缓存来解决问题,但是还不行,谢谢各位了
void SeatMapManagerDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(m_type != NONE)
{
}
else
{
//如果选中了对象,则移动对象
if (m_mouseInfo.bSelectObject)
{
CPoint tempoint;
tempoint.x = point.x - m_mouseInfo.pt.x;
tempoint.y = point.y - m_mouseInfo.pt.y;
this->m_ArrangeSeat.MoveSeat(tempoint);
m_mouseInfo.pt.x = point.x;
m_mouseInfo.pt.y = point.y;
this->InvalidateRect(this->m_paintbox_rect);
}else{
}
}
CDialogEx::OnMouseMove(nFlags, point);
}
void SeatMapManagerDlg::OnPaint()
{
int nWidth = 500;
int nHeight = 500;
int left = this->m_paintbox_rect.left;
int top = this->m_paintbox_rect.top;
CPaintDC dc(this);
CDC MemDC; //首先定义一个显示设备对象
CBitmap MemBitmap;//定义一个位图对象
//随后建立与屏幕显示兼容的内存显示设备
MemDC.CreateCompatibleDC(NULL);
//这时还不能绘图,因为没有地方画 ^_^
//下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小
MemBitmap.CreateCompatibleBitmap(&dc,500,500);
//将位图选入到内存显示设备中
//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
//先用背景色将位图清除干净,这里我用的是白色作为背景
//你也可以用自己应该用的颜色
MemDC.FillSolidRect(0,0,500,500,RGB(255,255,255));
//绘图
Graphics g(MemDC.m_hDC);
this->m_ArrangeSeat.Draw(&g,false,0,0,0);
//定义画笔
Pen newPen(Color(0,255,0), 3);
g.DrawRectangle(&newPen, 10, 10, 200, 100);
//g.FillRectangle(&newBrush,10, 10, 200, 100);
//将内存中的图拷贝到屏幕上进行显示
dc.BitBlt(left,top,nWidth,nHeight,&MemDC,0,0,SRCCOPY);
//绘图完成后的清理
MemBitmap.DeleteObject();
MemDC.DeleteDC();
CDialog::OnPaint();
}