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