我想在我的程序中能够将当前屏慕截下来并以指定格式存放好,如jpg,谁有这方面的经验,思路也好,代码也好,当然最好是有简单的代码,感谢不尽,谢谢!

解决方案 »

  1.   

    CDC dc;
    dc.CreateDC("DISPLAY",NULL,NULL,NULL);
    CBitmap bm;
    int Width=GetSystemMetrics(SM_CXSCREEN);
    int Height=GetSystemMetrics(SM_CYSCREEN);
    bm.CreateCompatibleBitmap(&dc,Width,Height);
    CDC tdc;
    tdc.CreateCompatibleDC(&dc);
    CBitmap*pOld=tdc.SelectObject(&bm);
        tdc.BitBlt(0,0,Width,Height,&dc,0,0,SRCCOPY);
    tdc.SelectObject(pOld);
    BITMAP btm;
    bm.GetBitmap(&btm);
    DWORD size=btm.bmWidthBytes*btm.bmHeight;
    LPSTR lpData=(LPSTR)GlobalAlloc(GPTR,size);
    /////////////////////////////////////////////
    BITMAPINFOHEADER bih;
    bih.biBitCount=btm.bmBitsPixel;
    bih.biClrImportant=0;
    bih.biClrUsed=0;
    bih.biCompression=0;
    bih.biHeight=btm.bmHeight;
    bih.biPlanes=1;
    bih.biSize=sizeof(BITMAPINFOHEADER);
    bih.biSizeImage=size;
    bih.biWidth=btm.bmWidth;
    bih.biXPelsPerMeter=0;
    bih.biYPelsPerMeter=0;
    GetDIBits(dc,bm,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);
    static int filecount=0;

    BITMAPFILEHEADER bfh;
    bfh.bfReserved1=bfh.bfReserved2=0;
    bfh.bfType=((WORD)('M'<< 8)|'B');
    bfh.bfSize=54+size;
    bfh.bfOffBits=54;

    m_size=size+sizeof(bfh)+sizeof(bih);
    m_Data=new char[m_size];
    memset(m_Data,0,sizeof(m_size));

    memcpy(m_Data,&bfh,sizeof(bfh));
    memcpy(m_Data+sizeof(bfh),&bih,sizeof(bih));
    memcpy(m_Data+sizeof(bfh)+sizeof(bih),lpData,size);    ::GlobalFree(lpData);
    pOld->DeleteObject();
    tdc.DeleteDC();
    dc.DeleteDC();
    bm.DeleteObject();
      

  2.   

    截屏生成bmp比较好办,得到bmp之后再转换为jpg吧
    直接生成jpg好像不容易