我用下面的代码来获取VIEW区域。但我发现只能保存在屏幕的显示的VIEW部分,对于未显示的部分保存的却是屏幕的内容。我曾看到类似的帖子有人说可以用双缓冲模式,对内存区域做同样的操作,我想问这种方式具体如何操作,有代码就更好了,谢谢了!!
HDC hBufDC;
HBITMAP hBitmap, hBitTemp;
//创建设备上下文(HDC)
hBufDC = CreateCompatibleDC(hDC);
//创建HBITMAP
hBitmap = CreateCompatibleBitmap(hDC, BitWidth, BitHeight);
hBitTemp = (HBITMAP) SelectObject(hBufDC, hBitmap);
//得到位图缓冲区
// StretchBlt(hBufDC, 0, 0, BitWidth, BitHeight,
// hDC, 0, 0, BitWidth, BitHeight, SRCCOPY);
StretchBlt(hBufDC, 0, 0, 200, 200,
hDC, 0, 0, BitWidth, BitHeight, SRCCOPY);
//得到最终的位图信息
hBitmap = (HBITMAP) SelectObject(hBufDC, hBitTemp);
//释放内存
DeleteObject(hBitTemp);
::DeleteDC(hBufDC);
return hBitmap;
HDC hBufDC;
HBITMAP hBitmap, hBitTemp;
//创建设备上下文(HDC)
hBufDC = CreateCompatibleDC(hDC);
//创建HBITMAP
hBitmap = CreateCompatibleBitmap(hDC, BitWidth, BitHeight);
hBitTemp = (HBITMAP) SelectObject(hBufDC, hBitmap);
//得到位图缓冲区
// StretchBlt(hBufDC, 0, 0, BitWidth, BitHeight,
// hDC, 0, 0, BitWidth, BitHeight, SRCCOPY);
StretchBlt(hBufDC, 0, 0, 200, 200,
hDC, 0, 0, BitWidth, BitHeight, SRCCOPY);
//得到最终的位图信息
hBitmap = (HBITMAP) SelectObject(hBufDC, hBitTemp);
//释放内存
DeleteObject(hBitTemp);
::DeleteDC(hBufDC);
return hBitmap;
解决方案 »
- 是不是在WIN7中VC6的GDI函数无效?
- 看似简单却不见的问题~关于全局钩子~求win32的高手
- 我想自己写(不用office库)来打开doc
- 请兄弟们,推荐一下北京的控件销售商!
- 字符串的问题
- 如何在指定字节截断一个文件?
- 高手解释一下:unresolved external symbol "long __cdecl test(struct _cscommand *)" (?test@@YAJPAU_cscommand@@@Z)
- Unicode 的问题
- 如何将一个CStringList对象赋给另一个CStringList?
- 怎么能让带有一行滚动条的EDIT滚动到最后一行。
- ##请问MFC中CListBox和CListCtrl的区别##
- 如何去掉VC自带的帮助
hDC, 0, 0, BitWidth, BitHeight, SRCCOPY);
这样拷贝是不行的。
你用View的重画函数在hBufDC上进行绘制。就可以将视图区的内容画到内存位图上了。
我再试一下!!
HDC hBufDC;
HBITMAP hBitmap, hBitTemp;
//创建设备上下文(HDC)
hBufDC = CreateCompatibleDC(hDC);
//创建HBITMAP
hBitmap = CreateCompatibleBitmap(hDC, BitWidth, BitHeight);
hBitTemp = (HBITMAP) SelectObject(hBufDC, hBitmap);
//得到位图缓冲区
// StretchBlt(hBufDC, 0, 0, BitWidth, BitHeight,
// hDC, 0, 0, BitWidth, BitHeight, SRCCOPY);
// StretchBlt(hBufDC, 0, 0, 200, 200,
// hDC, 0, 0, BitWidth, BitHeight, SRCCOPY);
OnDrawImage(hBufDC);//这样不对吗??
//得到最终的位图信息
hBitmap = (HBITMAP) SelectObject(hBufDC, hBitTemp);
//释放内存
DeleteObject(hBitTemp);
::DeleteDC(hBufDC);
return hBitmap;
我用没有修改前的函数保存过没有问题,不过它保存的是屏幕的内容,而不是VIEW的内容。
所以只能保存显示的区域。我的QQ是275481506,能不能交个朋友啊??