MFC发送自定义消息-PostMessage,类似IOS中的通知

接收消息窗体,CMainFrame
1、 首先在stdafx.h中定义消息:例如

#indefine WM_MYMESSAGE (WM_USER+100)

WM_MYMESSAGE是定义的宏

2、定义消息处理函数。
消息处理函数为消息目标类的成员函数。首先应该在.h 文件中声明。这里以主窗口类为例,主窗口类名 CMainFrame,则首先在CMainFrame.h声明消息处理函数。

public: 
afx_msg LRESULT OnCurTaskChanged(WPARAM wParam, LPARAM lParam);

3.在CMainFrame.cpp中实现消息处理函数

LPESULT CMainDialog::OnCurTaskChanged(WPARAM wParam, LPARAM lParam) 
{ 
     // TODO: 处理用户自定义消息 
     m_bIsOpen = false;

     return 0; 
}

4.在CMainFrame.cpp中映射消息ID和消息处理函数

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd) 
//{{AFX_MSG_MAP(CMainFrame) 
ON_WM_CREATE() 
ON_WM_TIMER() 
ON_MESSAGE(WM_MY_MESSAGE, OnCurTaskChanged) 
//}}AFX_MSG_MAP 
END_MESSAGE_MAP()

5、在CMainFrame中创建非模态对话框,通过按钮Click::OnDebug_test

void CMainFrame::OnDebug_test()
{
    m_bIsOpen = false;
    Cam_TestDlg *dlg = new Cam_TestDlg();
    if (!m_bIsOpen)
    {
        dlg->Create(IDD_DIALOG_TEST, GetDesktopWindow());
        dlg->ShowWindow(SW_SHOW);
        m_bIsOpen = !m_bIsOpen; 
        m_bIsOpen = true;
    }
    //TODO: Add your command handler code here
}

在对话框Cam_TestDlg中发送消息

CMainFrame *pFrame;
pFrame = (CMainFrame*)AfxGetMainWnd();  
PostMessageW(pFrame->m_hWnd,  WM_MY_MESSAGE,  NULL , NULL);

PostMessage:把消息投放到线程的消息队列,不能消息被处理就立即返回
SendMessage:消息被处理完后才返回

几种发送消息的写法:

::PostMessage(GetSafeHwnd(), WM_USER_THREADEND, 0, 0); //GetSafeHwnd()表示得到当前窗口句柄,所以这条语句是发送给当前窗口
GetParent()->PostMessage(WM_USER_THREADEND, 0, 0);//发送给父窗口 
this->PostMessage(WM_USER_THREADEND, 0, 0);//发送给当前窗口

HWND h= ::FindWindow(NULL, _T("窗口名字"));
::PostMessage(h, WM_PARASET, 0, 0);//发送给任意窗口

SendMessage也是同样的用法。

MFC发送自定义消息请参考:http://blog.csdn.net/penpenandtongtong/article/details/18598907

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

BeanGo

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

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

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

打赏作者

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

抵扣说明:

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

余额充值