我想利用双缓冲实现绘图,但有个问题。
我的绘图先载入一张比窗口小的图片,再在图片以外的区域画图之类的,我应该如何操作呢?
GetObject(hBitmap, sizeof(BITMAP), &bitmap) ;//得到要载入的图片
hMemDC = CreateCompatibleDC(dc) ;//创建memdc
SelectObject( hMemDC, hBitmap );//这里怎么办?memdc的大小好像已经固定了,其他地方没法画了。
我想先不把图片选进memdc,而是为它创建一个更大的hbitmap,但以后该怎么载入图片呢?
我的绘图先载入一张比窗口小的图片,再在图片以外的区域画图之类的,我应该如何操作呢?
GetObject(hBitmap, sizeof(BITMAP), &bitmap) ;//得到要载入的图片
hMemDC = CreateCompatibleDC(dc) ;//创建memdc
SelectObject( hMemDC, hBitmap );//这里怎么办?memdc的大小好像已经固定了,其他地方没法画了。
我想先不把图片选进memdc,而是为它创建一个更大的hbitmap,但以后该怎么载入图片呢?
CDC MemDC ;
MemDC.CreateCompatibleDC(pDC);
CRect rect;
pView->GetClientRect(&rect);//获取窗口矩形
CBitmap bmp; //内存中承载临时图象的位图
// bmp.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());//创建兼容位图
bmp.CreateCompatibleBitmap(pDC,pView->tPt.x-pView->sPt.x,pView->tPt.y-pView->sPt.y);//创建兼容位图
CBitmap *pOldBitmap=MemDC.SelectObject(&bmp); //将位图选择进内存DC
可以参考下,然后再修改
给你一个双缓冲的例子 是用GDI+做的
CRect rtAllWindow;
GetClientRect(rtAllWindow);
CPaintDC dc(this);
Bitmap bmp(rtAllWindow.Width(),rtAllWindow.Height());
Graphics memDC(&bmp);
memDC.DrawImage(贴张全屏的图)
memDC.DrawImage(在指定区域贴你的图片)
.
.
.
.
想画多少个都行 图片的画可以先都加载进来
GetClientRect(&rect);
backDC = new CDC;
backDC->CreateCompatibleDC(dc);
backBitmap = new CBitmap;
backBitmap->CreateCompatibleBitmap(dc, rect.cx, rect.cy);
backDC->SelectObject(backBitmap);
画bitmap应该再创建一个memdc
CDC memDC = new CDC;
memDC->CreateCompatibleDC(dc);
GetObject(hBitmap, sizeof(BITMAP), &bitmap);
SelectObject( memDC, hBitmap );
backDC->bitblt(memDC, .....);
backDC上还可以画其他的内容
最后将backDC直接显示出来,或是dc->bitblt(backDC,.....);