易码技术论坛

 找回密码
 加入易码
搜索
查看: 142324|回复: 7

[请教]C++中如何保存当前窗体的画面到BITMAP

[复制链接]
发表于 2005-12-16 13:28:00 | 显示全部楼层
建立另一个DC

用SelectObject(DC,(HBITMAP)xxx);

然后用BitBlt拷贝到dc,就拷贝到HBITMAP里了
发表于 2005-12-16 13:31:00 | 显示全部楼层
如果是整个窗体

可以用GetWindowRect得到窗体的RECT(RECT rc)

然后用GetDC(NULL)

和CreateCompatibleBitmap(NULL,rc.right-rc.left,rc.bottom-rc.top)

然后在拷贝进去
 楼主| 发表于 2005-12-16 17:18:00 | 显示全部楼层
那如果要将BITMAP里面的数据重新贴回窗体呢?

还是用BitBlt从那个另建的DC拷贝回来?
 楼主| 发表于 2005-12-16 17:34:00 | 显示全部楼层
如果我定义一个全局的HDC dc和一个全局的HBITMAP bmp

那么我在WM_CREATE里面
dc = GetDC(NULL)

然后在某一个消息处理中在窗体上绘制了图形,我使用
   hdc = GetDC(hWnd);//窗体的DC
   GetClientRect(hWnd,&rc);
   bmp= CreateCompatibleBitmap(NULL,rc.right-rc.left,rc.bottom-rc.top);
   SelectObject(dc,form);//自定义的DC
   BitBlt(dc,0,0,rc.right-rc.left,rc.bottom-rc.top,hdc,rc.right-rc.left,rc.bottom-rc.top,SRCCOPY);
这样就可以实现拷贝图像到自定义的DC么

如果想恢复图像,我在WM_PAINT里面使用
   GetClientRect(hWnd,&rc);
   SelectObject(dc,form);//自定义的DC
   BitBlt(hdc,0,0,rc.right-rc.left,rc.bottom-rc.top,dc,rc.right-rc.left,rc.bottom-rc.top,SRCCOPY);
这样可以么


发表于 2005-12-17 20:22:00 | 显示全部楼层
没错,不过我是比较习惯将SelectObject的第二个参数强制转换成HBITMAP
发表于 2005-12-17 20:24:00 | 显示全部楼层
-_-b如果楼主要做2D游戏建议使用DirectDraw

可以下载开发包 网上有的
 楼主| 发表于 2005-12-18 16:49:00 | 显示全部楼层
偶只是想实现AutoRedraw……


 楼主| 发表于 2005-12-15 17:18:19 | 显示全部楼层 |阅读模式
C++中如何保存当前窗体的画面到一个BITMAP结构里面
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-8-24 21:05 , Processed in 0.012460 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表