假如在word里面进行了复制一张图片操作,我想在应用程序中捕捉这个图片
但这个图片在剪贴板里存储的格式是CF_BIMAP,还是CF_ENHMETAFILE呢?
好像我用 HANDLE hMem=GetClipboardData(CF_BITMAP)得到的句柄是空的,但我如果复制文字的话
在应用程序里用 hMem=GetClipboardData(CF_TEXT)可以捕捉到,那图片怎么捕捉不到啊!!!!!

解决方案 »

  1.   

    void CCaption::OnGridPaste() 
    {
    // TODO: Add your command handler code here
    BITMAPINFO *pbmpInfo;
    BITMAPINFOHEADER *pbmHead;
    BYTE *DIBs;
    int  colors;
    int  rows;
    int  bytes;
    int  bytesperline;
    int  jj;
     //
    if (!OpenClipboard()) return;
    // if nothing
        if (!(pbmpInfo = (BITMAPINFO*)GetClipboardData(CF_DIB)))
    {
    goto exit;
    }
    // Data has got
    pbmHead=&pbmpInfo->bmiHeader;
    // get colors
    colors=1 << pbmHead->biBitCount;
    if(colors != 2)
    {
    AfxMessageBox("Not 2 colors BMP!");
    goto exit;
    }
    //Do not change size    
    rows  = pbmHead->biHeight; 
    if(rows > m_GlyphSize)
    {
    //AfxMessageBox("Height of Bmp too big!");
    }
    // attention filling bytes  
        bytesperline=WIDTHBYTES(pbmHead->biWidth * pbmHead->biPlanes * pbmHead->biBitCount);
    // image at
    DIBs=(BYTE*)pbmpInfo + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * colors;
    // width
    bytes = pbmHead->biWidth/8;
    if(bytes==1) bytes=2;
    // Clean all
    memset(m_Glyph,0,sizeof(m_Glyph));
    // fill glyph
    for(jj=0;jj<rows;jj++)
    {
    m_Glyph[bytes*jj]  =*(DIBs+bytesperline*(rows-1-jj));
    m_Glyph[bytes*jj+1]=*(DIBs+bytesperline*(rows-1-jj)+1);
    if(bytes==3) m_Glyph[bytes*jj+2]=*(DIBs+bytesperline*(rows-1-jj)+2);
    }
    Invalidate();
    exit:
    CloseClipboard(); 
    }
      

  2.   

    复制word里的文字的话,格式是CF_TEXT&CF_ENHMETAFILE,所以你可以有两种方法得到其内容。可惜不是CF_BIMAP格式。
      

  3.   

    Get it! 
      Format:CF_DIB- -