指定窗口截图
这段代码是网上找来的,自己消化精简了一下。
void CaptureWindow(HWND hwnd) { //获取窗口的width和height RECT rect; GetWindowRect(hwnd,&rect); //这个函数得到的是整个窗口的Rect,包括非客户区,而近要得到客户区的rect,请使用GetClientRect DWORD width =rect.right-rect.left; DWORD height =rect.bottom-rect.top; //获取窗口的DC HDC hdc = GetWindowDC(hwnd); //如果这里用GetDC(hwnd),则BitBlt出来的是窗口客户区的颜色数据,不包括非客户区 //创建和屏幕DC兼容的内存DC HDC hMemDC=CreateCompatibleDC(hdc); //BitBlt能够将一个窗口DC的颜色数据copy到另一个窗口DC中,而存放这些颜色的数据必须是一张位图 //所以要先创建一张位图 HBITMAP hBitmap = CreateCompatibleBitmap(hdc,width,height); //因为可以创建很多张位图,你到底要把数据传送到哪一张位图上面呢? 用SelectObject就可以了。 SelectObject(hMemDC,hBitmap); //将屏幕DC中的颜色数据传送到内存DC中的位图上 BitBlt(hMemDC,0,0,width,height,hdc,0,0,SRCCOPY); //将位图放入剪贴板 //打开剪贴板 OpenClipboard(NULL); //清空剪贴板内容 EmptyClipboard(); //把位图的信息放到剪贴板上 SetClipboardData(CF_BITMAP,hBitmap ); CloseClipboard(); ReleaseDC(hwnd,hdc); DeleteDC(hMemDC); DeleteObject(hBitmap); }