Visual C++中MFC消息的分類(lèi)
更新時(shí)間:2012年11月12日 11:47:50 作者:
標(biāo)準(zhǔn)(窗口)消息:窗口消息一般與窗口內(nèi)部運(yùn)作有關(guān),如創(chuàng)建窗口,繪制窗口,銷(xiāo)毀窗口,通常,消息是從系統(tǒng)發(fā)到窗口,或從窗口發(fā)到系統(tǒng)
標(biāo)準(zhǔn)(窗口)消息:窗口消息一般與窗口內(nèi)部運(yùn)作有關(guān),如創(chuàng)建窗口,繪制窗口,銷(xiāo)毀窗口,通常,消息是從系統(tǒng)發(fā)到窗口,或從窗口發(fā)到系統(tǒng)。發(fā)送函數(shù)SendMessage()或者PostMessage()。除WM_COMMAND之外,所有的以WM_開(kāi)頭的消息。從CWnd派生的類(lèi),都可以接受到這類(lèi)消息。注意:標(biāo)準(zhǔn)消息并不需要我們指定處理函數(shù)名稱(chēng),是默認(rèn)的對(duì)應(yīng)關(guān)系。
宏名稱(chēng) 對(duì)應(yīng)消息 消息處理函數(shù)
ON_WM_CHAR WM_CHAR OnChar
ON_WM_CLOSE WM_CLOSE OnClose
ON_WM_CREATE WM_CREATE OnCreate
ON_WM_DESTROY WM_DESTROY OnDestroy
ON_WM_LBUTTONDO WNWM_LBUTTONDOWN OnLButtonDown
ON_WM_LBUTTONUP WM_LBUTTONUP OnLButtonUp
ON_WM_MOUSEMOVE WM_MOUSEMOVE OnMouseMove
ON_WM_PAINTWM_PAINT OnPaint
命令消息:命令消息通常與處理用戶(hù)請(qǐng)求有關(guān),當(dāng)用戶(hù)單擊一個(gè)菜單或工具欄時(shí),命令消息就產(chǎn)生了。并發(fā)送到能處理該消息的類(lèi)或函數(shù)(如裝載文本,保存選項(xiàng)等)這類(lèi)消息都以WM_COMMAND呈現(xiàn)。在MFC中,通過(guò)菜單標(biāo)識(shí)(ID)來(lái)區(qū)分不同的命令消息;在SDK中,通過(guò)消息的wParam參數(shù)識(shí)別。從CCmdTarget派生的類(lèi),都可以接收到這類(lèi)消息,其wParam 記錄著該消息來(lái)自哪一個(gè)菜單項(xiàng)目。
ON_COMMAND(IDM_ABOUT, OnAbout)
ON_COMMAND(IDM_FILENEW, OnFileNew)
ON_COMMAND(IDM_FILEOPEN, OnFileOpen)
ON_COMMAND(IDM_FILESAVE, OnFileSave)
控件消息:由控件產(chǎn)生的消息,例如,按鈕的單擊,列表框的選擇等均產(chǎn)生此類(lèi)消息,為的是向其父窗口通(通常是對(duì)話框)通知事件的發(fā)生。這類(lèi)消息也是以WM_COMMAND形式呈現(xiàn)。從CCmdTarget派生的類(lèi)都可以接收到這類(lèi)消息。
控件宏 消息處理函數(shù)
Button ON_BN_CLICKED(<id>,<memberFxn>) memberFxn
ComboBox ON_CBN_DBLCLK(<id>,<memberFxn>) memberFxn
Edit ON_EN_SETFOCUS(<id>,<memberFxn>) memberFxn
ListBox ON_LBN_DBLCLK(<id>,<memberFxn>) memberFxn
CWnd是CCmdTarget的派生類(lèi),在MFC的單文檔程序中的CMenuApp和CMenuDoc都是屬于CCmdTarget的派生類(lèi)而不包含CWnd類(lèi)。
MFC命令消息的路由:AfxWndProc(替換了窗口過(guò)程函數(shù))->AfxCallWndProc->WindowProc->OnWnddMsg->(如果是命令消息則調(diào)用Oncommand;如果是通告消息則調(diào)用OnNotify)->OnCmdMsg
標(biāo)準(zhǔn)消息和非標(biāo)準(zhǔn)消息的區(qū)分:標(biāo)準(zhǔn)消息:帶有控制后 后續(xù)操作;非標(biāo)準(zhǔn)消息:只是簡(jiǎn)單提示。
你可以在程序的許多類(lèi)別之中設(shè)計(jì)「消息映像表格」(每一個(gè)類(lèi)別只能擁有一個(gè)消息映像表格,但也可以沒(méi)有),接收并處理消息。只要是 CWnd 衍生類(lèi)別,就可以攔下任何 Windows 消息。與窗口無(wú)關(guān)的MFC 類(lèi)別(例如 CDocument 和 CWinApp)如果也想處理消息,必須衍生自 CCmdTarget,并且只可能收到 WM_COMMAND 命令消息。
宏名稱(chēng) 對(duì)應(yīng)消息 消息處理函數(shù)
ON_WM_CHAR WM_CHAR OnChar
ON_WM_CLOSE WM_CLOSE OnClose
ON_WM_CREATE WM_CREATE OnCreate
ON_WM_DESTROY WM_DESTROY OnDestroy
ON_WM_LBUTTONDO WNWM_LBUTTONDOWN OnLButtonDown
ON_WM_LBUTTONUP WM_LBUTTONUP OnLButtonUp
ON_WM_MOUSEMOVE WM_MOUSEMOVE OnMouseMove
ON_WM_PAINTWM_PAINT OnPaint
命令消息:命令消息通常與處理用戶(hù)請(qǐng)求有關(guān),當(dāng)用戶(hù)單擊一個(gè)菜單或工具欄時(shí),命令消息就產(chǎn)生了。并發(fā)送到能處理該消息的類(lèi)或函數(shù)(如裝載文本,保存選項(xiàng)等)這類(lèi)消息都以WM_COMMAND呈現(xiàn)。在MFC中,通過(guò)菜單標(biāo)識(shí)(ID)來(lái)區(qū)分不同的命令消息;在SDK中,通過(guò)消息的wParam參數(shù)識(shí)別。從CCmdTarget派生的類(lèi),都可以接收到這類(lèi)消息,其wParam 記錄著該消息來(lái)自哪一個(gè)菜單項(xiàng)目。
ON_COMMAND(IDM_ABOUT, OnAbout)
ON_COMMAND(IDM_FILENEW, OnFileNew)
ON_COMMAND(IDM_FILEOPEN, OnFileOpen)
ON_COMMAND(IDM_FILESAVE, OnFileSave)
控件消息:由控件產(chǎn)生的消息,例如,按鈕的單擊,列表框的選擇等均產(chǎn)生此類(lèi)消息,為的是向其父窗口通(通常是對(duì)話框)通知事件的發(fā)生。這類(lèi)消息也是以WM_COMMAND形式呈現(xiàn)。從CCmdTarget派生的類(lèi)都可以接收到這類(lèi)消息。
控件宏 消息處理函數(shù)
Button ON_BN_CLICKED(<id>,<memberFxn>) memberFxn
ComboBox ON_CBN_DBLCLK(<id>,<memberFxn>) memberFxn
Edit ON_EN_SETFOCUS(<id>,<memberFxn>) memberFxn
ListBox ON_LBN_DBLCLK(<id>,<memberFxn>) memberFxn
CWnd是CCmdTarget的派生類(lèi),在MFC的單文檔程序中的CMenuApp和CMenuDoc都是屬于CCmdTarget的派生類(lèi)而不包含CWnd類(lèi)。
MFC命令消息的路由:AfxWndProc(替換了窗口過(guò)程函數(shù))->AfxCallWndProc->WindowProc->OnWnddMsg->(如果是命令消息則調(diào)用Oncommand;如果是通告消息則調(diào)用OnNotify)->OnCmdMsg
標(biāo)準(zhǔn)消息和非標(biāo)準(zhǔn)消息的區(qū)分:標(biāo)準(zhǔn)消息:帶有控制后 后續(xù)操作;非標(biāo)準(zhǔn)消息:只是簡(jiǎn)單提示。
你可以在程序的許多類(lèi)別之中設(shè)計(jì)「消息映像表格」(每一個(gè)類(lèi)別只能擁有一個(gè)消息映像表格,但也可以沒(méi)有),接收并處理消息。只要是 CWnd 衍生類(lèi)別,就可以攔下任何 Windows 消息。與窗口無(wú)關(guān)的MFC 類(lèi)別(例如 CDocument 和 CWinApp)如果也想處理消息,必須衍生自 CCmdTarget,并且只可能收到 WM_COMMAND 命令消息。
相關(guān)文章
C語(yǔ)言如何實(shí)現(xiàn)一些算法或者函數(shù)你知道嗎
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)一些算法或者函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03C語(yǔ)言中宏和函數(shù)的9個(gè)區(qū)別詳解
C語(yǔ)言中的宏和函數(shù)是非常相似的,它們都可以完成類(lèi)似的功能。本文為大家整理了C語(yǔ)言中宏和函數(shù)的9個(gè)區(qū)別,感興趣的小伙伴可以跟隨小編一起了解一下2023-04-04C++將二叉樹(shù)轉(zhuǎn)為雙向鏈表及判斷兩個(gè)鏈表是否相交
這篇文章主要介紹了C++將二叉樹(shù)轉(zhuǎn)為雙向鏈表及判斷兩個(gè)鏈表是否相交的方法,文中還給出了求兩個(gè)鏈表相交的第一個(gè)節(jié)點(diǎn)列的實(shí)現(xiàn)方法,需要的朋友可以參考下2016-02-02C語(yǔ)言 動(dòng)態(tài)內(nèi)存開(kāi)辟常見(jiàn)問(wèn)題解決與分析流程
動(dòng)態(tài)內(nèi)存是相對(duì)靜態(tài)內(nèi)存而言的。所謂動(dòng)態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動(dòng)態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存2022-03-03C++使用new和delete進(jìn)行動(dòng)態(tài)內(nèi)存分配與數(shù)組封裝
這篇文章主要介紹了C++使用new和delete進(jìn)行動(dòng)態(tài)內(nèi)存分配與數(shù)組封裝,運(yùn)行期間才能確定所需內(nèi)存大小,此時(shí)應(yīng)該使用new申請(qǐng)內(nèi)存,下面我們就進(jìn)入文章學(xué)習(xí)具體的操作方法,需要的小伙伴可以參考一下2022-03-03Pipes實(shí)現(xiàn)LeetCode(193.驗(yàn)證電話號(hào)碼)
這篇文章主要介紹了Pipes實(shí)現(xiàn)LeetCode(193.驗(yàn)證電話號(hào)碼),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08