屏幕截图(带光标)

原文链接地址:http://blog.csdn.net/VisualEleven/article/details/6093484

// 屏幕截图程序,可运行PC,WinCE,Windows Mobile平台上

void SaveScreenToFile(LPCTSTR szFileName)
{
    HDC hScrDC = ::GetDC(NULL);
    HDC hMemDC = NULL;

    BYTE *lpBitmapBits = NULL; 

    int nWidth = GetSystemMetrics(SM_CXSCREEN);
    int nHeight = GetSystemMetrics(SM_CYSCREEN); 

    hMemDC = ::CreateCompatibleDC(hScrDC); 

    BITMAPINFO bi;
    ZeroMemory(&bi, sizeof(BITMAPINFO));
    bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    bi.bmiHeader.biWidth = nWidth;
    bi.bmiHeader.biHeight = nHeight;
    bi.bmiHeader.biPlanes = 1;
    bi.bmiHeader.biBitCount = 24;

    HCURSOR hCursor = GetCursor();
    POINT ptCursor;
    GetCursorPos(&ptCursor);
    ICONINFO IconInfo = {0};
    if(GetIconInfo(hCursor, &IconInfo))
    {
        ptCursor.x -= IconInfo.xHotspot;
        ptCursor.y -= IconInfo.yHotspot;
        if(NULL != IconInfo.hbmMask)
            DeleteObject(IconInfo.hbmMask);
        if(NULL != IconInfo.hbmColor)
            DeleteObject(IconInfo.hbmColor);
    }

    HBITMAP bitmap = ::CreateDIBSection(hMemDC, &bi, DIB_RGB_COLORS, (LPVOID*)&lpBitmapBits, NULL, 0);
    HGDIOBJ oldbmp = ::SelectObject(hMemDC, bitmap); 

    ::BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, 0, 0, SRCCOPY);
    DrawIconEx(hMemDC, ptCursor.x, ptCursor.y, hCursor, 0, 0, 0, NULL, DI_NORMAL | DI_COMPAT);

    BITMAPFILEHEADER bh;
    ZeroMemory(&bh, sizeof(BITMAPFILEHEADER));
    bh.bfType = 0x4d42;  //bitmap
    bh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
    bh.bfSize = bh.bfOffBits + ((nWidth*nHeight)*3);

    CFile file;
    if(file.Open(szFileName, CFile::modeCreate | CFile::modeWrite))
    {
        file.Write(&bh, sizeof(BITMAPFILEHEADER));
        file.Write(&(bi.bmiHeader), sizeof(BITMAPINFOHEADER));
        file.Write(lpBitmapBits, 3 * nWidth * nHeight);
        file.Close();
    }

    ::SelectObject(hMemDC, oldbmp);
    ::DeleteObject(bitmap);
    ::DeleteObject(hMemDC);
    ::ReleaseDC(NULL, hScrDC);
}

BOOL DrawIconEx(          HDC hdc,
    int xLeft,
    int yTop,
    HICON hIcon,
    int cxWidth,
    int cyWidth,
    UINT istepIfAniCur,
    HBRUSH hbrFlickerFreeDraw,
    UINT diFlags
);
//The DrawIconEx function draws an icon or cursor into the specified device context, performing the specified raster operations, and stretching or compressing the icon or cursor as specified.
时间: 2024-11-12 11:45:43

屏幕截图(带光标)的相关文章

cocos2dx3.6 实现带光标的输入框

多的不说,我这个学渣,我写的代码比较搓!忍耐下吧! CursorTextField.h #ifndef _CursorTextField_H_ #define _CursorTextField_H_ #include "cocos2d.h" USING_NS_CC; class CursorTextField : public TextFieldTTF, public TextFieldDelegate , public IMEDelegate { private: // 点击开始位置

cocos2dx3.6 实现带光标的输入框(二);光标可移动

现在光标终于可移动了,然后其实主要是逻辑问题,也没什么技术含量,所以总是一大堆位置判断!再者自己能力比较水,所以代码比较挫,这里代码只有更新那部分,具体的回车什么的自己去弄就好了,其实跟这个思想差不多吧!个人觉得. 代码: CursorTextField.h #ifndef _CursorTextField_H_ #define _CursorTextField_H_ #include "cocos2d.h" USING_NS_CC; class CursorTextField : p

日志文件目录

一.Visio分类 以编程方式使用 Microsoft Office Visio 2003 ActiveX 控件 visio应用程序相关设置-选项-视图 visio应用程序相关设置-选项-常规 visio中相关设置-菜单视图 Visio中设置自定义属性的值 Visio中的Undo和Redo Visio中ShapeAdded和SelectionAdded 二.位分类 补码.原码.反码 不同进制之间的转换 位操作基础 常用位操作小技巧 位操作的趣味应用 位操作与空间压缩 位操作基础篇之位操作全面总结

软件开发用户源代码保护需求

软件开发研发企业的需求: 随着企业信息化发展的日益增长,软件行业厂商之间的竞争也愈加白热化,加上国内对知识产权的不够重视.山寨模仿产品的横行.保护源代码.保证企业的核心竞争力,成为众多软件研发企业的第一要务.那么企业应该如何保证源代码的安全呢?企业该如何选择一款合适自己的加密软件呢?     需求概要分析 通常,企业中存在如下状况: 1.内部人员可以把涉密文件通过U盘等移动存储设备从电脑中拷出带走: 2.内部人员可以把自带笔记本电脑接入公司网络,然后把涉密文件拷出带走: 3.内部人员可以通过互联

Oracle数据处理

DML语言 &:地址符:(PrepareStament) 批处理:插入--------一次将10号部门的员工插入新的表中: 其不必书写values语句:子查询中的值列表应与insert中子句中的列名对应: delete与truncate的区别:1:delete逐条删除,而truncate先摧毁表,然后在新建表: 2:主要区别是两种不同的语言: 3:delete不会释放空间,而truncate可以: 4:delete删除时会产生碎片,而truncate不会产生: 5:delete可以闪回,而tru

软件公司主要防泄密点

软件研发企业防泄密需求: 随着企业信息化发展的日益增长,软件行业厂商之间的竞争也愈加白热化,加上国内对知识产权的不够重视.山寨模仿产品的横行.保护源代码.保证企业的核心竞争力,成为众多软件研发企业的第一要务.那么企业应该如何保证源代码的安全呢?企业该如何选择一款合适自己的加密软件呢? 需求概要分析 通常,企业中存在如下状况: 1. 内部人员可以把涉密文件通过U盘等移动存储设备从电脑中拷出带走: 2. 内部人员可以把自带笔记本电脑接入公司网络,然后把涉密文件拷出带走: 3. 内部人员可以通过互联网

TScreen 类

TScreen表示应用程序运行时屏幕的状态. 类关系 TObject->TPersistent->TComponent TScreen引进具有表示下列各种情况的属性 什么窗体和数据模块已经被应用程序实例化. 激活窗体以及在窗体内激活的控件. 屏幕的尺寸大小和分辨率. 可以获得的应用程序使用的光标和字体. 有一个TScreen类型的全局变量Screen,已被C++Builder的应用程序创建实例.使用Screen可以获得在一个应用程序中有关屏幕当前状态的信息. 属性列表 Active Contr

C#软件开发实例.私人订制自己的屏幕截图工具(九)使用自定义光标,QQ截图时的光标

在使用QQ的截图功能的时候,是不是觉得它的光标很酷呢?今天就说一下怎么应用自定义光标,在我们的截图工具中使用QQ截图的光标. 打开资源: 切换到文件资源视图: 打开资源文件目录,将光标文件复制到此目录下: 所需光标文件下载:C#软件开发实例.私人订制自己的屏幕截图工具中使用的光标文件 选中Resources目录,刷新,显示出刚刚复制进来的光标文件: 选中光标文件,拖动到资源的文件视图中: 资源资源名称中的单词第一个字母改为大写. 光标预览: 在Form1类中添加私有变量: #region 自定义

【XFeng安卓开发笔记】edittext中怎样禁止系统自带键盘弹出但光标还在

网上又不少方法,均告失败,最终找到以下的方法: // 隐藏系统键盘 public void hideSoftInputMethod(EditText ed) { getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); int currentVersion = android.os.Build.VERSION.SDK_INT; String methodName = null