windows程式設計之WM_MENUSELECT訊息
阿新 • • 發佈:2019-01-03
WM_MENUSELECT訊息:
(1) 程式視窗如下所示:
(2)程式中的訊息處理如下所示:
(3)wParam ,lParam指代LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam) { static int idColor [5] = {WHITE_BRUSH,LTGRAY_BRUSH, GRAY_BRUSH,DKGRAY_BRUSH, BLACK_BRUSH } ; static int iSelection = IDM_BKGND_WHITE ; HMENU hMenu ; switch (message) { case WM_MENUSELECT: hMenu = GetMenu (hwnd) ; // //if( lParam != 0 ) if(true) { switch (LOWORD (wParam)) { case 0: MessageBox(NULL,TEXT("檔案選中"),NULL,MB_OK); return 0; case 1: MessageBox(NULL,TEXT("編輯顏色選中"),NULL,MB_OK); return 0; case IDM_FILE_NEW: case IDM_FILE_OPEN: case IDM_FILE_SAVE: MessageBeep (0) ; return 0 ; case IDM_FILE_EXIT: SendMessage (hwnd, WM_CLOSE, 0, 0) ; return 0 ; case IDM_BKGND_WHITE: // Note: Logic below case IDM_BKGND_LTGRAY: // assumes that IDM_WHITE case IDM_BKGND_GRAY: // through IDM_BLACK are case IDM_BKGND_DKGRAY: // consecutive numbers in case IDM_BKGND_BLACK: // the order shown here. CheckMenuItem (hMenu, iSelection, MF_UNCHECKED) ; iSelection = LOWORD (wParam) ; CheckMenuItem (hMenu, iSelection, MF_CHECKED) ; //CheckMenuRadioItem(hMenu,IDM_BKGND_WHITE,IDM_BKGND_BLACK,iSelection,MF_BYCOMMAND); //重新設定視窗,這裡是背景顏色 SetClassLong(hwnd, GCL_HBRBACKGROUND, (LONG)GetStockObject(idColor [LOWORD (wParam) - IDM_BKGND_WHITE])) ; InvalidateRect (hwnd, NULL, TRUE) ; break; case IDM_ABOUT: MessageBox(hwnd, TEXT("Help not yet implemented!"),szAppName, MB_ICONEXCLAMATION | MB_OK) ; return 0 ; case IDM_VERSION: MessageBox (hwnd,TEXT ("版本1"),szAppName, MB_ICONINFORMATION | MB_OK) ; break; } } return DefWindowProc (hwnd, message, wParam, lParam) ; }
wParam和lParam指代要看選擇項是命令項還是彈出選單,
<1>命令項的時候,LOWORD(wParam) = 選單項ID
<2> 彈出選單,LOWORD(wParam)= 彈出選單相對於目選單的索引。
<3>lParam代表的所選項所歸屬選單的控制代碼。
(4)測試過程<1>單擊選單中“幫助”
訊息屬性分別為(按順序):
<2>單擊選單中“檢視”按鈕
訊息屬性(按順序)
從上面可以看出,不管點選那個選單項,最終都有個”選單已關閉”的訊息,這個時候的WM_MENUSELECT中的wParam= FFFF0000,lParam= 00000000.
即便是在選單欄的空白處單擊也會出現這樣的WM_MENUSELECT的訊息。