zoukankan      html  css  js  c++  java
  • VC++-屏幕截图

    • 版本

    VS2012

    • 实例说明

    实例完成一个屏幕截图软件

    可以将屏幕的内容保持到位图文件内

    • 关键技术

    屏幕截图需要先建立一个屏幕的设备上下文,然后根据屏幕的设备上下文创建一个内存位图,最后将内存位图数据写入到文件就实现了屏幕截图操作,屏幕截图程序需要运行在系统托盘中,并且通过RegisterHotKey函数注册一个快截键,通过快截键进行截图操作。

    • 设计过程

    (1)新建基于对话框的应用程序。

    (2)在对话框中添加按钮控件

    (3)方法SaveScreen是接收到触发后的保存屏幕图像的实现。

    • 源代码
    void CFirstMFCDialog::OnBnClickedButtonscreenshot()
    {
        // TODO: 在此添加控件通知处理程序代码
    
        CDC screendc;
        screendc.CreateDC("DISPLAY", NULL, NULL, NULL);
        CBitmap bmp;
        int width = GetSystemMetrics(SM_CXSCREEN);
        int height = GetSystemMetrics(SM_CYSCREEN);
        bmp.CreateCompatibleBitmap(&screendc, width, height);
        CDC memdc;
        memdc.CreateCompatibleDC(&screendc);
        CBitmap* old = memdc.SelectObject(&bmp);
        memdc.BitBlt(0,0,width,height,&screendc,0,0,SRCCOPY);
        memdc.SelectObject(old);
        BITMAP bm;
        bmp.GetBitmap(&bm);
        DWORD size = bm.bmWidthBytes*bm.bmHeight;
        LPSTR data = (LPSTR)GlobalAlloc(GPTR,size);
        BITMAPINFOHEADER bih;
        bih.biBitCount = bm.bmBitsPixel;
        bih.biClrImportant = 0;
        bih.biClrUsed = 0;
        bih.biCompression = 0;
        bih.biHeight = bm.bmHeight;
        bih.biWidth = bm.bmWidth;
        bih.biPlanes = 1;
        bih.biSize = sizeof(BITMAPINFOHEADER);
        bih.biSizeImage = size;
        bih.biXPelsPerMeter = 0;
        bih.biYPelsPerMeter = 0;
        GetDIBits(screendc, bmp, 0, bih.biHeight, data, (BITMAPINFO*)&bih,DIB_RGB_COLORS);
        CFile file;
        BITMAPFILEHEADER hdr;
        hdr.bfType = ((WORD)('M'<<8)|'B');
        hdr.bfSize = 54 + size;
        hdr.bfReserved1 = 0;
        hdr.bfReserved2 = 0;
        hdr.bfOffBits = 54;
        if (file.Open("D:\2\test.bmp",CFile::modeCreate|CFile::modeWrite))
        {
            file.Write(&hdr, sizeof(BITMAPFILEHEADER));
            file.Write(&bih, sizeof(BITMAPINFOHEADER));
            file.Write(data, size);
            file.Close();
        }
    
        GlobalFree(data);
        Invalidate();
    }
    • 演示

    Caesar卢尚宇

    2021年2月27日

    作者: 阿飞

    出处: https://www.cnblogs.com/nxopen2018/>

    关于作者:......

    如有问题, 可在底部(留言)咨询.

  • 相关阅读:
    201521123055 《Java程序设计》第14周学习总结
    201521123055 《Java程序设计》第13周学习总结
    201521123055 《Java程序设计》第12周学习总结
    201521123055 《Java程序设计》第11周学习总结
    个人作业5——软工个人总结
    个人作业4-alpha阶段个人总结
    个人作业3-案例分析
    软件工程网络15结对编程作业
    软工网络15个人阅读作业2
    软工网络15个人阅读作业1
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/14457637.html
Copyright © 2011-2022 走看看