截取当前桌面并保存图像
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <atlimage.h>
#include <Windows.h>
using namespace std;
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) // 设置连接器选项
//加入上面这句可以取消控制台显示
int main(int argc, _TCHAR* argv[])
{
HDC hDc,memDc;
hDc = GetDC(GetDesktopWindow());//取得桌面设备 hdc
memDc = CreateCompatibleDC(hDc);//创建与HDC(桌面)兼容的设备memDc
HBITMAP hBitMap;
HWND hWnd = GetDesktopWindow();//得到桌面句柄
RECT rect;
GetWindowRect(hWnd,&rect);//桌面的矩形
int width = rect.right-rect.left;//桌面的宽
int hight = rect.bottom-rect.top;//桌面的高
hBitMap = CreateCompatibleBitmap(hDc,width,hight);//创建与桌面兼容的画布
SelectObject(memDc,hBitMap);//关联设备和画布
BitBlt(memDc,0,0,width,hight,hDc,0,0,SRCCOPY);//吧桌面往兼容设备里复制
//一个设备(笔,画刷....) ,再准备一张画布(一个内存空间), 就可以作画了. 要真正的得到一个图, 总要有东西把原图放进去吧. 所以有了, 兼容的设备和画布.
CImage mImage;
mImage.Attach(hBitMap);
mImage.Save(L"d:/1.jpg");//保存图像
system("pause");
return 0;
}
获得当前应用窗口截图
POINT pt;
GetCursorPos(&pt);
HWND hpWnd=NULL, hcWnd=NULL;
hpWnd = ::WindowFromPoint( pt );
if( IsWindow(hpWnd) )
hcWnd = ::ChildWindowFromPointEx( hpWnd, pt, CWP_ALL );
if( IsWindow( hcWnd ) == FALSE )
hcWnd = hpWnd;
HDC hDc,memDc;
hDc = GetDC(hcWnd);//取得桌面设备 hdc
memDc = CreateCompatibleDC(hDc);//创建与HDC(桌面)兼容的设备memDc
HBITMAP hBitMap;
//HWND hWnd = GetDesktopWindow();//得到桌面句柄
RECT rect;
GetWindowRect(hcWnd,&rect);//桌面的矩形
int width = rect.right-rect.left;//桌面的宽
int hight = rect.bottom-rect.top;//桌面的高
hBitMap = CreateCompatibleBitmap(hDc,width,hight);//创建与桌面兼容的画布
SelectObject(memDc,hBitMap);//关联设备和画布
BitBlt(memDc,rect.left,rect.top,width,hight,hDc,0,0,SRCCOPY);//吧桌面往兼容设备里复制
//一个设备(笔,画刷....) ,再准备一张画布(一个内存空间), 就可以作画了. 要真正的得到一个图, 总要有东西把原图放进去吧. 所以有了, 兼容的设备和画布.
CImage mImage;
mImage.Attach(hBitMap);
mImage.Save(L"d:/1.jpg");//保存图像
截取前
截取后