OCX 控制元件主動傳送訊息給 MFC 視窗訊息

spirate5發表於2018-06-08

考慮到Ocx控制元件在某些情況下需要主動通知 MFC 視窗訊息,這就需要給Ocx控制元件新增事件訊息,以及在MFC視窗中進行事件訊息的響應。此過程可分兩步走:

     1,Ocx 新增事件訊息

     2,MFC對Ocx控制元件事件進行相應


  1,Ocx 新增事件訊息

        新增Ocx事件訊息可以通過,Ocx事件新增嚮導進行新增,也可以手動新增,本文講一下手動新增。

        首先新增事件ID,如下圖所示:

           

       這段程式碼在XXXCtrl.h標頭檔案中,本文新增“eventidNoifyMsg”值設定為1.(值可隨機設定)。

       而後在需要傳送訊息的地方新增 FireEvent(DISPID dispid, BYTE* pbParams, ...),此函式的功能同SendMessage和PostMessage;

     dispid ="本文新增的‘eventidNotifyMsg’"  事件ID

     pbParam = EVENT_PARAM(VTS_BSTR)        引數型別 可以有多個

    

    上圖是在AddFun函式中呼叫FireEvent函式,向MFC視窗傳送事件訊息.

              訊息ID:eventidNofifyMsg = 1

     訊息引數型別:VTS_BSTR

               引數值:正在計算請耐心等待

      這裡引數個數為一個,到這裡Ocx的事件就新增完了。

 2,MFC對Ocx控制元件事件進行相應

    本人的程式是基於MFC對話方塊的,需要在XXXDlg.h中新增如下程式碼:

   

   呼叫DECLARE_EVENTSINK_MAP()巨集和申明Ocx事件訊息響應函式,void OnShowOcxMsg()。

   而後在XXXDlg.cpp中新增事件對映(本人的是CTestOcxDlg.cpp)。如下圖:

   

其中ON_EVENT()中的第三個引數就是第一步中新增的事件ID eventidNotifyMsg = 1. OnShwoOcxMsg函式中的引數 lpStr用來接收Ocx控制元件傳遞過來的“正在計算請耐心等待”。此函式引數跟Ocx傳遞過來的訊息引數個數和型別一致

相關文章