预览
正文
下面我们来利用剪贴板来实现进程间的通信:
第一步:
我们在资源中设置相关的对话框的控件
第二步:
我们来编写发送端程序
void CClipboardDlg::OnBtnSend()
{
// TODO: Add your control notification handler code here
if (OpenClipboard()) //判断剪贴板是否可以被打开
{
CString str; //定义一个数据对象
HANDLE hclip; //定义一个句柄
char *pbuf;
EmptyClipboard(); //清空剪贴板上的数据
GetDlgItemText(IDC_EDIT_SEND,str); //去获的发送端的数据
hclip=GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);//分配一个内存的对象
pbuf=(char*)GlobalLock(hclip); //将获取的对象转化为指针
strcpy(pbuf,str); //将我们的cstring对象的数据拷贝到我们的内存中
GlobalUnlock(hclip); //解锁
SetClipboardData(CF_TEXT,hclip); //设置剪贴板
CloseClipboard(); //关闭剪贴板
}
}
第三步:
我们来编写接受端程序
void CClipboardDlg::OnBtnRecv()
{
// TODO: Add your control notification handler code here
if (OpenClipboard())//判断剪贴板是否可以打开
{
if (IsClipboardFormatAvailable(CF_TEXT))//判断剪贴板是否可用
{
HANDLE hclip; //定义句柄变量
char *pbuf;
hclip=GetClipboardData(CF_TEXT); //去得到指定格式的数据
pbuf=(char*)GlobalLock(hclip) ; //将数据转化为内存地址
GlobalUnlock(hclip); //关闭
SetDlgItemText(IDC_EDIT_RECV,pbuf); //将我们从剪贴板上得到的数据放到我们的接受端上
CloseClipboard(); //关闭剪贴板
}
}
}