MFC 截屏生成图片

	// TODO: 在此添加命令处理程序代码
		 HWND hwnd = this->GetSafeHwnd();    //得到窗口句柄
		 HDC hDC = ::GetWindowDC(hwnd);//获取DC     指定的窗口的设备环境
		
		// CDC* pDc = GetWindowDC();

		
		
		 //CBitmap m_bm;
		 //m_bm.CreateCompatibleBitmap()
		

	     RECT rect;
	     GetWindowRect(&rect);//获取屏幕大小  该函数返回指定窗口的边框矩形的尺寸。该尺寸以相对于屏幕坐标左上角的屏幕坐标给出。  
	
		 HDC hDCMem = ::CreateCompatibleDC(hDC);//创建兼容DC   创建一个与指定设备兼容的内存设备上下文环境(DC)。
		
		 //CreateCompatibleDC(hDC);
		 //CreateCompatibleBitmap(hDC, rect.right - rect.left, rect.bottom - rect.top);
		
		 HBITMAP hBitMap = ::CreateCompatibleBitmap(hDC, rect.right - rect.left, rect.bottom - rect.top);//该函数创建与指定的设备环境相关的设备兼容的位图。  
	     HBITMAP hOldMap = (HBITMAP)::SelectObject(hDCMem, hBitMap);//将位图选入DC,并保存返回值     
		 


	    ::BitBlt(hDCMem, 0, 0, rect.right - rect.left, rect.bottom - rect.top, hDC, 0, 0, SRCCOPY);//将屏幕DC的图象拷贝到内存DC中     
	
		CImage image;//须要#include     
	    image.Attach(hBitMap);
	    image.Save(_T("c://aaavvv.jpg"));//假设文件后缀为.bmp,则保存为为bmp格式     
	     image.Detach();
	     ::SelectObject(hDCMem, hOldMap);//选入上次的返回值     
	     //释放     
		::DeleteObject(hBitMap);
	    ::DeleteDC(hDCMem);
	    ::DeleteDC(hDC);

		//CreateCompatibleBitmap()

		//BitBlt()

		
		CClientDC dc(GetDesktopWindow());

方法二: 

// TODO:  在此添加控件通知处理程序代码

	//获取当前窗口的 HDC
	HDC hDc = ::GetWindowDC(m_hWnd);

	//在内存中,初始化一个与当前窗口兼容的 HDC
	HDC hdcmem;
	hdcmem = CreateCompatibleDC(hDc);


	//使用当前窗口的HDC, 初始化一个 HBitMap 对象指针
	HBITMAP hbmap = CreateCompatibleBitmap(hDc, 800, 600);

	//将内存的HDC 选入设备为位图
	HBITMAP oldbmap = (HBITMAP)::SelectObject(hdcmem, hbmap);

	//将 hDC中的数据拷贝至内存数据中
	::BitBlt(hdcmem, 0, 0, 800, 600, hDc, 0, 0, SRCCOPY);

	
	//图像的处理
	CImage img;
	img.Attach(hbmap);
	img.Save(_T("E:\\0000\\eqeq.jpg"));
	img.Detach();
	img.Destroy();
	::SelectObject(hdcmem, oldbmap);

	img.Destroy();
	DeleteDC(hDc);
	DeleteDC(hdcmem);

	DeleteObject(hbmap);

方法二: 

// TODO:  在此添加控件通知处理程序代码、

	static int num = 0;
	CString str;
	str.Format(_T("%d"), num);


	CRect rect;
	GetWindowRect(&rect);

	//1、根据当前窗口的句柄,获取本窗口的HDC
	HDC hDc_Screen = ::GetWindowDC(m_hWnd);
	//HDC hDc = ::GetWindowDC(m_hWnd);

	//2、在内存中,根据窗口句柄,初始化一个内存HDCMem
	HDC hDcMem = CreateCompatibleDC(hDc_Screen);

	//3、根据窗口句柄,初始化一个 HBitMap
	
	HBITMAP hbm = CreateCompatibleBitmap(hDc_Screen, rect.right - rect.left, rect.bottom - rect.top);

	//4、在内存HDC中,选取 HBitMap 位图, 实现了HbitMap 和 内存 HDCMem 的关联
	HBITMAP oldbitmap = (HBITMAP)::SelectObject(hDcMem, hbm);

	//5、将位图从当前窗口 HDC 拷贝到内存 HDCMem 中
	BitBlt(hDcMem, 0, 0, rect.right - rect.left, rect.bottom - rect.top, hDc_Screen, 0,0, SRCCOPY);

	//6、初始化一个 CImage img 对象
	CImage img;

	//7、将img 对象与 HBitMap 关联
	img.Attach(hbm);

	//8、保存图像
	img.Save(_T("E:\\0000\\aa_"+str+".jpg"));
	num++;

	//9、将 img 对象与HBitMap 分离
	img.Detach();

	SelectObject(hDcMem, oldbitmap);

	//10、释放、删除对象
	DeleteObject(hbm);
	DeleteDC(hDcMem);
	DeleteDC(hDc_Screen);

你可能感兴趣的:(mfc,c++)