第一章 MFC訊息

2021-06-28 06:51:21 字數 2031 閱讀 7647

一、訊息的分類

1、標準訊息:

(1)、除wm_command之外,所有以wm_開頭的訊息。

(2)、從cwnd派生的類,都可以接收到這類訊息。

2、命令訊息:

(1)、來自選單、加速鍵或工具欄按鈕的訊息。這類訊息都以wm_command呈現。

在mfc中,通過選單項的標識(id)來區分不同的命令訊息;在sdk中,通過訊息的wparam引數識別。

(2)、從ccmdtarget派生的類,都可以接收到這類訊息。

3、通告訊息:

(1)、由控制項產生的訊息,例如,按鈕的單擊,列表框的選擇等均產生此類訊息,

為的是向其父視窗(通常是對話方塊)通知事件的發生。這類訊息也是以wm_command形式呈現。

(2)、從ccmdtarget派生的類,都可以接收到這類訊息。

二、訊息對映表

1、對映表是乙個存放訊息結構體的陣列。

2、訊息結構體:

struct afx_msgmap_entry

;

3、訊息對映表不和虛函式表一樣,訊息對映表只有乙個指向父類訊息對映表的指標,

而虛函式表卻拷貝了基類虛函式表的所有項。訊息對映表是靜態成員,虛函式表卻是普通成員。

三、訊息的傳遞

0.pretranslatemessage()       //該函式是getmessage(...)函式的下一級操作,即getmessage(...)從訊息佇列中獲取訊息後,

//交由該函式處理,若其返回false則再交給translatemessage和dispatchmessage處理(進入windowproc);

//如果用postmessage,則訊息進入訊息佇列,由getmessage取得,該函式就有機會進行處理。

//如果用sendmessage,則訊息直接交到windowproc處理,

//該函式處理的是原汁原味的msg,不像windowproc處理的是已經被分發的訊息。

1.afxwndproc() //該函式負責接收訊息,找到訊息所屬的cwnd物件,然後呼叫afxcallwndproc

2.afxcallwndproc() //該函式負責儲存訊息(儲存的內容主要是訊息識別符號和訊息引數)**用程式以後使用,

//然後呼叫windowproc()函式

3.windowproc() //該函式負責傳送訊息到onwndmsg()函式,如果未被處理,則呼叫defwindowproc()函式

4.onwndmsg() //該函式的功能首先按位元組對訊息進行排序,

//對於wm_command訊息,呼叫oncommand()訊息響應函式,

//對於wm_notify訊息呼叫onnotify()訊息響應函式。

//任何被遺漏的訊息將是乙個視窗訊息。onwndmsg()函式搜尋類的訊息映像,以找到乙個能處理任何視窗訊息的處理函式。

//如果onwndmsg()函式不能找到這樣的處理函式的話,則把訊息返回到windowproc()函式,由它將訊息傳送給defwindowproc()函式

5.oncommand() //該函式檢視這是不是乙個控制項通知(lparam引數不為null,如果lparam引數為空的話,說明

//該訊息不是控制項通知),如果它是,oncommand()函式會試圖將訊息對映到製造通知的控制項;

//如果他不是乙個控制項通知(或者如果控制項拒絕對映的訊息)oncommand()就會呼叫oncmdmsg()函式

6.oncmdmsg() //根據接收訊息的類,oncmdmsg()函式將在乙個稱為命令傳遞(command routing)的過程中潛在的

//傳遞命令訊息和控制項通知。例如:如果擁有該視窗的類是乙個框架類,則命令和通知訊息也被傳遞到檢視和文件類,

//並為該類尋找乙個訊息處理函式



python第一章筆記 第一章 基礎

參與除法的兩個數中有乙個數為浮點數,結果也為浮點數 如 1.0 2,1 2.0,1.0 2.0 python print 1.0 2 結果 0.5 print 1 2.0 結果 0.5 print 1.0 2.0 結果 0.5 整數 整數,計算結果的小數部分被截除,只保留整數部分 不會四捨五入 如 ...

深入淺出MFC 第一章

當使用者按下系統選單中的close命令項,系統送出wm close。通常程式的視窗函式不攔截次訊息,於是defwindowproc函式處理它。defwindowproc收到wm close後,呼叫destorywindow把視窗清除。destroywindow本身又會送出wm destroy。程式對...

第一章 緒論

1.16 void print descending int x,int y,int z 按從大到小順序輸出三個數 print descending 1.17 status fib int k,int m,int f 求k階斐波那契序列的第m項的值f gender char schoolname 校...