首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

请问移动图片会闪烁的有关问题

2013-09-28 
请教移动图片会闪烁的问题本帖最后由 yifuzhiming 于 2013-09-24 13:59:12 编辑我在移动图片的时候,调用了

请教移动图片会闪烁的问题
本帖最后由 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);
}


这是我的Onpaint函数

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();
}

[解决办法]
移动图片需要用虚框来完成,看一下CRectTracker。

热点排行