MFC使用PostMessage与SendMessage发消息

1 篇文章 0 订阅
1 篇文章 0 订阅

MFC使用PostMessage与SendMessage发消息


1. 在Resource.h中添加自定义消息ID:

#define WM_USER_TREE (WM_USER+400)//WM_USER+num,num至少为100

2. 定义消息处理函数的函数声明:

 afx_msg LRESULT MsgTree(WPARAM wpa, LPARAM lpa);

3. 在类的消息映射表中添加该消息的消息映射入口项:

 ON_MESSAGE(WM_USER_TREE, &CTreeTestDlg::MsgTree)

4. 在类实现中添加消息处理函数的函数实现:

  LRESULT CTreeTestDlg::MsgTree(WPARAM wpa, LPARAM lpa)
  {
	AfxMessageBox(_T("MsgTree响应成功!"));
	return lpa;
  }

5. 在需要该消息的地方发送出消息(此步中的句柄HWND很关键,句柄是否正确影响着消息是否能够发出,以下为我试验成功的案例):

 HWND hwnd;
 CString str = _T("TreeTest");
 hwnd = ::FindWindow(NULL, str);
 if (hwnd)
 {
  //::SendMessage(hwnd, WM_USER_TREE, 0, 0);//SendMessage在此效果相同
  ::PostMessage(hwnd, WM_USER_TREE, 0, 0); //向caption为TreeTest的对话框发送消息
 }
 /************************************分界线***********************************/
 HWND MainHwnd = AfxGetMainWnd()->m_hWnd;
 if (MainHwnd)
  ::PostMessage(MainHwnd, WM_MAINFRM_TREE, 0, 0);//向主框架发送消息
 /************************************分界线***********************************/
 CMainFrame  *pFrame = (CMainFrame*)AfxGetApp()->GetMainWnd();
 CTestView *pView = (CTestView *)pFrame->GetActiveView();
 HWND hwnd = pView->GetSafeHwnd();
 if (hwnd)
  ::PostMessage(hwnd, WM_USER_TREE, 0, 0);//向view类发送消息
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值