Windows的三類訊息

來源:互聯網
上載者:User

標籤:window   mem   wm_keyup   聲明   define   應用程式   ram   base   維護   

Windows的三類訊息
1、標準訊息
宏名稱對映訊息訊息處理函數(名稱已由系統預設)
ON_WM_CHARWM_CAHROnChar
ON_WM_CLOSEWM_CLOSEOnClose
ON_WM_CREATEWM_CREATEOnCreate
ON_WM_DESTROYWM_DESTROYOnDestroy
ON_WM_LBUTTONDOWNWM_LBUTTONDOWNOnLButtonDown
ON_WM_LBUTTONUPWM_LBUTTONUPOnLButtonUp
ON_WM_MOUSEMOVEWM_MOUSEMOVEOnMouseMove
ON_WM_PAINTWM_PAINTOnPaint
...

如:鍵盤訊息
鍵盤訊息是應用程式中使用最頻繁的訊息之一,
當使用者使用鍵盤對應用程式進行操作,就發送鍵盤訊息。
一般來說,Visual C++中的鍵盤訊息主要有如下3種。

WM_CHAR:該訊息的處理函數OnChar()。
WM_KEYDOWN:使用者按下一個非系統鍵。
WM_KEYUP:在非系統鍵被釋放時產生。

如:滑鼠訊息
與鍵盤訊息類似,滑鼠訊息也是Windows應用程式中使用最為頻繁的訊息之一。
一般來說,Windows應用程式中的滑鼠訊息主要有如下幾種。

WM_MOUSEMOVE:使用者將滑鼠移進視窗或在視窗中移動。
WM_LBUTTONDOWN:使用者按下左鍵。
WM_LBUTTONUP:使用者釋放左鍵。
WM_LBUTTONDBCLICK:使用者雙擊左鍵。
WM_RBUTTONDOWN:使用者按下右鍵。
WM_RBUTTONUP:使用者釋放右鍵。
WM_RBUTTONDBCLICK:使用者雙擊右鍵。

如:視窗訊息
視窗訊息是指對Windows應用程式的視窗進行某些操作時發送的訊息。
Visual C++ 6.0中,包含了如下6種視窗訊息。

WM_CREATE:視窗被建立。
WM_DESTROY:視窗被銷毀。
WM_CLOSE:視窗被關閉。
WM_MOVE:視窗發生移動。
WM_SIZE:視窗發生改變。
WM_PAINT:視窗發生重繪。

如:焦點訊息
焦點訊息是指當視窗中的某個對象得到焦點和失去焦點的時候,
對應視窗或對象觸發的操作。一般來說,只有下面兩種焦點訊息。

WM_SETFOCUS:視窗得到焦點。
WM_KILLFOCUS:視窗失去焦點。
當一個視窗從非使用中變為具有輸入焦點的活動狀態的時候,
它就會收到WM_SETFOCUS訊息,
而當一個視窗失去輸入焦點變為非使用中的時候它就會收到WM_KILLFOCUS訊息。

如:定時器訊息
Windows的定時器是一種周期性訊息產生裝置,
當使用者為一個視窗設定了定時器資源之後,系統就會按
規定的時間間隔向視窗發送定時器訊息,在這個訊息中
就可以處理一些需要定期處理的事情
。定時器訊息只有一種:WM_TIMER,其響應函數是OnTimer。
對於定時器的操作,通常都會和函數SetTimer()配合使用。
在響應OnTimer函數之前,應先添加一個定時器對其進行觸發,
如果沒有建立定時器,系統是不會自己去觸發OnTimer函數的,
SetTimer()函數的作用就是設定定時器 。

2、命令訊息
命令訊息(WM_COMMAND)的一般對映規則是:
ON_COMMAND(<id>,<memberFxn>)
例如:
ON_COMMAND(IDM_ABOUT,OnAbout)

3、控制項通知訊息
[Notification訊息](由控制組件產生,例如BN_xxx)的對映機制的宏分為好幾種
(因為控制組件本來就分為好幾種),以下各舉一例做代表
控制組件宏名稱訊息處理函數
ButtonON_BN_CLICKED(<id>,<memberFxn>)memberFxn
ComboBoxON_CBN_DBLCLK(<id>,<memberFxn>)memberFxn
EditON_EN_SETFOCUS(<id>,<menberFxn>)memberFxn
ListBoxON_LBN_DBLCLK(<id>,<memberFxn>)memberFxn

各個訊息處理函數均應以afx_msg void 為函數形式

 

訊息映射及訊息響應:
MFC採用訊息映射(Message Map)機製取代C/C++語言中的switch-case結構來處理訊息。

MFC訊息映射機制包括一組訊息映射宏。一條訊息映射宏把一個Windows訊息和其訊息處
理函數連接起來。

在類的實現源檔案中用
BEGIN_MESSAGE_MAP(derived class,base class)

END_MESSAGE_MAP()宏來定義訊息映射。

在類定義的結尾用DECLARE_MESSAGE_MAP()宏來聲明使用訊息映射。

BEGIN_MESSAGE_MAP(theclass, baseclass)
//{{AFX_MSG_MAP(theclass)
ON_ . . . . . . // MFC預定義的訊息映射宏
ON_MESSAGE(message , memberFxn)
// 使用者自訂的訊息映射宏
. . . . . .
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//注意:
特殊註解“//{{AFX_MSG_MAP”是ClassWizard類嚮導用於維護訊息映射宏的標記,
使用者不要刪除註解輕易修改註解內的代碼。

4、使用者自訂訊息
1.首先在為類實現檔案中定義訊息。
#define WM_MYMESSAGE WM_USER+100

2.在類中聲明訊息處理函數。
afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam)

3.在類的訊息映射表中加入映射項。
ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)

4.在類上實現訊息處理函數。

5.使用SendMessage函數或PostMessage發送訊息
SendMessage(WM_MYMESSAGE,0L,0L);

Windows的三類訊息

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.