打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VC简单的截图实现
第一、首先用CreateDC函数建设备上下文环境(创建设备描述表),名为display。
第二、用CreateCompatibleDC函数创建display设备兼容的内存设备上下文环境(DC)(创建兼容的内存设备描述表)。
第三、获得屏幕分辨率和要截图的区域坐标。GetDeviceCaps获取屏幕分辨率。
第四、用CreateCompatibleBitmap函数创建与display设备兼容的位图(创建一个与屏幕设备描述表兼容的位图)。
第五、SelectObject函数把新位图选到内存设备描述表中。
第六、BitBlt函数把屏幕设备描述表拷贝到内存设备描述表中。
第七、最后SelectObject得到屏幕位图的句柄。
第八、显示位图。
主要代码如下:
HBITMAP C截图Dlg::Copybitmap(LPRECT lprect)
{
    HDC hscrdc, hmemdc;// 屏幕和内存设备描述表
    HBITMAP hbitmap, holdbitmap;// 位图句柄
    int nx, ny, nx2, ny2;// 选定区域坐标
    int nwidth, nheight;// 位图宽度和高度
    int xscrn, yscrn;// 屏幕分辨率
    // 确保选定区域不为空矩形
    if (IsRectEmpty(lprect))
        return NULL;
    //为屏幕创建设备描述表
    hscrdc = CreateDC(L'display', NULL, NULL, NULL);
    //为屏幕设备描述表创建兼容的内存设备描述表
    hmemdc = CreateCompatibleDC(hscrdc);
    // 获得选定区域坐标
    nx = lprect->left;
    ny = lprect->top;
    nx2 = lprect->right;
    ny2 = lprect->bottom;
    // 获得屏幕分辨率
    xscrn = GetDeviceCaps(hscrdc, HORZRES);
    yscrn = GetDeviceCaps(hscrdc, VERTRES);
    //确保选定区域是可见的
    if (nx < 0)
        nx = 0;
    if (ny &lt; 0)
        ny = 0;
    if (nx2 > xscrn)
        nx2 = xscrn;
    if (ny2 &gt; yscrn)
        ny2 = yscrn;
    nwidth = nx2 - nx;
    nheight = ny2 - ny;
    // 创建一个与屏幕设备描述表兼容的位图
    hbitmap = CreateCompatibleBitmap(hscrdc, nwidth, nheight);
    // 把新位图选到内存设备描述表中
    holdbitmap = (HBITMAP)SelectObject(hmemdc, hbitmap);
    // 把屏幕设备描述表拷贝到内存设备描述表中
    BitBlt(hmemdc, 0, 0, nwidth, nheight,hscrdc, nx, ny, SRCCOPY);
    //得到屏幕位图的句柄
    hbitmap = (HBITMAP)SelectObject(hmemdc, holdbitmap);
    //清除
    DeleteDC(hscrdc);
    DeleteDC(hmemdc);
    // 返回位图句柄
    return hbitmap;
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
解决win10系统中截图异常放大的问题
CreateCompatibleDC,CreateCompatibleBitmap,SelectObject详解
截图保存
MFC使用技巧集锦(1)
VC 怎样实现屏幕捕捉(源程序)
http://hi.baidu.com/chendeping/item/707721df3...
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服