永发信息网

C语言怎么实现截图

答案:2  悬赏:80  手机版
解决时间 2021-03-13 17:23
C语言怎么实现截图
最佳答案
1、用C语言实现windows程序截图,太麻烦。建议用C++做比较好。
2、截图例程:
#ifndef CAPTUREBLT
#define CAPTUREBLT 0x40000000
#endif
HBITMAP CaptureScreen(LPRECT lpRect)//lpRect为NULL时表示全屏幕截图
{
    HDC      hdc, hdcMem ;
    HBITMAP  hemfCopy ;
    HWND     hwndScr ;
    int      dstcx, dstcy ;
    if(lpRect)
    {
        dstcx = lpRect->right - lpRect->left ;
        dstcy = lpRect->bottom - lpRect->top ;
    }
    else
    {
        dstcx = GetSystemMetrics(SM_CXSCREEN) ;
        dstcy = GetSystemMetrics(SM_CYSCREEN) ;
    }
    if (LockWindowUpdate(hwndScr = GetDesktopWindow ()))
    {
        hdc  = GetDCEx (hwndScr, NULL, DCX_CACHE | DCX_LOCKWINDOWUPDATE) ;
        hdcMem = CreateCompatibleDC (hdc) ;
        if(NULL==hdcMem)
        {
            ReleaseDC (hwndScr, hdc) ;
            LockWindowUpdate (NULL) ;
            return NULL;
        }
        hemfCopy = CreateCompatibleBitmap (hdc, abs(dstcx), abs(dstcy)) ;
        if(NULL==hemfCopy)
        {
            DeleteDC (hdcMem) ;
            ReleaseDC (hwndScr, hdc) ;
            LockWindowUpdate (NULL) ;
            return NULL;
        }
        SelectObject (hdcMem, hemfCopy) ;
        if(lpRect)
            StretchBlt (hdcMem, 0, 0, abs(dstcx), abs(dstcy), 
                hdc, lpRect->left, lpRect->top, dstcx, dstcy, SRCCOPY|CAPTUREBLT) ;
        else
            BitBlt (hdcMem, 0, 0, dstcx, dstcy, 
                hdc, 0, 0, SRCCOPY|CAPTUREBLT) ;
        DeleteDC (hdcMem) ;
        ReleaseDC (hwndScr, hdc) ;
        LockWindowUpdate (NULL) ;
        return hemfCopy;
    }
    return NULL;
}
全部回答

// MSDN 一下,GDI接口,GetSystemMetrics


#ifndef CAPTUREBLT
#define CAPTUREBLT 0x40000000
#endif
HBITMAP CaptureScreen(LPRECT lpRect)//lpRect为NULL时表示全屏幕截图
{
    HDC      hdc, hdcMem ;
    HBITMAP  hemfCopy ;
    HWND     hwndScr ;
    int      dstcx, dstcy ;
    if(lpRect)
    {
        dstcx = lpRect->right - lpRect->left ;
        dstcy = lpRect->bottom - lpRect->top ;
    }
    else
    {
        dstcx = GetSystemMetrics(SM_CXSCREEN) ;
        dstcy = GetSystemMetrics(SM_CYSCREEN) ;
    }
    if (LockWindowUpdate(hwndScr = GetDesktopWindow ()))
    {
        hdc  = GetDCEx (hwndScr, NULL, DCX_CACHE | DCX_LOCKWINDOWUPDATE) ;
        hdcMem = CreateCompatibleDC (hdc) ;
        if(NULL==hdcMem)
        {
            ReleaseDC (hwndScr, hdc) ;
            LockWindowUpdate (NULL) ;
            return NULL;
        }
        hemfCopy = CreateCompatibleBitmap (hdc, abs(dstcx), abs(dstcy)) ;
        if(NULL==hemfCopy)
        {
            DeleteDC (hdcMem) ;
            ReleaseDC (hwndScr, hdc) ;
            LockWindowUpdate (NULL) ;
            return NULL;
        }
        SelectObject (hdcMem, hemfCopy) ;
        if(lpRect)
            StretchBlt (hdcMem, 0, 0, abs(dstcx), abs(dstcy), 
                hdc, lpRect->left, lpRect->top, dstcx, dstcy, SRCCOPY|CAPTUREBLT) ;
        else
            BitBlt (hdcMem, 0, 0, dstcx, dstcy, 
                hdc, 0, 0, SRCCOPY|CAPTUREBLT) ;
        DeleteDC (hdcMem) ;
        ReleaseDC (hwndScr, hdc) ;
        LockWindowUpdate (NULL) ;
        return hemfCopy;
    }
    return NULL;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
x的立方=136Ⅹ=?
坐飞机从郑州到海南需要几个小时?
支付宝好期贷如何还款,可以提前还款吗
汤山街道李岗头社区居民委员会地址在哪,我要
15一36十49=多少数
南昌县莲塘哪家按腰椎间盘突出最好
我也想要腐动漫资源
大可以我想知道这个在什么地方
we learn ( ) from my teacher A lot B a lot
火车2.5时行217.5千米一架飞机0.4小时飞行了3
从盐仓海龙路到浦西坐公交车
两个月的小泰迪怎么养啊?~~急!!!
年丰村地址有知道的么?有点事想过去
中国信合(乐平第二信用社)地址在什么地方,想
整个清朝中国到底损失了多少领土
推荐资讯
大家觉得我们配吗?女的怎么样
断塘流水池中乐,抓四带七开本期,(天下无双
雀林村小地址在什么地方,想过去办事
2.7个月等于多少天
剑网三 龙纹图书籍在哪里刷?
昨天启东失家车爆胎掉河里
大概五个人七月到九月从兰州到西藏自驾游往返
关于java的Integer二维数组的初始值
妹妹爱上了哥哥,而哥哥对妹妹只有亲情,哥哥
福兴路特仕影音导航在哪里啊,我有事要去这个
我十二岁了,胸部有一点点发育的时候,我们班
迈腾1.4tsi购置税是多少钱?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?