MFC简单使用PostMessage

在看MFC代码中总是会出现PostMessage这个函数,当按下F12的时候又会出现一个宏定义,在按就不知道去哪了。一直摸不到头脑,今天看到一篇博客写了相关的知识,也只是介绍了一下。

C++进程间通信之SendMessage和PostMessage_Simple Simple的博客-CSDN博客_postmessage进程间通信

我写了个demo用一下这个函数,代码很简单,就是按下button然后edit编辑框加一个数。主要是使用这个函数用法。

使用思路,第一就是先定义一个宏定义:

这个宏定义的格式: 

#define ADD_NUM  (WM_USER+1000)

其中ADD_NUM这个是随便取名的,后面的WM_USER是不能变的,1000是自定义的。

然后定义一个函数:

LRESULT AddNum(WPARAM wParam, LPARAM lParam);

其中AddNum是可以自定义的,其他的都不可以变。看函数的参数都是别名,进去看都是数值类型的。所以传数值类型的参数问题不大。

第三步就是绑定了;需要在初始化的时候把宏定义和函数绑定起来。

 蓝色箭头的是自己添加的其他的都是自动生成的。

这样就绑定好了。然后看简单代码。

MFC的UI,就拖了两个框什么都没动,然后再button1双击进去; 

 这就是button1的代码,PostMessage函数参数,第一个是刚才定义的宏,第二个参数和第三个参数是需要传的参数,第二个参数num是再CPostMessageDlg类中定义的一个int类型,第三个参数没用就设置位NULL。

void CPostMessageDlg::OnBnClickedButton1()
{
	PostMessage(ADD_NUM,num++,NULL);
	// TODO: Add your control notification handler code here
}

 看具体动作函数:

这个函数就是刚才定义的AddNum函数实现的函数。

LRESULT CPostMessageDlg::AddNum(WPARAM wParam, LPARAM lParam)
{
	CString str;
	 str = std::to_string((int)wParam).c_str();
	SetDlgItemText(IDC_EDIT1, str);
	return 1;
}

当按下button PostMessage(ADD_NUM,num++,NULL);函数就是触发,然后异步调用

LRESULT CPostMessageDlg::AddNum(WPARAM wParam, LPARAM lParam)函数,然后执行,这个操作个人感觉和Qt的信号槽比较类似,但是仅仅是类似实现方法我觉得是不一样的,因为槽函数的是没那么多限制的,而且槽函数是需要moc解释器先解释才可以的,需要有宏定义的定义,而MFC这个应该是MFC传递的函数指针,最后这几句就是个人瞎猜,仅仅是好理解,具体怎么实现的看看源码应该就知道了。

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MFCPostMessage函数用于将消息发送到指定的窗口。以下是PostMessage函数的一般用法: 1. 导入头文件:在需要使用PostMessage函数的地方,首先要导入头文件 "afxwin.h"。 2. 获取窗口句柄:找到要发送消息的窗口,可以使用FindWindow或GetDlgItem等函数获取其窗口句柄。 3. 构造消息参数:确定要发送的消息类型和相关参数。消息类型可以是预定义的Windows消息,也可以是自定义的消息。 4. 调用PostMessage函数:使用窗口句柄和消息参数调用PostMessage函数发送消息。 以下是一个使用PostMessage函数发送WM_USER自定义消息的示例: ```cpp #include <afxwin.h> // 获取要发送消息的窗口句柄 HWND hWnd = ::FindWindow(NULL, _T("My Window")); if (hWnd) { // 构造自定义消息参数 UINT msg = WM_USER + 1; WPARAM wParam = 0; LPARAM lParam = 123; // 发送消息 ::PostMessage(hWnd, msg, wParam, lParam); } ``` 在这个示例中,我们使用FindWindow函数找到窗口标题为"My Window"的窗口,并将其句柄存储在hWnd变量中。然后,我们构造了一个自定义消息参数,包括消息类型(msg)、wParam和lParam。最后,我们使用PostMessage函数将消息发送到指定窗口。 请注意,PostMessage函数是异步的,它将消息放入接收窗口的消息队列中,并立即返回,不会等待消息被处理。如果需要等待消息被处理并处理完毕后再继续执行代码,可以考虑使用SendMessage函数。 希望这个例子对你有所帮助!如果你有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波雅_汉库克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值