《vc之线程和进程之用剪贴板实现进程间通信》由会员分享,可在线阅读,更多相关《vc之线程和进程之用剪贴板实现进程间通信(4页珍藏版)》请在金锄头文库上搜索。
1、一、创建对话框应用程序工程二、编辑对话框资源控件ID及标题IDD_THREAD_DIALOG用剪贴板实现进程间通信IDC_STATIC进程1发送数据:IDC_EDIT_SENDIDC_STATIC进程2接收数据:IDC_EDIT_RECIDC_SEND 发送IDC_REC 接收三、添加消息响应函数四、于“ThreadDlg.cpp”文件内添加消息响应函数代码void CThreadDlg:OnRec() / TODO: Add your control notification handler code hereif(OpenClipboard()if(IsClipboardFormatAva
2、ilable(CF_TEXT)HANDLE clipboard;char* buf;clipboard=GetClipboardData(CF_TEXT);buf=(char*)GlobalLock(clipboard); GlobalUnlock(clipboard);SetDlgItemText(IDC_EDIT_REC,buf); CloseClipboard();void CThreadDlg:OnSend() / TODO: Add your control notification handler code hereif(OpenClipboard()/打开剪贴板CString s
3、tr;HANDLE clipboard;char * buf;EmptyClipboard(); /清空剪贴板GetDlgItemText(IDC_EDIT_SEND,str);clipboard=GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);buf=(char*)GlobalLock(clipboard); /空字符作文本数据结尾,多分配一个字节 strcpy(buf,str); GlobalUnlock(clipboard); SetClipboardData(CF_TEXT,clipboard); CloseClipboard();五、编译六、
4、运行七、函数说明 1、SetClipboardData()函数声明HANDLE SetClipboardData( UINT nFormat, /剪贴板格式 HANDLE hMen /特定格式之数据句柄 ) 功能:以特定剪贴板格式复制数据到剪贴板。函数调用成功,返回数据句柄;失败,返回NULL,可用GetLastError()函数获取详细错误信息。 2、GetClipboardData()函数声明HANDLE GetClipboardData( UINT uFormat /剪贴板模式 ) 功能:以特定模式获取剪贴板信息。函数调用成功,返回非零值;失败,返回零。 3、GlobalLock()函数
5、声明LPVOID GlobalLock( HGLOBAL hMen /指向全局内存对象之句柄。 ) 功能:锁定一全局内存对象。函数调用成功,返回内存对象第一个字节的指针;失败,返回NULL,可用GetLastError()函数获取详细错误信息。 4、GlobalUnlock()函数声明LPVOID GlobalUnlock( HGLOBAL hMen /指向全局内存对象之句柄。 ) 功能:解除一全局内存对象之锁定。函数调用成功,返回非零值;失败,返回NULL,可用GetLastError()函数获取详细错误信息。 5、GlobalAlloc()函数声明HGLOBAL GlobalAlloc(G
6、MEM_MOVEABLE,str.GetLength()+1)( UINT fFlags, /内存分配相关参数。 SIZE_T dwBytes /内存分配之大小 ) 功能:分配一定数量之堆内存。函数调用成功,返回指向新分配内存对象只句柄;失败,返回NULL,可用GetLastError()函数获取详细错误信息。 6、CloseClipboard()函数声明BOOL CloseClipboard(void) 功能:关闭剪贴板。函数调用成功,返回非零值;失败,返回零。 7、EmptyClipboard()函数声明BOOL EmptyClipboard(void) 功能:清空剪贴板,同时释放剪贴板中的数据句柄。函数调用成功,返回非零值;失败,返回零。