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