VC/MFC怎样取得剪贴板上的图像并显示出来

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 图片文件。

 

 

你可能感兴趣的:(mfc)