首页 > 代码库 > 终极理解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......