wxWidgets自定義訊息及處理

2021-06-29 13:23:14 字數 1996 閱讀 3230

使用者自定義訊息通常從wxevent派生,下面,以乙個使用者自定義的projectevent為例,說明自定義訊息的步驟:

首先,在標頭檔案中宣告訊息。

/// userevent.h

class projectevent :wxevent

wxdeclare_event(project_event, projectevent);

其中,wxdeclare_event(project_event, projectevent)的含義是宣告了乙個新的訊息型別project_event,該訊息型別對應的訊息類是projectevent。即,使用者在訊息迴圈中處理project_event訊息時,訊息迴圈給使用者訊息處理函式提供的引數類別是projectevent類。

然後,在原始檔中定義訊息。

/// userevent.cpp

#include "userevent.h"

wxdefine_event(project_event, projectevent);

projectevent::projectevent(int itemid, int eventtag)

: wxevent(), mitemid(itemid), meventtag(eventtag)

注意,必須在原始檔中宣告wxdefine_event(project_event, projectevent)。否則會在執行過程中出錯。出錯的主要原因似是有關訊息**的分配。

自定義訊息的處理與預定義訊息的處理方式相同,主要包括兩種處理方式:靜態處理和動態處理。

在標頭檔案中宣告訊息處理函式。

/// mainframe.h

class mainframe : public wxframe

在實現檔案中定義訊息處理函式。

/// mainframe.cpp

#include "mainframe.h"

#include "userevent.h"

begin_event_table(mainframe, wxframe)

……evt_custom(project_event, wxid_any, onproject)

……end_event_table()

void mainframe::onproject(wxevent & evt)

標頭檔案中宣告與靜態處理相同。

實現檔案中,不用定義訊息處理表,在初始化時動態繫結訊息處理函式。**如下:

/// mainframe.cpp

#include "mainframe.h"

#include "userevent.h"

void mainframe::mainframe(…)

使用者通過對指定視窗呼叫processwindowevent函式,引數為自定義的projectevent訊息型別,即刻向指定視窗傳送projectevent訊息,並由該視窗的訊息處理函式進行處理。

**如下:

/// mainframe.cpp

void mainframe::sendevent(…)

注意,該函式採用同步處理機制,類似mfc中的sendmessage,即訊息處理完成後該函式才返回。與mfc類似,wxwidgets還有非同步的訊息傳送機制,通過呼叫queueevent可以完成訊息的非同步訊息傳送,即傳送完訊息立刻返回,目標視窗將在後續的空閒訊息迴圈中處理使用者訊息,類似mfc中的postmessage

wxWidgets 自定義事件觸發

其步驟如下 define id refresh task list 9000 定義事件id wxdefine event evt refresh task list,wxcommandevent 定義事件處理巨集 evt command id refresh task list,evt refres...

自定義訊息

自定義訊息的響應和資源訊息的響應有很多類似之處 資源訊息的響應是以資源的id號作為標識的 自定義的訊息要自己宣告訊息id。一 定義 第一步要宣告訊息 definewm mymsgwm user 200 第二步要在類宣告中宣告訊息對映 declare message map 第三步要在類宣告中定義訊息...

VC自定義訊息

示例 主對話方塊a edit控制項 副對話方塊b edit控制項 將b中edit內容在其銷毀後,顯示在a中edit中 1 自定義訊息 define wm mymsg wm user 100 2 b cpp afxgetmainwnd sendmessage wm mymsg,wparam 0,lpa...