ڼС
梦回起点
做你害怕做的事,你会发现:不过如此
本站基于WordPress—主题by 设计窝
冀ICP备15003737号
梦回起点
Copyright © 2015-2024 All rights reserved.

单个窗口截图

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);
}
2022-05-20
                         
暂无评论

发表回复