C语言怎么实现截图

能实现么求具体思路... 能实现么 求具体思路 展开
 我来答
tattackor
推荐于2017-10-07 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:896万
展开全部

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;
}
AiPPT
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图... 点击进入详情页
本回答由AiPPT提供
icecoobe
推荐于2017-10-07 · TA获得超过1989个赞
知道小有建树答主
回答量:1058
采纳率:100%
帮助的人:1110万
展开全部
  • // 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;

}

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式