我要实现的功能很简单,在基于对话框中的一个MFC程序中放上一个控件。在对话框初始化时加载上图片,然后实现在图片上画动态图,我使用双缓冲防止屏幕闪动
谢大家,我按照大家教我的方法做了做。想避免屏幕闪动,使用了双缓冲,代码如下:
void CHE2Dlg::OnPaint()
{
CDC* pMem=new CDC;
CBitmap* pBmp=new CBitmap;
CBitmap* pOldBmp;
CWnd *pWnd = GetDlgItem(IDC_PIC);//IDC_PIC为PICTRUE控件,我在对话框初始话时装载了图片
CDC *pDC =pWnd->GetDC();
pMem->CreateCompatibleDC(pDC);
pBmp->CreateCompatibleBitmap(pDC, 512, 512);
pOldBmp=pMem->SelectObject(pBmp);
CBrush brBlue(RGB(0,0,255));
CPen penBlue(PS_SOLID,1,RGB(255,0,0));
pMem->SelectObject(brBlue);
pMem->SelectObject(penBlue);
pMem->Rectangle(temp.x-4,temp.y-4,temp.x+4,temp.y+4);
pDC->BitBlt(0,0,512,512,pMem,0,0,SRCCOPY);
pMem->SelectObject(pOldBmp);
pBmp->DeleteObject() ;
pMem->DeleteDC();
temp.y+=1;
tempory=temp;//每刷新一次矩形向下移动一次
}
出现了以下问题
1:我原意是要绘图在IDC_PIC导入的图片上的,可现在发现画的矩形被图片遮盖了
2. 我只想要在IDC_PIC控件处,也就是图片上绘图更新,现在发现,在IDC_PIC外的背景变为透明了,狂晕!
现在不知道该如何处理了??????????为什么会这样啊
希望大家给我点意见,有源码就好
谢大家,我按照大家教我的方法做了做。想避免屏幕闪动,使用了双缓冲,代码如下:
void CHE2Dlg::OnPaint()
{
CDC* pMem=new CDC;
CBitmap* pBmp=new CBitmap;
CBitmap* pOldBmp;
CWnd *pWnd = GetDlgItem(IDC_PIC);//IDC_PIC为PICTRUE控件,我在对话框初始话时装载了图片
CDC *pDC =pWnd->GetDC();
pMem->CreateCompatibleDC(pDC);
pBmp->CreateCompatibleBitmap(pDC, 512, 512);
pOldBmp=pMem->SelectObject(pBmp);
CBrush brBlue(RGB(0,0,255));
CPen penBlue(PS_SOLID,1,RGB(255,0,0));
pMem->SelectObject(brBlue);
pMem->SelectObject(penBlue);
pMem->Rectangle(temp.x-4,temp.y-4,temp.x+4,temp.y+4);
pDC->BitBlt(0,0,512,512,pMem,0,0,SRCCOPY);
pMem->SelectObject(pOldBmp);
pBmp->DeleteObject() ;
pMem->DeleteDC();
temp.y+=1;
tempory=temp;//每刷新一次矩形向下移动一次
}
出现了以下问题
1:我原意是要绘图在IDC_PIC导入的图片上的,可现在发现画的矩形被图片遮盖了
2. 我只想要在IDC_PIC控件处,也就是图片上绘图更新,现在发现,在IDC_PIC外的背景变为透明了,狂晕!
现在不知道该如何处理了??????????为什么会这样啊
希望大家给我点意见,有源码就好
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货