西北工業(yè)大學 第9章Windows應用程序引擎——消息映射_第1頁
西北工業(yè)大學 第9章Windows應用程序引擎——消息映射_第2頁
西北工業(yè)大學 第9章Windows應用程序引擎——消息映射_第3頁
西北工業(yè)大學 第9章Windows應用程序引擎——消息映射_第4頁
西北工業(yè)大學 第9章Windows應用程序引擎——消息映射_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第九章:第九章:Windows應用程序引擎應用程序引擎消息映射消息映射 主要內(nèi)容主要內(nèi)容消息的介紹消息的介紹(產(chǎn)生、發(fā)送、路由、接收)(產(chǎn)生、發(fā)送、路由、接收)消息映射和消息響應函數(shù)的關系消息映射和消息響應函數(shù)的關系常見窗口消息(鍵盤消息、鼠標消息和定時常見窗口消息(鍵盤消息、鼠標消息和定時器消息)的使用器消息)的使用Visual C+Visual C+章節(jié)內(nèi)容安排章節(jié)內(nèi)容安排 9.1 認識消息認識消息 9.2 MFC中消息的發(fā)送與接收中消息的發(fā)送與接收 9.3 常用的窗口消息常用的窗口消息Visual C+Visual C+9.1 9.1 認識消息認識消息WindowsWindows操作系統(tǒng)

2、下的應用程序都是基于事操作系統(tǒng)下的應用程序都是基于事件驅(qū)動而工作的。消息映射是一種把消息件驅(qū)動而工作的。消息映射是一種把消息映射到相應的消息響應函數(shù)上的機制。映射到相應的消息響應函數(shù)上的機制。WindowsWindows的各種消息沿著的各種消息沿著MFCMFC應用程序架構應用程序架構規(guī)定的路線,找到它的歸宿規(guī)定的路線,找到它的歸宿消息映射消息映射函數(shù)。當找不到的話,最終交給窗口對象函數(shù)。當找不到的話,最終交給窗口對象的去進行默認的處理。的去進行默認的處理。Visual C+Visual C+9.1.1 9.1.1 消息的產(chǎn)生消息的產(chǎn)生 WindowsWindows對對每一個輸入事件都產(chǎn)生每一個

3、輸入事件都產(chǎn)生一個消息一個消息,并可以將消息發(fā)送給應用,并可以將消息發(fā)送給應用程序,兩個程序,兩個WindowsWindows應用程序之間也應用程序之間也可通過消息來共享數(shù)據(jù)??赏ㄟ^消息來共享數(shù)據(jù)。Visual C+Visual C+9.1.2 9.1.2 消息的種類消息的種類 1.1.窗口消息窗口消息(Windows messageWindows message) 窗口消息一般是指在創(chuàng)建窗口、繪制窗窗口消息一般是指在創(chuàng)建窗口、繪制窗口、移動窗口、銷毀窗口時所產(chǎn)生的消息???、移動窗口、銷毀窗口時所產(chǎn)生的消息。 2.2.命令消息命令消息 是一種特殊的窗口消息,一般是由一個窗是一種特殊的窗口消息,

4、一般是由一個窗口發(fā)送到另一個窗口以處理用戶的請求??诎l(fā)送到另一個窗口以處理用戶的請求。 比比如按鈕窗口發(fā)送到父窗口的消息。如按鈕窗口發(fā)送到父窗口的消息。Visual C+Visual C+3 3. .控件通知消息控件通知消息 當用戶與控件窗口交互時,由控件子窗當用戶與控件窗口交互時,由控件子窗口發(fā)送到父窗口的消息。比如修改控件外觀、口發(fā)送到父窗口的消息。比如修改控件外觀、更改更改listCtrllistCtrl控件的選定條目等??丶倪x定條目等。4.4.自定義消息自定義消息 用戶可以自己定義一些程序要使用的特用戶可以自己定義一些程序要使用的特殊消息,不同于系統(tǒng)的消息。將這些用戶自殊消息,不同于

5、系統(tǒng)的消息。將這些用戶自己定義的消息稱為自定義消息。己定義的消息稱為自定義消息。 Visual C+Visual C+9.1.39.1.3一個應用程序的消息映射分析一個應用程序的消息映射分析 Windows靠消息的流動而運行靠消息的流動而運行,在,在MFC中引入了消息映射中引入了消息映射的概念。的概念。消息映射是消息映射是一種一種把把Windows系統(tǒng)的某種消息,映射到系統(tǒng)的某種消息,映射到MFC類庫的成員函數(shù)上的機制類庫的成員函數(shù)上的機制。即如果要對即如果要對一個消息進行處理,就要給該消息添加消息一個消息進行處理,就要給該消息添加消息處理函數(shù)。處理函數(shù)。Visual C+Visual C+例

6、例: : 一個簡單的演示消息映射一個簡單的演示消息映射1 1生成程序框架生成程序框架(1 1)啟動)啟動VC6.0VC6.0,選擇選擇“File”File”菜單的菜單的“New”New”命令,在彈命令,在彈出的出的“New”New”對話框中選擇對話框中選擇“Project”Project”選項卡。選項卡。(2 2)在)在“Project”Project”選項卡的列表中選擇選項卡的列表中選擇“MFC MFC AppWizard(exe)”AppWizard(exe)”項,在項,在“Project Name”Project Name”編輯框中輸編輯框中輸入要創(chuàng)建的工程名稱入要創(chuàng)建的工程名稱MsgM

7、apMsgMap,在在“Location”Location”編輯框中編輯框中設置工程的存放位置,單擊設置工程的存放位置,單擊“OK”O(jiān)K”按鈕。按鈕。(3)在彈出的)在彈出的“MFC AppWizard-Step1” 對話框中選擇對話框中選擇“single document”,然后單擊然后單擊“Finish”按鈕。按鈕。(4)在彈出的)在彈出的“New Project information” 對話框中單對話框中單擊擊“OK”按鈕,完成應用程序框架的創(chuàng)建。按鈕,完成應用程序框架的創(chuàng)建。Visual C+Visual C+2 2消息映射消息映射 消息映射是一種消息映射是一種把把Windows系統(tǒng)

8、的各種消息(共系統(tǒng)的各種消息(共四類消息)映射到四類消息)映射到MFC類庫的成員函數(shù)上的機制類庫的成員函數(shù)上的機制。 MFC的應用程序中,的應用程序中,消息映射可以被消息映射可以被MFC的的CCmdTarget類或從其派生而來的任何一個類來使用類或從其派生而來的任何一個類來使用。在上述生成的在上述生成的MsgMap單文檔應用程序中,共有應用程單文檔應用程序中,共有應用程序類、框架類、文檔類、視圖類和對話框類。這五個類序類、框架類、文檔類、視圖類和對話框類。這五個類都是從都是從CCmdTarget類派生而來,所以類派生而來,所以Windows操作系操作系統(tǒng)可以向所有這些類發(fā)送消息。統(tǒng)可以向所有這

9、些類發(fā)送消息。3 3應用程序框架中的消息映射應用程序框架中的消息映射 編譯并運行上述程序,在程序的主界面中,單擊工編譯并運行上述程序,在程序的主界面中,單擊工具欄中的具欄中的“? ?”按鈕,則彈出按鈕,則彈出“關于關于MsgMap”MsgMap”對話框?qū)υ捒? ,我我們以該功能的實現(xiàn)為例,來說明們以該功能的實現(xiàn)為例,來說明WindowsWindows中的命令消息的中的命令消息的映射映射. .Visual C+Visual C+3 3應用程序框架中的消息映射應用程序框架中的消息映射Visual C+Visual C+(1) (1) “?”工具欄按鈕的資源工具欄按鈕的資源IDIDVisual C+

10、Visual C+ (2 2)“?”工具欄按鈕的消息映射工具欄按鈕的消息映射 利用應用程序向?qū)傻臉藴世脩贸绦蛳驅(qū)傻臉藴蔒FCMFC應用程序中,應用程序中,將消息與消息響應函數(shù)通過一些預定義的宏聯(lián)系將消息與消息響應函數(shù)通過一些預定義的宏聯(lián)系起來,實現(xiàn)了一一對應,這種機制就是消息映射起來,實現(xiàn)了一一對應,這種機制就是消息映射,MFCMFC就是使用功能強大的消息映射宏來實現(xiàn)的。就是使用功能強大的消息映射宏來實現(xiàn)的。它們是它們是DECLARE_MESSAGE_MAPDECLARE_MESSAGE_MAP( (初始化消息映射初始化消息映射表表) )、BEGIN_MESSAGE_MAPBEGI

11、N_MESSAGE_MAP(開始用戶消息映射)、開始用戶消息映射)、END_MESSAGE_MAPEND_MESSAGE_MAP( (結束用戶消息映射結束用戶消息映射) )以及一些以及一些ON_ON_宏。宏。Visual C+Visual C+ 消息映射的聲明消息映射的聲明( (在在.h.h文件中文件中) ) class CMsgMapApp : public CWinAppclass CMsgMapApp : public CWinApp public:public:CMsgMapApp(); CMsgMapApp(); /應用程序類的構造函數(shù)應用程序類的構造函數(shù) /AFX_MSG(CMsg

12、MapApp) /AFX_MSG(CMsgMapApp)afx_msg void OnAppAbout();afx_msg void OnAppAbout(); /工具欄按鈕工具欄按鈕“? ?”的消息映射函數(shù)的消息映射函數(shù) /AFX_MSG/AFX_MSG DECLARE_MESSAGE_MAP()/DECLARE_MESSAGE_MAP()/消息映射宏的聲明消息映射宏的聲明;Visual C+Visual C+ 消息映射的定義(在消息映射的定義(在.cpp.cpp文件中)文件中)BEGIN_MESSAGE_MAP(CMsgMapApp, CWinApp)/AFX_MSG_MAP(CMsgMa

13、pApp)ON_COMMAND(ID_APP_ABOUT, OnAppAbout) /工具欄工具欄?按鈕按鈕ID_APP_ABOUT對單擊的消息映射為對單擊的消息映射為OnAppAbout /AFX_MSG_MAP/ Standard file based document commandsO N _ C O M M A N D ( I D _ F I L E _ N E W , CWinApp:OnFileNew)END_MESSAGE_MAP()Visual C+Visual C+4 4消息映射中的幾種宏定義消息映射中的幾種宏定義 消息映射中的映射都是一些定義好的宏,如消息映射中的映射都是

14、一些定義好的宏,如ON_WM_MOUSEACTIVATEON_WM_MOUSEACTIVATE,ON_COMMANDON_COMMAND,ON_UPDATE_COMMAND_COMMAND_UION_UPDATE_COMMAND_COMMAND_UI,ON_BN_CLICKEDON_BN_CLICKED,ON_MESSAGEON_MESSAGE,ON_REGISTER_MESAAGEON_REGISTER_MESAAGE等等,這些宏等等,這些宏根據(jù)消息類別的不同而不同,有的有參數(shù),有的無根據(jù)消息類別的不同而不同,有的有參數(shù),有的無參數(shù)。表參數(shù)。表9.19.1是常見的宏。是常見的宏。 Visua

15、l C+Visual C+表表9.1 常見消息的映射宏常見消息的映射宏 消息類型消息類型宏的形式宏的形式參數(shù)參數(shù)定義的窗口消息定義的窗口消息ON_WM_xxxxON_WM_xxxx無無命令消息命令消息ON_COMMANDON_COMMAND命令命令IDID,消息映射函數(shù)名消息映射函數(shù)名命令更新消息命令更新消息ON_UPDATE_COMMANDON_UPDATE_COMMAND同上同上控件通知消息控件通知消息ON_xxxxON_xxxx控件控件IDID,消息映射函數(shù)名消息映射函數(shù)名用戶自定義消息用戶自定義消息ON_MESSAGEON_MESSAGE自定義消息自定義消息IDID,消息映射函消息映射

16、函數(shù)名數(shù)名注冊窗口消息注冊窗口消息ON_REGISTERED_MESON_REGISTERED_MESSAGESAGE注冊消息注冊消息IDID,消息映射函數(shù)消息映射函數(shù)名名多個連續(xù)多個連續(xù)IDID號的命號的命令消息令消息ON_COMMAND_RANGEON_COMMAND_RANGE連續(xù)命令的起始連續(xù)命令的起始IDID號和終止號和終止IDID號號多個連續(xù)多個連續(xù)IDID號的命號的命令更新消息令更新消息ON_UPDATE_COMMANDON_UPDATE_COMMAND_RANGE_RANGE同上同上多個連續(xù)多個連續(xù)IDID號的控號的控件消息件消息ON_CONTROL_RANGEON_CONTR

17、OL_RANGE控件通知碼,連續(xù)控件的起控件通知碼,連續(xù)控件的起始始IDID號和終止號和終止IDID號號Visual C+Visual C+9.1.4 9.1.4 消息映射函數(shù)消息映射函數(shù) 當當WindowsWindows接收到一個消息時,接收到一個消息時,WindowsWindows通過查找消息映射表就能找到一個專門的通過查找消息映射表就能找到一個專門的處理函數(shù)來對其進行響應處理函數(shù)來對其進行響應,該函數(shù)就是消,該函數(shù)就是消息映射函數(shù)(又叫消息響應函數(shù)),它已息映射函數(shù)(又叫消息響應函數(shù)),它已經(jīng)是相應類的成員函數(shù)。經(jīng)是相應類的成員函數(shù)。 Visual C+Visual C+消息映射函數(shù)消息

18、映射函數(shù) 例例9.19.1中消息映射函數(shù)的實現(xiàn)代碼為中消息映射函數(shù)的實現(xiàn)代碼為: :void CMsgMapApp:OnAppAbout() /void CMsgMapApp:OnAppAbout() /命令消息的消命令消息的消息映射函數(shù)的實現(xiàn)息映射函數(shù)的實現(xiàn) CAboutDlg aboutDlg;CAboutDlg aboutDlg; / /聲明一個聲明一個“關于關于”對話框?qū)ο髮υ捒驅(qū)ο骯boutDlgaboutDlgaboutDlg.DoModal();aboutDlg.DoModal(); / /調(diào)用對話框的成員函數(shù)調(diào)用對話框的成員函數(shù)DoModalDoModal顯示對話框顯示對話框

19、Visual C+Visual C+9.1.5 9.1.5 類向?qū)ь愊驅(qū)lassWizardClassWizard的功能的功能 1. 1. 管理消息管理消息 ClassWizardClassWizard可以管理消息,并自動為類添加可以管理消息,并自動為類添加一個消息映射函數(shù);一個消息映射函數(shù);2. 2. 管理成員變量管理成員變量 ClassWizard ClassWizard也可以方便的為某個類添加成員也可以方便的為某個類添加成員變量;變量;3. 3. 管理管理ActivcXActivcX控件的事件與自動化控件的事件與自動化 由于本書沒有講這方面的內(nèi)容,故不作詳由于本書沒有講這方面的內(nèi)容,故

20、不作詳細解釋。細解釋。 Visual C+Visual C+9.2.19.2.1消息的發(fā)送與接收消息的發(fā)送與接收 v大部分消息的發(fā)送是由用戶與應用程大部分消息的發(fā)送是由用戶與應用程序之間的交互進行的。序之間的交互進行的。v每一個能夠接收消息的對象都有一個每一個能夠接收消息的對象都有一個消息映射表,它用來連接消息與對應的消息映射表,它用來連接消息與對應的消息響應函數(shù)。消息響應函數(shù)。 Visual C+Visual C+9.2.2 9.2.2 命令消息的路由命令消息的路由 在在MFCMFC程序中,任何由程序中,任何由CCmdTargetCCmdTarget派生的類對象都派生的類對象都能接收命令消息

21、,這些類對象組成一個有序鏈表,能接收命令消息,這些類對象組成一個有序鏈表,鏈表中的每一個對象都可以同時接收到命令消息鏈表中的每一個對象都可以同時接收到命令消息,但命令消息是按照一定的路徑傳送的,鏈表中的但命令消息是按照一定的路徑傳送的,鏈表中的各個對象處理命令消息的優(yōu)先級的順序并不相同。各個對象處理命令消息的優(yōu)先級的順序并不相同。表表9.2 不同應用類型中命令消息的處理路徑不同應用類型中命令消息的處理路徑 Visual C+Visual C+表表9.2 不同應用類型中命令不同應用類型中命令消息的處理路徑消息的處理路徑應用類型應用類型基類基類描述描述非文檔非文檔/ /視窗結構視窗結構CFrame

22、WndCFrameWnd框架窗口首先得到消息框架窗口首先得到消息CWinAppCWinApp應用程序第二個得到消息應用程序第二個得到消息單文檔界面單文檔界面CViewCView激活的視窗首先得到消息激活的視窗首先得到消息CDocumentCDocument激活的視窗的文檔第二個得到消息激活的視窗的文檔第二個得到消息CSingleDocTemplateCSingleDocTemplate激活的視窗的文檔模板第三個得到消激活的視窗的文檔模板第三個得到消息息 CFrameWndCFrameWnd框架窗口第四個得到消息框架窗口第四個得到消息 CWndAppCWndApp應用程序最后得到消息應用程序最后

23、得到消息多文檔界面多文檔界面CViewCView激活視窗首先得到消息激活視窗首先得到消息CDocumentCDocument激活視窗的文檔第二個得到消息激活視窗的文檔第二個得到消息CMultiDocTemplateCMultiDocTemplate激活視窗的文檔模板第三個得到消息激活視窗的文檔模板第三個得到消息CMDIChildFrameCMDIChildFrame子框架窗口第四個得到消息子框架窗口第四個得到消息CMDIFrameWndCMDIFrameWnd父框架窗口第五個得到消息父框架窗口第五個得到消息CWndAppCWndApp應用程序最后得到消息應用程序最后得到消息Visual C+V

24、isual C+9.2.4 9.2.4 消息的接收與處理消息的接收與處理 一般情況下一般情況下, , WindowsWindows可以直接將某些消息發(fā)送給可以直接將某些消息發(fā)送給某些應用程序的窗口函數(shù),而不將它們放入應用某些應用程序的窗口函數(shù),而不將它們放入應用程序的隊列中程序的隊列中, ,可以使用可以使用SendMessage()SendMessage()函數(shù)達到函數(shù)達到此目的。此目的。MFCMFC應用程序中應用程序中, ,消息的接收和處理靠消息映射機消息的接收和處理靠消息映射機制來完成制來完成,當接收到一個消息時,當接收到一個消息時,WindowsWindows從消息從消息映射表中找出該消

25、息所對應的消息映射函數(shù),然映射表中找出該消息所對應的消息映射函數(shù),然后調(diào)用該映射函數(shù)完成相應的功能。后調(diào)用該映射函數(shù)完成相應的功能。 Visual C+Visual C+9.39.3 常用的常用的窗口窗口消息消息 9.3.1 鍵盤消息處理鍵盤消息處理9.3.2 鼠標消息鼠標消息處理處理9.3.3 WM_TIMER消息消息 9.3.4 自定義消息自定義消息Visual C+Visual C+9.3.1鍵盤消息鍵盤消息 1掃描碼與虛擬碼掃描碼與虛擬碼 按下一個鍵或者釋放一個鍵,鍵盤設備就產(chǎn)生按下一個鍵或者釋放一個鍵,鍵盤設備就產(chǎn)生一個掃描碼(一個掃描碼(ScanCode),),這些這些掃描碼是鍵盤

26、的掃描碼是鍵盤的物理碼,每一個掃描碼可以唯一地確定一個按鍵物理碼,每一個掃描碼可以唯一地確定一個按鍵。為了實現(xiàn)與設備無關的鍵盤操作,為了實現(xiàn)與設備無關的鍵盤操作,Windows系統(tǒng)系統(tǒng)中中定義了一個虛擬鍵盤定義了一個虛擬鍵盤, Windows的鍵盤驅(qū)動程的鍵盤驅(qū)動程序(序(Keybord.drv)實現(xiàn)將各種不同的物理鍵盤實現(xiàn)將各種不同的物理鍵盤映射到同一個虛擬鍵盤,程序員處理的是這唯一映射到同一個虛擬鍵盤,程序員處理的是這唯一的虛擬鍵的虛擬鍵 .表表9.3 9.3 常用的虛擬鍵代碼常用的虛擬鍵代碼 Visual C+Visual C+表表9.3 常用的虛擬鍵代碼常用的虛擬鍵代碼 符號常量符號常

27、量對應按鍵對應按鍵符號常量符號常量對應按鍵對應按鍵VK_LBUTTONVK_LBUTTON鼠標左鍵鼠標左鍵VK_0VK_9VK_0VK_90 0鍵鍵-9-9鍵鍵VK_RBUTTONVK_RBUTTON鼠標右鍵鼠標右鍵VK_AVK_ZVK_AVK_ZA A鍵到鍵到Z Z鍵鍵VK_BACKVK_BACK退格鍵(退格鍵(BACKSPACEBACKSPACE鍵)鍵)VK_NUMPAD09VK_NUMPAD09數(shù)字小鍵盤數(shù)字小鍵盤0-90-9鍵鍵VK_RETURNVK_RETURN回車鍵(回車鍵(EnterEnter)VK_MULTIPYVK_MULTIPY乘號鍵乘號鍵VK_SHIFTVK_SHIFTS

28、hiftShift鍵鍵VK_ADDVK_ADD加號鍵加號鍵VK_CAPITALVK_CAPITALCapsLockCapsLock鍵鍵VK_SUBTRACTVK_SUBTRACT減號鍵減號鍵VK_ESCAPEVK_ESCAPEEscEsc鍵鍵VK_F1VK_F24VK_F1VK_F24F1F1鍵到鍵到F24F24鍵鍵VK_SPACEVK_SPACESpaceBarSpaceBar鍵鍵VK_NUMLOCKVK_NUMLOCKNum LockNum Lock鍵鍵VK_PRIORVK_PRIORPageUpPageUp鍵鍵VK_TABVK_TAB制表鍵(制表鍵(TabTab)VK_NEXTVK_NE

29、XTPageDownPageDown鍵鍵VK_PAUSEVK_PAUSEPausePause鍵鍵VK_ENDVK_ENDEndEnd鍵鍵VK_INSERTVK_INSERTInsIns鍵鍵VK_HOMEVK_HOMEHomeHome鍵鍵VK_DELETEVK_DELETEDelDel鍵鍵VK_LEFTVK_LEFTLeft Arrow()Left Arrow()鍵鍵VK_DOWNVK_DOWNDown Arrow()Down Arrow()鍵鍵Visual C+Visual C+2擊鍵消息擊鍵消息 對于鍵盤上的所有鍵,每次按下或釋對于鍵盤上的所有鍵,每次按下或釋放時,都會產(chǎn)生擊鍵消息。擊鍵消息

30、主放時,都會產(chǎn)生擊鍵消息。擊鍵消息主要有四種,分別為要有四種,分別為WM_KEYDOWNWM_KEYDOWN(鍵按鍵按下)、下)、WM_SYSKEYDOWNWM_SYSKEYDOWN(系統(tǒng)鍵按下)、系統(tǒng)鍵按下)、WM_KEYUPWM_KEYUP(鍵彈起)、鍵彈起)、 WM_SYSKEYUPWM_SYSKEYUP(系統(tǒng)鍵彈起)。系統(tǒng)鍵彈起)。 Visual C+Visual C+3字符消息字符消息 當按了鍵盤上的任一個鍵時,當按了鍵盤上的任一個鍵時,WindowsWindows都會向都會向窗口函數(shù)發(fā)送擊鍵消息,窗口函數(shù)發(fā)送擊鍵消息,對于那些產(chǎn)生可顯示字符對于那些產(chǎn)生可顯示字符的操作,的操作,Wi

31、ndowsWindows還會向窗口函數(shù)發(fā)送字符消息還會向窗口函數(shù)發(fā)送字符消息WM_CHARWM_CHAR。因此字符消息不是由硬件產(chǎn)生的,而是因此字符消息不是由硬件產(chǎn)生的,而是由可產(chǎn)生顯示字符的擊鍵消息轉(zhuǎn)換而來的。由可產(chǎn)生顯示字符的擊鍵消息轉(zhuǎn)換而來的。 表表9.9. 擊鍵與消息的關系擊鍵與消息的關系 。Visual C+Visual C+表表9.9. 擊鍵與消息的關系擊鍵與消息的關系 擊鍵方式擊鍵方式消息次序消息次序wParamwParam參數(shù)參數(shù)按下按下“A”A”鍵然后釋鍵然后釋放放WM_KEYDOWNWM_KEYDOWN虛擬鍵虛擬鍵A A WM_CHARWM_CHARA A的的ASCIIAS

32、CII碼碼 WM_KEYUPWM_KEYUP虛擬鍵虛擬鍵A A先按先按ShiftShift鍵,再按鍵,再按A A鍵鍵WM_KEYDOWNWM_KEYDOWN虛擬鍵虛擬鍵VK_SHIFTVK_SHIFT然后釋放然后釋放A A鍵,最后鍵,最后釋放釋放WM_KEYDOWNWM_KEYDOWN虛擬鍵虛擬鍵A AShiftShift鍵鍵WM_CHARWM_CHARA A的的ASCIIASCII碼碼 WM_KEYUPWM_KEYUP虛擬鍵虛擬鍵A A WM_KEYUPWM_KEYUP虛擬鍵虛擬鍵VK_SHIFTVK_SHIFT按下按下A A鍵持續(xù)一端時鍵持續(xù)一端時間間WM_KEYDOWNWM_KEYDOW

33、N虛擬鍵虛擬鍵A A WM_CHARWM_CHARA A的的ASCIIASCII碼碼 WM_KEYDOWNWM_KEYDOWN虛擬鍵虛擬鍵A A WM_CHARWM_CHARA A的的ASCIIASCII碼碼 WM_KEYDOWNWM_KEYDOWN虛擬鍵虛擬鍵A A WM_CHARWM_CHARA A的的ASCIIASCII碼碼 WM_KEYUPWM_KEYUP虛擬鍵虛擬鍵A AVisual C+Visual C+處理鍵盤消息的實例處理鍵盤消息的實例例例9.2 實現(xiàn)在客戶區(qū)畫矩形或橢圓,按實現(xiàn)在客戶區(qū)畫矩形或橢圓,按C鍵鍵顯示橢圓,按顯示橢圓,按R鍵顯示矩形;當按鍵顯示矩形;當按、鍵時,屏幕

34、上的圖形相應移動。鍵時,屏幕上的圖形相應移動。主要步驟如下:主要步驟如下:1)創(chuàng)建)創(chuàng)建MFC 單文檔應用程序框架;單文檔應用程序框架;2)在)在CView類中添加數(shù)據(jù)成員變量;類中添加數(shù)據(jù)成員變量;3)對成員變量進行初始化;)對成員變量進行初始化;4)添加字符消息的映射函數(shù);)添加字符消息的映射函數(shù);5)添加按鍵消息的映射函數(shù);)添加按鍵消息的映射函數(shù);6)在)在OnDraw()函數(shù)中添加繪圖代碼。()函數(shù)中添加繪圖代碼。Visual C+Visual C+9.3.2 9.3.2 鼠標消息處理鼠標消息處理 n 鼠標消息鼠標消息 n 鼠標消息響應函數(shù)鼠標消息響應函數(shù) Visual C+Visu

35、al C+1. 1. 鼠標消息鼠標消息當用戶移動、按下或釋放鼠標時,都會產(chǎn)當用戶移動、按下或釋放鼠標時,都會產(chǎn)生鼠標消息,根據(jù)鼠標所處的位置不同生鼠標消息,根據(jù)鼠標所處的位置不同(窗口的客戶區(qū)或非客戶區(qū)),(窗口的客戶區(qū)或非客戶區(qū)),WindowsWindows下下的鼠標消息也分為兩大類:的鼠標消息也分為兩大類:客戶區(qū)域的鼠客戶區(qū)域的鼠標消息標消息、非客戶區(qū)域的鼠標消息非客戶區(qū)域的鼠標消息。常見的鼠標消息主要有常見的鼠標消息主要有: 左鍵按下(左鍵按下(WM_LBOTTONDOWNWM_LBOTTONDOWN),左鍵彈起),左鍵彈起( W M _ L B O T T O N U PW M _

36、L B O T T O N U P ) ;) ; 右 鍵 按 下右 鍵 按 下( W M _ L B O T T O N D O W NW M _ L B O T T O N D O W N ) , 右 鍵 彈 起) , 右 鍵 彈 起( W M _ R B O T T O N U PW M _ R B O T T O N U P ) ; 鼠 標 移 動) ; 鼠 標 移 動(WM_MOUSEMOVEWM_MOUSEMOVE),等。),等。Visual C+Visual C+2.2.鼠標消息響應函數(shù)鼠標消息響應函數(shù)鼠標左鍵的被按下的消息響應函數(shù)鼠標左鍵的被按下的消息響應函數(shù):afx_msg v

37、oid OnLButtonDown( UINT nFlags, CPoint afx_msg void OnLButtonDown( UINT nFlags, CPoint point );point ); 參數(shù)參數(shù)nFlagsnFlags代表當按下一個鼠標鍵盤時,各種虛擬鍵盤上代表當按下一個鼠標鍵盤時,各種虛擬鍵盤上的鍵或鼠標上的鍵是否真的被按下,該參數(shù)的值有:的鍵或鼠標上的鍵是否真的被按下,該參數(shù)的值有:MK_CONTROLMK_CONTROL (若按下若按下 CtrlCtrl鍵,則置位),鍵,則置位),MK_SHIFTMK_SHIFT(若若按下按下 ShiftShift鍵,則置位),鍵,

38、則置位),MK_LBUTTONMK_LBUTTON (若按下若按下 鼠標左鼠標左鍵,則置位),鍵,則置位),MK_MBUTTONMK_MBUTTON(若按下鼠標中鍵,則置位),若按下鼠標中鍵,則置位),MK_RBUTTON MK_RBUTTON (若按下鼠標右鍵,則置位)。若按下鼠標右鍵,則置位)。 參數(shù)參數(shù)pointpoint代表客戶區(qū)坐標中鼠標光標的坐標位置。代表客戶區(qū)坐標中鼠標光標的坐標位置。Visual C+Visual C+3 添加鼠標消息響應函數(shù)的步驟添加鼠標消息響應函數(shù)的步驟單擊系統(tǒng)菜單單擊系統(tǒng)菜單“查看查看”-建立類向?qū)Ы㈩愊驅(qū)г趶棾龅脑趶棾龅腗essageMap對話框中選擇

39、對話框中選擇View類所對類所對應的應的Message(消息):(消息):WM_LBUTTONDOWN, 雙擊該消息,就會添加上一個左鍵按下的消息響應雙擊該消息,就會添加上一個左鍵按下的消息響應函數(shù)函數(shù)OnLButtonDown()()再單擊再單擊EditCode按鈕,就可以定位到相應的按鈕,就可以定位到相應的cpp文件中該函數(shù)的代碼處,然后就可以編寫具體的代文件中該函數(shù)的代碼處,然后就可以編寫具體的代碼了。碼了。例:單擊鼠標左鍵,在客戶區(qū)顯示例:單擊鼠標左鍵,在客戶區(qū)顯示“你好!你好!”Visual C+Visual C+9.3.3 9.3.3 WM_TIMERWM_TIMER消息消息 WindowsWindows定時器是一種周期性的消息產(chǎn)生裝置,它定時器是一種周期性的消息產(chǎn)生裝置,它會每會每隔一段指定時間發(fā)送一次定時消息隔一段指定時間發(fā)送一次定時消息WM_TIMERWM_TIMER。它是一個很重要的系統(tǒng)消息,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論