注册主窗口消息响应函数-用于进程通信

  (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)

进程间消息通信的时候,在window下我们可以通过在主窗口上注册消息回调函数,来响应消息的处理:首先是定义一个唯一标识的消息id,然后定义并注册窗口消息回调函数来响应这个消息。

 

1.        注册消息ID:RegisterWindowMessage

UINT g_myMsgID = 0; // global data

g_myMsgID = RegisterWindowMessage(myWindows); //推荐使用guid作为参数

 

2.        定义回调函数处理消息LRESULT (CALLBACK *WinProc)(HWNDhWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

typedef LRESULT (CALLBACK *WinProc)(HWNDhWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

WinProc g_preProc = nullptr; // global data

LRESULT CALLBACK newProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

{

   if (uMsg == g_myMsgID)

   {

        // 自定义的处理

  }

   else

   {

        // 调用原处理

if (g_preProc != nullptr)

        {

            return g_preProc(hWnd, uMsg, wParam, lParam);

        }

   }

   return 0;

}

 

3.        设置回调函数SetWindowLongPtr,类型GWLP_WNDPROC

HWND g_hWnd = nullptr; // global data

g_hWnd = reinterpret_cast<HWND>(myWind.winId());

g_preProc=reinterpret_cast<WinProc>(::SetWindowLongPtr(g_hWnd, GWLP_WNDPROC, reinterpret_cast<__int64>(&newProc)));

 

 

4.  发送注册类型的消息SendMessage

WPARAM wParam = 0;

LPARAM lParam = 0;

SendMessage(g_hWnd, g_myMsgID,wParam,lParam);

 

 

5.        进程间消息通知

SendMessage可以用作进程间的通信,前提需要知道窗口的HWND,并且是进行一对一的通信;

BroadcastSystemMessage也可以用作进程间通信,以广播形式,实现1对多的消息通信,所有的进程都会收到该消息

一对一通信

g_myMsgID = RegisterWindowMessage(myWindows);

SendMessage(g_hWnd, g_myMsgID,wParam,lParam);

一对多通信

g_myMsgID = RegisterWindowMessage(myWindows);

DWORD dwRecipients = BSM_APPLICATIONS;

BroadcastSystemMessage(BSF_IGNORECURRENTTASK|BSF_POSTMESSAGE, &dwRecipients,g_myMsgID, wParam, lParam);

  (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

春夜喜雨

稀罕你的喜欢!!

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

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

打赏作者

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

抵扣说明:

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

余额充值