VC/MFC怎样取得剪贴板上的图像并显示出来
准备做个操作剪贴板的桌面辅助工具,今晚先完成第一步工作,如题。
直接贴代码,代码在 VC6 中通过。
// 下面的代码部分的参考了下面的网址
// http://hi.baidu.com/pivotman/blog/item/b7ce681bdc0e74c6a6866933.html
if (OpenClipboard())
{
// Get the clipboard data
HBITMAP handle = (HBITMAP) GetClipboardData(CF_BITMAP);
if (handle != NULL)
{
CBitmap* cbm = CBitmap::FromHandle(handle);
if (cbm != NULL)
{
// 注意:GetBitmapDimension函数不能得到图象的宽度和高度
// 这个函数名太具有迷惑性了
//CSize sz = bm->GetBitmapDimension();
// sz.cx == 0, sz.cy == 0
// 下面的两个网址提供了取得CBitmap的宽度和高度的方法
// http://dreammengjian.blog.hexun.com/4095740_d.html
// http://support.microsoft.com/kb/88555/zh-tw
BITMAP bm;
cbm->GetObject(sizeof(BITMAP), &bm);
CSize sz(bm.bmWidth, bm.bmHeight);
// for debug
//char tmpbuf[256];
//sprintf(tmpbuf, "cx=%d cy=%d\n", sz.cx, sz.cy);
//MessageBox(tmpbuf);
// 下面的代码将剪贴板上的图象显示在窗口上
CClientDC cdc(this);
CDC dc;
dc.CreateCompatibleDC(&cdc);
dc.SelectObject(cbm);
//cdc.BitBlt(0,0,200,200,&dc,0,0,SRCCOPY);
cdc.BitBlt(0, 0, sz.cx, sz.cy, &dc, 0, 0, SRCCOPY);
}
else
{
MessageBox("CBitmap::FromHandle failed");
}
}
else
{
MessageBox("GetClipboardData CF_BITMAP failed");
}
CloseClipboard();
}
else
{
MessageBox("OpenClipboard failed");
}
下一阶段的尝试:将 CBitmap/BITMAP 保存成为 jpg 或 gif 图片文件。