【VC】中自定義消息實現

在VC項目開發中,很多時候需要自己定義消息進行事務處理。上次也剛好有同學問及,這裏綜合網絡上的一些資料,集中起來供參考。

自定義消息

我們可以通過一下兩種方法來自定義一個消息:

1) 方法一

Step 1:使用WM_TASKBARCREATED來確定一個沒有被windows本身搶佔

的消息值,在想添加消息文件中添加代碼:

const UINT WM_USERDEFMSG = ::RegisterWindowMessage(_T("UserDefMsg"));

Step 2:定義消息的處理過程:在處理消息的類(如Dlg類或者MainFrame等)

添加消息處理函數聲明:

afx_msg LRESULT On<wbr>UserDefMsg(WPARAM wParam,LPARAM lParam);</wbr>

在實現文件中添加消息處理實現,這裏給出一個實現例子:

LRESULT ××××::On<wbr>UserDefMsg(WPARAM wParam,LPARAM lParam)</wbr>

//××××代表處理該消息的類名

{

MessageBox("響應了自定義的消息,^_^","自定義消息響應",MB_ICONQUESTION | MB_OK);

return 0;

}

Step 3:添加消息處理宏,在處理該消息的類的消息宏中添加自定義消息的宏,即在BEGIN_MESSAGE_MAP代碼塊中添加代碼:

ON_REGISTERED_MESSAGE(WM_USERDEFMSG, On<wbr>UserDefMsg)</wbr>

自定義消息完畢。


2) 方法二

Step 1:定義消息值,這裏不通過RegisterWindowMessage獲取,而是自定義方式實現,

在想添加消息文件中添加代碼:

#define WM_USERDEFMSG (WM_USER + 101)

Microsoft推薦自定義消息值至少爲WM_USER + 100。

Step 2:同方法一中實現;

Step 3:同方法一中,但是宏名稱改爲ON_MESSAGE。

發送消息

按照上面方式我們已經自定義了消息,併爲該消息實現了簡單的處理過程,這裏就通過

發送消息獲得自定義消息的響應。在要觸發自定義消息地方添加代碼:

::SendMessage(GetSafeHwnd(),WM_USERDEFMSG,0L,0L);

這樣你就觸發了該自定義消息,並將得到提示對話框顯示。

下面是第二種增加自定義消息方法的步驟:

第一步:定義消息。開發Windows95應用程序時,Microsoft推薦用戶自定義消息至少是WM_USER+100,因爲很多新控件也要使用WM_USER消息。

第二步:實現消息處理函數。該函數使用WPRAM和LPARAM參數並返回LPESULT。

LPESULTCMainFrame::On<wbr>MyMessage(WPARAMwParam,LPARAMlParam) </wbr>

{

//TODO:處理用戶自定義消息

...

return0;

}

第三步:在類頭文件的AFX_MSG塊中說明消息處理函數:

classCMainFrame:publicCMDIFrameWnd

{

...

//一般消息映射函數

protected:

//{{AFX_MSG(CMainFrame)

afx_msgintOn<wbr>Create(LPCREATESTRUCTlpCreateStruct); </wbr>

afx_msgvoidOn<wbr>Timer(UINTnIDEvent); </wbr>

afx_msgLRESULTOn<wbr>MyMessage(WPARAMwParam,LPARAMlParam); </wbr>

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

}

第四步:在用戶類的消息塊中,使用ON_MESSAGE宏指令將消息映射到消息處理函數中。

BEGIN_MESSAGE_MAP(CMainFrame,CMDIFrameWnd)

//{{AFX_MSG_MAP(CMainFrame)

ON_WM_CREATE()

ON_WM_TIMER()

ON_MESSAGE(WM_MY_MESSAGE,On<wbr>MyMessage) </wbr>

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

如果用戶需要一個整個系統唯一的消息,可以調用SDK函數RegisterWindowMessage並使用ON_REGISTER_MESSAGE宏指令取代ON_MESSAGE宏指令,其餘步驟同上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章