• j截图Code


     

    void CjietuDlg::copyScreen(CHAR * filename)

    {

        HDC hScrDC, hMemDC;

        int width, height;

     

        //the pointer will save all pixel point's color value

        BYTE *lpBitmapBits = NULL;

     

        //creates a device context for the screen device

        hScrDC = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL);

     

        //get the screen point size

        width = GetDeviceCaps(hScrDC, HORZRES);

        height = GetDeviceCaps(hScrDC, VERTRES);

     

        //creates a memory device context (DC) compatible with the screen device(hScrDC)

        hMemDC = CreateCompatibleDC(hScrDC);

     

        //initialise the struct BITMAPINFO for the bimap infomation

        //in order to use the function CreateDIBSection

        // on wince os, each pixel stored by 24 bits(biBitCount=24)

        //and no compressing(biCompression=0)

        BITMAPINFO RGB24BitsBITMAPINFO;

        ZeroMemory(&RGB24BitsBITMAPINFO, sizeof(BITMAPINFO));

        RGB24BitsBITMAPINFO.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);

        RGB24BitsBITMAPINFO.bmiHeader.biWidth = width;

        RGB24BitsBITMAPINFO.bmiHeader.biHeight = height;

        RGB24BitsBITMAPINFO.bmiHeader.biPlanes = 1;

        RGB24BitsBITMAPINFO.bmiHeader.biBitCount = 24;

     

        //use the function CreateDIBSection and SelectObject

        //in order to get the bimap pointer : lpBitmapBits

        HBITMAP directBmp = CreateDIBSection(hMemDC, (BITMAPINFO*)&RGB24BitsBITMAPINFO,

           DIB_RGB_COLORS, (void **)&lpBitmapBits, NULL, 0);

        HGDIOBJ previousObject = SelectObject(hMemDC, directBmp);

     

        // copy the screen dc to the memory dc

        BitBlt(hMemDC, 0, 0, width, height,hScrDC, 0, 0, SRCCOPY);

     

        //if you only want to get the every pixel color value,

        //you can begin here and the following part of this function will be unuseful;

        //the following part is in order to write file;

     

        //bimap file header in order to write bmp file

        BITMAPFILEHEADER bmBITMAPFILEHEADER;

        ZeroMemory(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER));

        bmBITMAPFILEHEADER.bfType = 0x4d42; //bmp

        bmBITMAPFILEHEADER.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);

        bmBITMAPFILEHEADER.bfSize = bmBITMAPFILEHEADER.bfOffBits + ((width*height)*3); ///3=(24 / 8)

     

        //write into file

        FILE *mStream = NULL;

        if((mStream = fopen(filename, "wb")))

        {

           //write bitmap file header

           fwrite(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER), 1, mStream);

           //write bitmap info

           fwrite(&(RGB24BitsBITMAPINFO.bmiHeader), sizeof(BITMAPINFOHEADER), 1, mStream);

           //write bitmap pixels data

           fwrite(lpBitmapBits, 3*width*height, 1, mStream);

           //close file

           fclose(mStream);

        }

     

        //delete

        DeleteObject(hMemDC);

        DeleteObject(hScrDC);

        DeleteObject(directBmp);

        DeleteObject(previousObject);

    }

     

    void CjietuDlg::OnBnClickedOk()

    {

        // TODO: Add your control notification handler code here

        static int iN=0;

        CString str("");

     

        str.Format(L"%d.bmp",iN);

        char   charTest[512];

        WideCharToMultiByte(CP_ACP,0,str,-1,charTest,512,NULL,NULL);

        copyScreen(charTest);

        iN++;

     

        //OnOK();

    }

  • 相关阅读:
    汇编中寄存器及其用处
    直接打印则需要调用PrintDocumnt.Print()方可打印,否按在对话框中点【打印】但不会有反应
    操作另一窗体的变量事件
    System.Windows.Forms.ListControl.SelectedValue.get 返回 null
    combox的selectedValue初始值注意事项
    vs2017中EF6.4无法导入到PM中,应使用EF6.2或6.1.1
    去除 Datetime的字段会自动赋默认值0001-1-1 0:00:00
    EF使用问题备忘
    EF中自定义连接字符串
    C#如何改变DataTable中的数据?
  • 原文地址:https://www.cnblogs.com/wqj1212/p/2340861.html
Copyright © 2020-2023  润新知