将屏幕保存为图片,使用vs2008编译通过。
#include "stdafx.h"
#include <windows.h>
#include <atlimage.h>
int __stdcall WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)
{
HWND hwnd = ::GetDesktopWindow();
HDC hDC = ::GetDC(hwnd);//获取屏幕DC
RECT rect;
::GetClientRect(hwnd, &rect);//获取屏幕大小
HDC hDCMem = ::CreateCompatibleDC(hDC);//创建兼容DC
HBITMAP hBitMap = ::CreateCompatibleBitmap(hDC, rect.right, rect.bottom);//创建兼容位图
HBITMAP hOldMap = (HBITMAP)::SelectObject(hDCMem, hBitMap);//将位图选入DC,并保存返回值
::BitBlt(hDCMem, 0, 0, rect.right, rect.bottom, hDC, 0, 0, SRCCOPY);//将屏幕DC的图象复制到内存DC中
CImage image;
image.Attach(hBitMap);
image.Save(_T("c://B.jpg"));//如果文件后缀为.bmp,则保存为为bmp格式
image.Detach();
::SelectObject(hDCMem, hOldMap);//选入上次的返回值
&nbs
#include "stdafx.h"
#include <windows.h>
#include <atlimage.h>
int __stdcall WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)
{
HWND hwnd = ::GetDesktopWindow();
HDC hDC = ::GetDC(hwnd);//获取屏幕DC
RECT rect;
::GetClientRect(hwnd, &rect);//获取屏幕大小
HDC hDCMem = ::CreateCompatibleDC(hDC);//创建兼容DC
HBITMAP hBitMap = ::CreateCompatibleBitmap(hDC, rect.right, rect.bottom);//创建兼容位图
HBITMAP hOldMap = (HBITMAP)::SelectObject(hDCMem, hBitMap);//将位图选入DC,并保存返回值
::BitBlt(hDCMem, 0, 0, rect.right, rect.bottom, hDC, 0, 0, SRCCOPY);//将屏幕DC的图象复制到内存DC中
CImage image;
image.Attach(hBitMap);
image.Save(_T("c://B.jpg"));//如果文件后缀为.bmp,则保存为为bmp格式
image.Detach();
::SelectObject(hDCMem, hOldMap);//选入上次的返回值
&nbs

本文提供两种方法将屏幕和MFC程序界面保存为bmp格式的图片。第一种利用CImage类,第二种使用BITMAPINFO结构。代码适用于VS2005和VS2008,详细步骤包括获取DC,创建兼容DC,位图复制,最后保存为图片文件。
1288

被折叠的 条评论
为什么被折叠?



