天天看點

VC中的自定義消息(收藏)

Windows 應用程式所要做的每項工作幾乎都是基于消息處理的, Windows 系統消息分為常用 Windows 消息,控件通知消息和指令。然而,有時我們需要定義自己的消息來通知程式什麼事情發生了,這就是使用者自定義消息。 ClassWizard 并沒有提供增加使用者自定義消息的功能,是以要使用使用者自定義消息,必須手工編寫代碼。然後 ClassWizard 才可以象處理其它消息一樣處理你自定義的消息。具體做法如下詳解: 

   第一步:定義消息。一個消息實際上是開發 Windows95 應用程式時, Microsoft 推薦使用者自定義消息至少是 WM_USER+100 ,因為很多新控件也要使用 WM_USER 消息。 

   第二步:實作消息處理函數。該函數使用 WPRAM 和 LPARAM 參數并傳回 LPESULT 。 

   LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam){// TODO: 處理使用者自定義消息 AfxMessageBox(" 處理使用者自定義消息 "); 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_MAPEND_MESSAGE_MAP()

   這樣,一個使用者自定義消息就可以使用了,如果使用者需要一個整個系統唯一的消息,可以調用 SDK 函數 RegisterWindowMessage 并使用 ON_REGISTER_MESSAGE 宏指令取代 ON_MESSAGE 宏指令,其餘步驟同上。 

   VC++ 為程式員提供了一套功能強大、友善快捷的程式設計工具,它可以幫你友善的生成視窗、菜單等使用者界面,可惜就是做出來的東西都一樣,沒有一點個性。下面,就介紹一些方法,讓我們可以按照自己的設計定制出更加符合自己程式風格的視窗。

繼續閱讀