VC/MFC怎样取得剪贴板上的图像并显示出来
VC/MFC怎样取得剪贴板上的图像并显示出来
准备做个操作剪贴板的桌面辅助工具,今晚先完成第一步工作,如题。
?
直接贴代码,代码在 VC6 中通过。
?
?
// 下面的代码部分的参考了下面的网址// http://hi.baidu.com/pivotman/blog/item/b7ce681bdc0e74c6a6866933.htmlif (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-twBITMAP 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 图片文件。
?
?