正文

VC截取桌面到bitmap2010-08-17 19:53:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lym51/51672.html

分享到:

// lpRect 为截取的区域

// by lymking@hotmail.com

HBITMAP CopyScrToBitmap(LPRECT lpRect)

{
    HDC hScrDC=0, hMemDC;

    HBITMAP hBitmap, hOldBitmap;

    //int nX,nY,xX2,nY2;

    // bitmap width&height
    int nWidth, nHeight;

    // screen resolution
    int xScrn, yScrn;

    // makesure the rectangle not NULL
    if (IsRectEmpty(lpRect))
    {
        return NULL;
    }

    // create desktop screen dc
    hScrDC = GetDesktopWindow()->GetDC()->m_hDC;/*CreateDC(_T("DISPLAY"), NULL, NULL, NULL);*/

    int iOK =1;
    if (hScrDC == NULL)
    {
        iOK = 0;
    }

    // create mem dc
    hMemDC = CreateCompatibleDC(hScrDC);
   
    // get resolutions
    xScrn = GetDeviceCaps(hScrDC, HORZRES);
    yScrn = GetDeviceCaps(hScrDC, VERTRES);

    if(lpRect->left < 0)
        lpRect->left = 0;

    if (lpRect->top < 0)
        lpRect->top = 0;

    // 屏幕
    nWidth = (lpRect->right - lpRect->left);
    nHeight = (lpRect->bottom - lpRect->top);

    // create bitmap
    hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);

    // select new bitmap
    hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);

    // copy scr dc to mem dc
    BitBlt(hMemDC, 0,0, nWidth, nHeight, hScrDC, 0, 0, SRCCOPY);

    // get bitmap handle
    hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap);

    // clean
    DeleteDC(hScrDC);
    DeleteDC(hMemDC);

    return hBitmap;
}

阅读(3361) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册