1 void CMainFrame::OnSavejpg() 2 { 3 // TODO: 在此添加命令处理程序代码 4 HWND hwnd = this->GetSafeHwnd(); //得到窗口句柄 5 HDC hDC = ::GetWindowDC(hwnd);//获取DC 指定的窗口的设备环境 6 7 8 RECT rect; 9 ::GetWindowRect(hwnd, &rect);//获取屏幕大小 该函数返回指定窗口的边框矩形的尺寸。该尺寸以相对于屏幕坐标左上角的屏幕坐标给出。 10 HDC hDCMem = ::CreateCompatibleDC(hDC);//创建兼容DC 创建一个与指定设备兼容的内存设备上下文环境(DC)。 11 12 13 HBITMAP hBitMap = ::CreateCompatibleBitmap(hDC, rect.right-rect.left, rect.bottom-rect.top);//该函数创建与指定的设备环境相关的设备兼容的位图。 14 15 HBITMAP hOldMap = (HBITMAP)::SelectObject(hDCMem, hBitMap);//将位图选入DC,并保存返回值 16 17 ::BitBlt(hDCMem, 0, 0, rect.right-rect.left, rect.bottom-rect.top, hDC, 0, 0, SRCCOPY);//将屏幕DC的图象拷贝到内存DC中 18 19 CImage image;//须要#include <atlimage.h> 20 image.Attach(hBitMap); 21 image.Save(_T("c://aaa.jpg"));//假设文件后缀为.bmp,则保存为为bmp格式 22 image.Detach(); 23 24 ::SelectObject(hDCMem, hOldMap);//选入上次的返回值 25 26 //释放 27 ::DeleteObject(hBitMap); 28 ::DeleteDC(hDCMem); 29 ::DeleteDC(hDC); 30 }
运行: