BitBlt双缓冲,内存拷贝问题?

-小仙- 2009-11-02 08:08:39
CDC   * pDC;
CDC *MDC;
CDC *MDCScreen;

pDC=GetDlgItem(IDC_STATIC_S)->GetDC(); //IDC_STATIC_S为要显示图片的图片控件

MDC->CreateCompatibleDC(pDC);
MDCScreen->CreateCompatibleDC(pDC);

HBITMAP hbmpdraw=CreateCompatibleBitmap(MDC->GetSafeHdc(),width,height);
HBITMAP hbmpold=(HBITMAP)MDC->SelectObject(hbmpdraw);//将位图调入内存设备
//2
HBITMAP hbmpdrawScreen=CreateCompatibleBitmap(MDCScreen->GetSafeHdc(),width,height);
HBITMAP hbmpoldScreen=(HBITMAP)MDCScreen->SelectObject(hbmpdrawScreen);//将位图调入内存设备

static int Sx=0;
static int Sy=0;
Sx+=2;
Sy+=2;

MDC->SelectObject(bitmap); // CBitmap bitmap; //:LoadImage得到显示位图,并装入MDC
pDC->BitBlt(Sx,Sy,width,height,MDCScreen,0,0,SRCCOPY);

以上都可以正常显示,但就是图片移动过后会有痕迹,所以采用双缓冲,多创建一个兼容DC:MDCScreen
然后做如下处理:
MDCScreen->BitBlt(PRect.left,PRect.top,width,height,MDCScreen,0,0,WHITENESS);
MDCScreen->BitBlt(Sx,Sy,width,height,MDC,0,0,SRCCOPY);//将移动过的图片放到MDCScreen环境上
pDC->BitBlt(0,0,width,height,MDCScreen,0,0,SRCCOPY);



MDCScreen->BitBlt(Sx,Sy,width,height,MDC,0,0,SRCCOPY);//将移动过的图片放到MDCScreen环境上
这句实现将MDC上的突破copy到MDCScreen,但未成功,显示出来的是黑色背景,不知道什么原因? 请高手指教
...全文
139 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
beyond_sky_007 2012-02-22
  • 打赏
  • 举报
回复
如何设置bitmap的默认颜色呐?
mmilmf 2009-11-02
  • 打赏
  • 举报
回复
HBITMAP hbmpdraw=CreateCompatibleBitmap(MDC->GetSafeHdc(),width,height);

改为
HBITMAP hbmpdraw=CreateCompatibleBitmap(pDC->m_hDC,width,height);

试试
应该获取pDC的句柄吧
-小仙- 2009-11-02
  • 打赏
  • 举报
回复
上面是大致的代码!

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧