用bitblt画背景图不成功!
以前画背景图,一般都在onPaint(), Erase背景时用,一般用CDC memDC,
画好后,再bitblt到背景上,从没出过问题..
现在需要用到timer来控件背景中某一块区域色彩变化(不用控件)
就设2000ms刷新背景,但就是不成功..
没办法,写了个测试程序,才发现只有第一次能成功.后来就不正确了..
initdialog里做初始化:
m_BkgMap.LoadBitmap( IDB_TEST ); //IDB_TEST为一张黄色的图,现在做得和窗口一样大来测试
m_TimeRect = CRect(40, 40, 40+65, 40+60 );
SetTimer( 1, 2000, NULL );
在ontimer()中调用此函数:
void CmyestDlg::showTime( )
{
static int testit = 1;
CDC *myDC = GetDC();
CDC memDC;
memDC.CreateCompatibleDC(myDC);
#if 0
//如果每次都选入图,就成功.
CBitmap tmpBmp;
tmpBmp.LoadBitmap( IDB_TEST );
CBitmap *oldBmp = memDC.SelectObject(&tmpBmp);
#else
//m_BkgMap已经事先选入的,就只能第1次成功.(m_BkgMap没在其他地方用)
CBitmap *oldBmp = memDC.SelectObject(&m_BkgMap);
#endif
if( testit % 2 )
{
myDC->BitBlt(m_TimeRect.left, m_TimeRect.top, m_TimeRect.Width(), m_TimeRect.Height(), &memDC,m_TimeRect.left, m_TimeRect.top,SRCCOPY);
TRACE0("do it---\n");
goto abcde;
}
memDC.FillSolidRect(m_TimeRect, RGB(255,0,0));
myDC->BitBlt(m_TimeRect.left, m_TimeRect.top, m_TimeRect.Width(), m_TimeRect.Height(), &memDC,m_TimeRect.left, m_TimeRect.top,SRCCOPY);
abcde:
testit ++;
memDC.SelectObject( oldBmp );
memDC.DeleteDC();
}
这只是一个测试程序,按逻辑应该是显示黄,红,黄,红....
但真实的却是黄,红,红,红....