博客
关于我
MFC 自定义消息发送字符串
阅读量:584 次
发布时间:2019-03-12

本文共 1261 字,大约阅读时间需要 4 分钟。

消息定义

在Windows应用程序中,消息的传递是核心的操作之一。消息可以用不同的方式定义,以便于在代码中使用。以下是两种常用的方式:

第一种方式是使用#define预定义符:

#define WM_NET_CMD_STRING (WM_USER + 100)

这种方式简单且直接,适用于需要轻量级定义的场景。

第二种方式是使用枚举(enum):

enum WM_NET_CMD_ID {    WM_NET_CMD_STRING  = WM_USER + 100,    WM_NET_CMD_INT,    WM_NET_CMD_FLOAT,    WM_NET_CMD_REBOOT,    WM_NET_CMD_SHUTDOWN,};

枚举方式提供了更强大的类型安全性,有助于避免命名冲突,并且在代码中更加直观。

发送消息

在发送消息时,我们可以使用postMessage函数或sendMessage函数。postMessage函数会将消息放置在队列中,立即返回,而sendMessage函数则会送达目标窗口并立即返回。以下是发送字符串的示例代码:

char *pBuf = new char[1024];memset(pBuf, 0, 1024);memcpy(pBuf, data, len);if (!AfxGetApp()->m_pMainWnd->PostMessage(WM_NET_CMD_STRING, (WPARAM)pBuf, 0)){    delete[] pBuf;}

对于需要发送结构体的消息,方法类似,不过需要将结构体数据复制到目标窗口中。

消息传递

消息传递是应用程序的核心机制之一。在窗口类中,我们可以使用消息映射(message map)来处理特定的消息。以下是一个示例:

BEGIN_MESSAGE_MAP(CTcpAsyncClientDlg, CDialogEx)    ON_WM_SYSCOMMAND()    ON_WM_PAINT()    ON_MESSAGE(WM_NET_CMD_STRING, &CTcpAsyncClientDlg::OnNetCmdString)END_MESSAGE_MAP()

函数实现

当目标窗口接收到特定消息时,我们可以编写回调函数来处理它。以下是处理WM_NET_CMD_STRING消息的示例代码:

LRESULT CTcpAsyncClientDlg::OnNetCmdString(WPARAM wParam, LPARAM lParam){    char *pBuf = (char *)wParam;    CString str = pBuf;    m_pTcpAsyncClientDlg->m_listNetInfo.AddString(str);    delete[] pBuf;    return 0;}

在这段代码中,我们首先将wParam转换为字符数组,然后将其复制到富文本控件中,并释放内存。

转载地址:http://rwetz.baihongyu.com/

你可能感兴趣的文章
8、子查询
查看>>
cordova打包apk更改图标
查看>>
开启与配置SMTP服务器
查看>>
APP卡片式设计
查看>>
GitHub上传时,项目在已有文档时直接push出现错误解决方案
查看>>
云数据库
查看>>
大数据在不同领域的应用
查看>>
页面置换算法
查看>>
推荐系统资料
查看>>
文件系统的层次结构
查看>>
减少磁盘延迟时间的方法
查看>>
vue(渐进式前端框架)
查看>>
权值初始化和与损失函数
查看>>
案例讨论
查看>>
传输层基本功能
查看>>
问题的计算复杂度:排序问题
查看>>
算法的伪码表示
查看>>
递推方程与算法分析
查看>>
主定理的应用
查看>>
动态规划算法的迭代实现
查看>>