欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(三)Win32进程通信 —— 数据复制消息

程序员文章站 2022-04-02 23:18:02
...

数据复制通信,顾名思义就是将数据进行复制

我们需要认识一个结构体来完成数据复制:

typedef struct tagCOPYDATASTRUCT
{
ULONG_PTR dwData;
DWORD cbData;
Field_size_bytes(cbData) PVOID lpData;
}
COPYDATASTRUCT, *PCOPYDATASTRUCT;

细心的小伙伴应该观察到了里面有个成员 PVOID lpData,这意味着什么呢?
我们可以将大量的数据都进行复制,这是完全没有问题的


案例效果演示:

(三)Win32进程通信 —— 数据复制消息


服务端窗口及功能实现步骤:

  1. 搭建窗口界面,并为控件设置自定义ID:
    (三)Win32进程通信 —— 数据复制消息

  2. 为编辑框添加变量:

(三)Win32进程通信 —— 数据复制消息
3. 双击发送按钮实现发送数据功能:

(三)Win32进程通信 —— 数据复制消息

CWnd* cWnd = CWnd::FindWindow(NULL, _T("datarecv"));	// 查找窗口
if(cWnd == NULL)
{
    MessageBox(TEXT("no find windows."));
    return;
}

UpdateData(TRUE);	// 更新到最新的数据到变量中

COPYDATASTRUCT cd;	// 定义复制数据结构体
cd.cdData = m_CopyData.GetLength() * sizeof(TCHAR);	// 保存的是字节
cd.dwData = 0;		// 可加可不加
cd.lpData = m_CopyData.GetBuffer(cd.cbData);	// 指向我们需要的数据的缓存

cWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&cd);	// 发送消息,将cd当做参数

服务端已经写好,接下来写客户端


客户端窗口及功能实现步骤:

  1. 搭建窗口界面,并为控件设置自定义ID:

(三)Win32进程通信 —— 数据复制消息

  1. 为编辑框添加变量:

(三)Win32进程通信 —— 数据复制消息

  1. 为窗口添加消息(WM_COPYDATA):

(三)Win32进程通信 —— 数据复制消息

(三)Win32进程通信 —— 数据复制消息

  1. 写这个消息的代码:
m_CopyData = (LPTSTR)pCopyDataStruct->lpData;	// 获取数据
// 截取范围,否则会有许多垃圾数据
m_CopyData = m_CopyData.Left(pCopyDataStruct->cbData / sizeof(TCHAR));

UpdateData(FALSE);	// 将数据更新到控件中

如此,我们的程序就写好了


作者:浪子花梦

Time:2020.02.14

情人节快乐,各位

相关标签: Win32 win32