首页 > 代码库 > 终极理解ON_MESSAGE和ON_NOTIFY
终极理解ON_MESSAGE和ON_NOTIFY
------《两种消息发送》--------------------
SendMessage()---->
ON_MESSAGE(注册的消息)
ON_NOTIFY(注册的消息)
SendPoMessage()--->
ON_PO_MESSAGE(注册的消息)
ON_PO_NOTIFY(注册的消息)
=======《两种消息发送》=================
-------《点击趋势图上面的右键频谱图菜单,来获取频谱数据并显示信息页》------------------------
趋势图上面点击操作
<Panel中判断>
点击
左键
右键
左键
通过函数调用方式请求频谱数据RequestWaveFFT(a_pTrend, nLineIndex, nIndex, WM_RC_ALARM_QUERY_VIB_FFT, 2, pTrendDest->GetSafeHwnd());
请求数据需要传入的参数有趋势图、线、点。
在上面这个函数里面,发送一个消息PostPOMessage。
<PO>
ON_PO_MESSAGE(注册的消息) 这里向中间件请求数据
ON_PO_NOTIFY(注册的消息) 这里向操作页发送消息 m_dlgOpPage.SendMessage(WM_RC_ALARM_QUERY_VIB_FFT, wparam, lparam);这里用的是sendmessage
<DlgOpPage中>
可惜只有ON_MESSAGE(注册的消息) 这里直接通过PO的对象来调用po的函数g_pPO->DrawFFT(pData)
<PO里面来画图和显示操作页>
========《点击趋势图上面的右键频谱图菜单,来获取频谱数据并显示信息页》=========================
//附图片
---------------------------------------------------------------------------------------------------------------
......begin......
//***CDlgAxisPosition.cpp
//对话框控件点击
-> CDlgAxisPosition::OnBnClickedBtnStopandrefresh()
//函数调用
-> RequestHisData();
//向指定控件发送异步消息(寄存到消息队列立即返回)
-> g_poAxisPosition->PostPOMessage(POMSG_BH5000_COMMON_VIBTRENDHIS_OFF_GETVIBCHANNSTREND_ID,(LPARAM)in,(WPARAM)out);
//本类中有消息注册的相应函数,执行
-> ON_MESSAGE(POMSG_BH5000_COMMON_VIBTRENDHIS_OFF_GETVIBCHANNSTREND_ID,DrawHisTrend)
-> LRESULT CDlgAxisPosition::DrawHisTrend( WPARAM wParam,LPARAM lParam )
//调用另外类的指定函数
-> g_poAxisPosition->DrawHisTrend(lpIn,lpOut);
//****CAxisPositionPO.cpp
//函数被调用
-> void CAxisPositionPO::DrawHisTrend( ST_COMMON_OFF_GETVIBCHANNSTREND_IN * in_, ST_COMMON_OFF_GETVIBCHANNSTREND_OUT * out_ )
//调用另外类的指定函数
-> m_dlgAxisPosition->RequestHisWaveData(loCurTime);
//***CDlgAxisPosition.cpp
//函数被调用
-> void CDlgAxisPosition::RequestHisWaveData( CBHDateTime dtTime_)
//向指定控件发送异步消息(寄存到消息队列立即返回)
-> g_poAxisPosition->PostPOMessage(POMSG_BH5000_COMMON_AXISTRACK_OFF_GETAXESTRACK_ID,(LPARAM)lpIn,(WPARAM)lpOut);
//****CAxisPositionPO.cpp
//注册消息被调用
-> ON_PO_MESSAGE(POMSG_BH5000_COMMON_AXISTRACK_OFF_GETAXESTRACK_ID,GetAxisHisWave)
-> void CAxisPositionPO::GetAxisHisWave( void *& data,LPARAM lParam, WPARAM wParam )
GetAxisHisWave()---More()
lpFixComm->CreateHead(SERVICE_SERVICE_OFF_GETAXESTRACK);//21008
SERVICE_SERVICE_OFF_GETAXESTRACK通信中间件的消息头
//注册消息被调用
-> ON_PO_NOTIFY(POMSG_BH5000_COMMON_AXISTRACK_OFF_GETAXESTRACK_ID,DrawAxisHisWave)
//***CDlgAxisPosition.cpp
//注册消息
-> ON_MESSAGE(POMSG_BH5000_COMMON_AXISTRACK_OFF_GETAXESTRACK_ID,DrawHisAxisWave)
//执行注册消息
-> LRESULT CDlgAxisPosition::DrawHisAxisWave( WPARAM wParam,LPARAM lParam )
//函数调用
-> g_poAxisPosition->DrawAxisHisWave(lpIn,lpOut);
......end......