MFC 自定义消息发送字符串
发布日期:2021-05-15 00:17:00 浏览次数:9 分类:精选文章

本文共 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转换为字符数组,然后将其复制到富文本控件中,并释放内存。

上一篇:boost asio退出机制
下一篇:MFC 获得listContrl控件的图标编号.

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月06日 01时38分50秒