昨天晚上博客园好像打不开。。。所以一大早赶快起来补昨天的作业。。。。。
今天的任务。。。
1、利用双缓冲实现图片特效(例如:百叶窗,等效果)
2、利用mciSendCommand这个结构体写一个播放器。。。
当然是全部封装起来。。。呵呵。。。
昨天的:
先建立一个DBuffer对话框工程
首先创建一个内存画布的对象(CDC)封装起来;
class CMemDC:public CDC
{
private:
CBitmap m_Bitmap;
CDC* m_pDC;
CRect m_Rect;
public:
CMemDC(CDC *pDC, const CRect& rect)
{
m_pDC = pDC;
m_Rect = rect;
m_Bitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
CreateCompatibleDC(pDC);
SelectObject(m_Bitmap);
}
~CMemDC()
{
m_pDC->BitBlt(0,0,m_Rect.Width(),m_Rect.Height(),this,m_Rect.left,m_Rect.top,SRCCOPY);
}
};
在DBufferDlg.h中声明SetBitmap()方法实现绘图操作
void CDBufferDlg::SetBitmap()
{
CRect rect;
GetClientRect(&rect);
CDC *pDC=GetDC();
CMemDC memDC(pDC,rect);
CDC cDC;
cDC.CreateCompatibleDC(pDC);
cDC.SelectObject(&m_Bitmap[m_Mode]);
memDC.BitBlt(x,y,m_hBitmap->bmWidth,m_hBitmap->bmHeight,&cDC,0,0,SRCCOPY);
}
遇到的问题就是:刚开始没有创建一个内存画布对象,而是在CDBufferDlg类中建立一个方法来实现内存画布
由此导致了单次创建了内存画布对象,所以仔细看的话还是有一点闪烁的效果。。。。。