windows编程之剪切板

进程通信的方式很多,可以通过套接字,管道,内存共享,WM_COPYDATA消息,当然剪切板也是一种方式,并且在以后的环节还可能用得比较多。

使用剪切板的步骤主要是: 打开剪切板,

发送端代码大概如下:

HWND hEdit = GetDlgItem(hwnd, IDC_EDIT_INPUT);
TCHAR szEdit[100] = { 0 };
GetWindowText(hEdit, szEdit, 99);//得到编辑框中的数据
if (!OpenClipboard(hwnd))//如果打开失败则返回
{
	return;
}
EmptyClipboard();//清空剪切板数据
HGLOBAL hglobal= GlobalAlloc(GMEM_FIXED, 100);//分配一块固定大小的内存
TCHAR *buff = (TCHAR *)hglobal;
GlobalLock(hglobal);//锁定该区域内存
memcpy(buff, szEdit, 99);//将值拷贝过去
SetClipboardData(CF_TEXT, hglobal);//设置数据格式
GlobalUnlock(hglobal);//解锁该区域
CloseClipboard();//关闭剪切板,这里很重要,如果这里忘记了关闭,其他进程则无法使用剪切板,不能得到剪切板中的数据。
HWND hfind = FindWindow(NULL, L"OUTPUT");
//再次提醒,发送之前一定要先关闭剪切板。
SendMessage(hfind, WM_PASTE, 0, 0);
	
接收端通过得到WM_PASTE消息,对该消息进行处理,可以方便的操作剪切板中的数据:

case WM_PASTE:
	{
		if (!OpenClipboard(GetDlgItem(hWnd,IDC_STATIC_OUTPUT)))
		{
			return DefWindowProc(hWnd, message, wParam, lParam);
		}
		HANDLE hClipData = GetClipboardData(CF_TEXT);

		TCHAR *buff =(TCHAR *) GlobalLock(hClipData);
		SetWindowText(GetDlgItem(hWnd, IDC_STATIC_OUTPUT), buff);
		CloseClipboard();
	}
	break;


接收端也可以是使用Edit,来追加一段数据:

case WM_PASTE:
		{//粘贴消息,把剪切板里面的数据拿出来,显示在文本框里面

			//只接收文本消息
			if (!IsClipboardFormatAvailable(CF_TEXT))
				break;

			//打开剪切板
			if (!OpenClipboard(g_hMainWnd))
				break;

			//获取剪切板数据
			HANDLE hClipboard = GetClipboardData(CF_TEXT);
			TCHAR* szBuffer = (TCHAR*)GlobalLock(hClipboard);
			if (szBuffer != NULL)
			{
				//把文本数据显示在文本框里面
				HWND hEdit = GetDlgItem(g_hMainWnd, IDC_EDIT_OUTPUT);

				//往文本里面插入数据
				//1)选择一段空字符
				SendMessage(hEdit, EM_SETSEL, (WPARAM)-1, (LPARAM)-1);
				//2)把一段选择的字符替换掉
				SendMessage(hEdit, EM_REPLACESEL, FALSE, (LPARAM)szBuffer);

				//换行
				SendMessage(hEdit, EM_SETSEL, (WPARAM)-1, (LPARAM)-1);
				SendMessage(hEdit, EM_REPLACESEL, FALSE, (LPARAM)L"\r\n");

				//解锁
				GlobalUnlock(hClipboard);
			}
			CloseClipboard();
		}
		break;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值