主要代码如下:
//得到除任务栏的桌面大小
::SystemParametersInfo(SPI_GETWORKAREA,0,m_rcDeskTop,0); m_memDC=new CDC; m_bitmap=new CBitmap; m_nbmSize=0; m_bitmap->LoadBitmap(IDB_BOARD);
m_bitmap->GetBitmap(&m_bm); m_nbmWidth=m_bm.bmWidth;//得到位图宽度
m_nbmHeight=m_bm.bmHeight;//得到位图高度 m_wdc=new CWindowDC(NULL); m_memDC->CreateCompatibleDC(m_wdc); m_bitmap->m_hObject=::LoadImage(NULL,"skinboard.bmp",IMAGE_BITMAP,
m_nbmWidth,m_nbmHeight,LR_LOADFROMFILE); m_memDC->SelectObject(m_bitmap); //上面都是加载和拷贝位图的基本操作
//在OnTimer函数中,通过不断增加m_nbmSize来移动位图
void CTestDlg::OnTimer(UINT nIDEvent)
{
m_nbmSize++; m_wdc->BitBlt(m_rcDeskTop.right-m_nbmWidth-30,m_rcDeskTop.bottom-m_nbmSize,
m_nbmWidth,m_nbmSize,m_memDC,0,0,SRCCOPY); CDialog::OnTimer(nIDEvent); } 问题:位图移动后,有拖影,请问应该怎么解决此问题?请教各位大虾!!
//得到除任务栏的桌面大小
::SystemParametersInfo(SPI_GETWORKAREA,0,m_rcDeskTop,0); m_memDC=new CDC; m_bitmap=new CBitmap; m_nbmSize=0; m_bitmap->LoadBitmap(IDB_BOARD);
m_bitmap->GetBitmap(&m_bm); m_nbmWidth=m_bm.bmWidth;//得到位图宽度
m_nbmHeight=m_bm.bmHeight;//得到位图高度 m_wdc=new CWindowDC(NULL); m_memDC->CreateCompatibleDC(m_wdc); m_bitmap->m_hObject=::LoadImage(NULL,"skinboard.bmp",IMAGE_BITMAP,
m_nbmWidth,m_nbmHeight,LR_LOADFROMFILE); m_memDC->SelectObject(m_bitmap); //上面都是加载和拷贝位图的基本操作
//在OnTimer函数中,通过不断增加m_nbmSize来移动位图
void CTestDlg::OnTimer(UINT nIDEvent)
{
m_nbmSize++; m_wdc->BitBlt(m_rcDeskTop.right-m_nbmWidth-30,m_rcDeskTop.bottom-m_nbmSize,
m_nbmWidth,m_nbmSize,m_memDC,0,0,SRCCOPY); CDialog::OnTimer(nIDEvent); } 问题:位图移动后,有拖影,请问应该怎么解决此问题?请教各位大虾!!
绘图的操作挪到OnDraw里,在OnTimer里Invalidate
刷新下啊放在ontimer里看看,每秒刷新
画图部分放在onpaint里面
::InvalidateRect(0,NULL,0);
每次画图计算下会有拖影的区域,
用InvalidateRect