急,请教如何把剪贴板中的printscreen中的图片保存成一文件
vc里的代码该怎么写啊
急啊,谢谢各位了

解决方案 »

  1.   

    1、OpenClipboard
    2、GetClipboardData
    3、WriteToBitmapif(OpenClipboard())
    {
    // get bmp info 
    HANDLE hClipData = ::GetClipboardData(CF_DIB);
    if(hClipData)
    {
    UINT nSize = ::GlobalSize(hClipData);
    UINT nFileSize = nSize+14;
    BYTE *pBmpBuf = new BYTE[nFileSize];
    CopyMemory(pBmpBuf+14,hClipData,nSize);
    BITMAPFILEHEADER *pBfh = (BITMAPFILEHEADER *)pBmpBuf;
    pBfh->bfReserved1 = 0;
    pBfh->bfReserved2 = 0;
    pBfh->bfSize = nFileSize;
    BYTE *pTemp = pBmpBuf;
    *pTemp = 'B';
    pTemp++;
    *pTemp = 'M'; BITMAPINFOHEADER *pBih = (BITMAPINFOHEADER *)(pBfh+1);
    pBfh->bfOffBits = nFileSize - pBih->biSizeImage; WriteToBMPFile("d:\\movie\\bmp_WithClip.bmp",pBmpBuf, nFileSize);
                               delete []pBmpBuf; } CloseClipboard();
    }void CJpeg2BmpDlg::WriteToBMPFile(char *pFileName,BYTE *pBmpBuf, UINT nBmplen)
    {
    // open file
        HANDLE hFile = CreateFile(pFileName,//"d:\\movie\\testJPG_PngLib.bmp",
                                  GENERIC_WRITE,
                                  0,
                                  NULL,
                                  CREATE_ALWAYS,
                                  0,
                                  NULL);    if (hFile == INVALID_HANDLE_VALUE)
        {
            AfxMessageBox ("Could not read file");
            return;
        } DWORD dwBytesRead = 0;
    BOOL bRead = WriteFile(hFile,
                              pBmpBuf,
                              nBmplen,
                              &dwBytesRead,
                              NULL);
    CloseHandle(hFile);  
    }