VC中自訂訊息實現

來源:互聯網
上載者:User
      

 

在VC項目開發中,很多時候需要自己定義訊息進行交易處理。上次也剛好有同學問及,這裡綜合網路上的一些資料,集中起來供參考。u       自訂訊息我們可以通過一下兩種方法來自訂一個訊息:1) 方法一 Step 1:使用WM_TASKBARCREATED來確定一個沒有被windows本身搶佔的訊息值,在想添加訊息檔案中添加代碼:
const UINT WM_USERDEFMSG = ::RegisterWindowMessage(_T("UserDefMsg"));
Step 2:定義訊息的處理過程:在處理訊息的類(如Dlg類或者MainFrame等)添加訊息處理函式宣告:
afx_msg LRESULT OnUserDefMsg(WPARAM wParam,LPARAM lParam);
       在實現檔案中添加訊息處理實現,這裡給出一個實現例子:
LRESULT ××××::OnUserDefMsg(WPARAM wParam,LPARAM lParam)//××××代表處理該訊息的類名

 

{       MessageBox("響應了自訂的訊息,^_^","自訂訊息響應",MB_ICONQUESTION | MB_OK);       return 0;}
       Step 3:添加訊息處理宏,在處理該訊息的類的訊息宏中添加自訂訊息的宏,即在BEGIN_MESSAGE_MAP代碼塊中添加代碼:
ON_REGISTERED_MESSAGE(WM_USERDEFMSG, OnUserDefMsg)
       自訂訊息完畢。2) 方法二 Step 1:定義訊息值,這裡不通過RegisterWindowMessage擷取,而是自訂方式實現,在想添加訊息檔案中添加代碼:
#define WM_USERDEFMSG (WM_USER + 101)
       Microsoft推薦自訂訊息值至少為WM_USER + 100。       Step 2:同方法一中實現;       Step 3:同方法一中,但是宏名稱改為ON_MESSAGE。u       發送訊息按照上面方式我們已經自訂了訊息,並為該訊息實現了簡單的處理過程,這裡就通過發送訊息獲得自訂訊息的響應。在要觸發自訂訊息地方添加代碼:
::SendMessage(GetSafeHwnd(),WM_USERDEFMSG,0L,0L);
       這樣你就觸發了該自訂訊息,並將得到提示對話方塊顯示。下面是第二種增加自訂訊息方法的步驟:

第一步:定義訊息。開發Windows95應用程式時,Microsoft推薦使用者自訂訊息至少是WM_USER+100,因為很多新控制項也要使用WM_USER訊息。

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

LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
// TODO: 處理使用者自訂訊息
...
return 0;
}
第三步:在類標頭檔的AFX_MSG塊中說明訊息處理函數:

class CMainFrame:public CMDIFrameWnd
{
...
// 一般訊息映射函數
protected:
// {{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnTimer(UINT nIDEvent);
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
//}}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, OnMyMessage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.