我用定时器定时刷新显示图片,单步调试的时候是正确显示的,全速运行时就是黑屏。这是什么原因呢?
//初始化设置
InitialDDraw()
{
/*
.....
....
..*/
}void CLCDPANEL::OnTimer(UINT nIDEvent) 

if(allfrash==0)
return;
allfrash=0;
DrawBK();
DrawBmp();
Flip();
CDialog::OnTimer(nIDEvent);
}
//画背景
void CLCDPANEL::DrawBK()
{
CWnd *pWnd=GetDlgItem(IDC_LCDBORDE); //获得IDC_LCDBORDE空间窗口指针
CRect rc;
pWnd->GetClientRect(rc);
CPoint pt=rc.CenterPoint(); CRect rect;
rect=rc;
HRESULT rval=lpDDSBack->Blt( &rect, lpDDSBk, NULL, DDBLT_WAIT, NULL);
if(rval == DDERR_SURFACELOST)    
lpDDSBack->Restore();
}
//画各个人物
void CLCDPANEL::DrawBmp()
{
CRect rect,rc;
HRESULT rval;
CWnd *pWnd=GetDlgItem(IDC_LCDBORDE); //获得IDC_LCDBORDE空间窗口指针
pWnd->GetClientRect(rc);
rect = rc;
CMainFrame *pMainWnd = (CMainFrame *)AfxGetMainWnd();
for(int i=0;i<=pMainWnd->posimage.cnt;i++)
{
for(int j=0;j<40;j++)
for(int k=0;k<4;k++)
{
if(pMainWnd->posimage.BmpPath[i]==m_Bmp.Bmppath[j][k])
{
rval=lpDDSBack->Blt( &rect, lpDDSBmp[j][k], NULL, DDBLT_WAIT|DDBLT_KEYSRC , NULL);
if(rval == DDERR_SURFACELOST) 
lpDDSBack->Restore(); }
}
}
}
void CLCDPANEL::Flip()
{
CWnd *pWnd=GetDlgItem(IDC_LCDBORDE); //获得IDC_LCDBORDE空间窗口指针
CRect Window;
pWnd->GetClientRect(Window); POINT pt;
pt.x=pt.y=0;
ClientToScreen(&pt);
OffsetRect(&Window, pt.x, pt.y); HRESULT rval=lpDDSFront->Blt(&Window, lpDDSBack, &backrect, DDBLT_WAIT, NULL);
if(rval == DDERR_SURFACELOST) 
lpDDSFront->Restore();
return ;}