常用消息 1、WM_LBUTTONDOWN 產(chǎn)生:單擊。 參數(shù):wParam:包含一個整數(shù)值,以標識鼠標鍵的按下狀態(tài)。鼠標的按下標識及說明: MK_LBUTTON 標識按下鼠標左鍵 MK_MBUTTON 標識按下鼠標中鍵 MK_RBUTTON 標識按下鼠標右鍵 lParam:長參數(shù)lParam的低字位包含當前坐標的x坐標,在高字節(jié)包含當前坐標的Y坐標。 相似的消息有:WM_LBUTTONUP、WM_RBUTTONDOWN、WM_RBUTTONUP、WM_LBUTTONDBLCLK、WM_RBUTTONDBLCLK 2、WM_KEYDOWN 產(chǎn)生:按下一個非系統(tǒng)鍵的時候產(chǎn)生該事件,系統(tǒng)鍵是指實現(xiàn)系統(tǒng)操作的組合鍵,例如,Alt與某個功能鍵的組合以實現(xiàn)菜單操作等。 參數(shù):wParam:按下鍵的虛擬鍵盤碼,虛擬鍵碼用來標識按下或者釋放的是哪個鍵,例如功能鍵F1的虛擬鍵碼在windows.h文件中定義為VK_F1。 lParam:長參數(shù)中記錄了按鍵的重復次數(shù),掃描碼、轉移代碼、先前鍵的狀態(tài)等信息。 相似的消息有WM_KEYUP:放開按下的非系統(tǒng)鍵時產(chǎn)生的事件。 3、WM_CHAR 產(chǎn)生:按一個非系統(tǒng)鍵時產(chǎn)生。 參數(shù):wParam:所按下的鍵的ASCII碼。lParam:長參數(shù)中記錄了按鍵的重復次數(shù),掃描碼、轉移代碼、先前鍵的狀態(tài)等信息。 4、WM_CREATE 產(chǎn)生:由CreateWindow函數(shù)發(fā)出,創(chuàng)建窗口。 參數(shù):wParam:沒用。lParam:包含一個指向CREATESTRUCT數(shù)據(jù)結構的指針,該結構是傳遞給CreateWindow函數(shù)的參數(shù)的副本。 5、WM_CLOSE 產(chǎn)生:當關閉當前窗口時產(chǎn)生。 參數(shù):wParam:未用。lParam:未用。 6、WM_DESTROY 產(chǎn)生:當窗口要銷毀時由DestroyWindow函數(shù)發(fā)出。 參數(shù):wParam:沒用到。lParam:沒用到。 7、WM_QUIT 產(chǎn)生:退出應用程序時由PostQuitMessage函數(shù)發(fā)出。 參數(shù):wParam:含有退出代碼,退出代碼標識應用程序退出運行時的有關信息。lParam:未用。 8、WM_COMMAND 產(chǎn)生:用戶與窗口或控件交互時,控件向其窗口發(fā)送WM_COMMAND消息。該消息的wParam參數(shù)的低字節(jié)中包含子窗口(控件)的標識值ID,高字節(jié)中包含子窗口向父窗口發(fā)出的通知代碼,lParam參數(shù)中包含控件子窗口句柄。 9、WM_PAINT 用戶改變窗口大小或拖動窗口,系統(tǒng)向應用程序發(fā)送WM_PAINT消息,WM_PAINT消息調用BeginPaint函數(shù)。 消息處理函數(shù) 1、windows消息和控件通知的處理函數(shù) windows消息和控件通知都是由派生于CWnd的窗口類對象處理的。它們包括CFrameWnd、CMDIFrameWnd、 CMDIChildWnd、CView、CDialog以及從這些派生的用戶自定義的類。這樣的類對象封裝了windows窗口句柄HWND。 windows消息和控件通知都有默認的處理函數(shù),這些函數(shù)在CWnd類中進行了預定義,MFC類庫以消息名為基礎形成這些處理函數(shù)的名稱,這些處理函數(shù)的名稱都以前綴"On"開始。有的處理函數(shù)不帶參數(shù),有的則有幾個參數(shù);有的還有除void以外的返回值類型。CWnd中消息處理函數(shù)的說明都有 afx_msg前綴。關鍵字afx_msg用于把處理函數(shù)和其他CWnd成員函數(shù)區(qū)分開來。例如,消息WM_PAINT的處理函數(shù)在CWnd中被聲明成:afx_msg void OnPaint(); windows消息常見的有鼠標消息(如WM_LBUTTONDOWN)消息)、鍵盤字符消息(WM_CHAR消息)、鍵盤按鍵消息(WM_KEYDOWN)、窗口重畫消息WM_PAINT,水平和垂直條滾動消息WM_HSCROLL和WM_VSCROLL)以及系統(tǒng)時鐘消息 WM_TIMER等。 2、命令消息的處理函數(shù) 由于用戶界面的對象是用戶自已定義的,每個應用程序的用戶界面對象千差萬別,所以對用戶界面對象的命令消息沒有默認的處理函數(shù)。如果某條命令直接影響某個對象,則應該讓這個對象來處理這條命令。例如FILE菜單上的Open命令當然與應用程序有關:應用程序打開一個特定的文檔來響應該命令。所以,Open 命令的處理函數(shù)是應用程序類的一個成員函數(shù)。 把命令消息映射成處理函數(shù)時,ClassWizard以命令ID來命名處理函數(shù),可以接受、修改、或替換推薦使用的名字。例如,Edit菜單項的Cut命令,對應ID就是ID_EDIT_CUT,處理函數(shù)被命名成:afx_msg void OnEditCut(); 此外,對于控件按鈕的BN_CLICKED通知消息,其處理函數(shù)可以被命名為: afx_msg void OnClickedUseAsDefault(); 命令消息的處理函數(shù)沒有參數(shù)值,也不返回值。 消息映射 用MFC Application Wizard 創(chuàng)建應用程序框架時,AppWizard為創(chuàng)建的每個命令目標類(包括派生的應用程序對象、文檔、視圖、和邊框窗口等)編寫一個消息映射。每個命令目標類的消息映射存在相應的.cpp文件中??梢栽?/span>AppWizard創(chuàng)建的基本消息映射的基礎上,使用ClassWizard為每個類將處理的消息和命令添加一些條目。例如,對于應用程序類,MFC AppWizard創(chuàng)建的基本消息映射為: BEGIN_MESSAGE_MAP(CTextEditApp,CWinApp) //{{AFX_MSG_MAP(CTextEditApp) ON_COMMAND(ID_APP_ABOUT,OnAppAbout) //注:ClassWizard將在此處添加和刪除消息映射宏 //不要編輯這些生成的代碼塊 //}}AFX_MSG_MAP //基于標準文件的文檔命令(新建和打開) ON_COMMAND(ID_FILE_NEW,CWinApp::OnFileNew) ON_COMMAND(ID_FILE_OPEN,CWinApp::OnFileOpen) //標準的打印設置命令 ON_COMMAND(ID_FILE_PRINT_SETUP,CWinApp::OnFilePrintSetup) END_MESSAGE_MAP() |
|