博客
关于我
MFC 自定义消息发送字符串
阅读量:585 次
发布时间: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/

你可能感兴趣的文章
二分查找.基于有序数组的查找方法.704
查看>>
制作JS验证码(简易)
查看>>
sklearn :ImportError: cannot import name ‘Imputer‘
查看>>
adb通过USB或wifi连接手机
查看>>
泛型机制 Generic
查看>>
包装类
查看>>
JDK9-15新特性
查看>>
集合继承结构
查看>>
LinkedList 实现类
查看>>
Vector 实现类
查看>>
HashMap类、HashSet
查看>>
HashTable类
查看>>
TreeSet、TreeMap
查看>>
ObjectInputStream、ObjectOutputStream
查看>>
JVM内存模型
查看>>
反射机制
查看>>
反射Field、Method、Constructor
查看>>
可变长度参数
查看>>
堆空间常用参数总结
查看>>
3、条件查询
查看>>