1. 程式人生 > >windows程式設計之WM_MENUSELECT訊息

windows程式設計之WM_MENUSELECT訊息

WM_MENUSELECT訊息:

(1) 程式視窗如下所示:


(2)程式中的訊息處理如下所示:

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) ;
}
(3)wParam ,lParam指代

wParam和lParam指代要看選擇項是命令項還是彈出選單,

<1>命令項的時候,LOWORD(wParam) = 選單項ID

<2> 彈出選單,LOWORD(wParam)= 彈出選單相對於目選單的索引。

<3>lParam代表的所選項所歸屬選單的控制代碼。

(4)測試過程

<1>單擊選單中“幫助”

訊息屬性分別為(按順序):

<2>單擊選單中“檢視”按鈕

訊息屬性(按順序)

從上面可以看出,不管點選那個選單項,最終都有個”選單已關閉”的訊息,這個時候的WM_MENUSELECT中的wParam= FFFF0000,lParam= 00000000.

即便是在選單欄的空白處單擊也會出現這樣的WM_MENUSELECT的訊息。