WM_MENUSELECT

인수

LOWORD(wParam) : 선택된 메뉴 항목의 ID가 저달된다. 드롭다운 메뉴나 서브 메뉴의 경우 메인 메뉴에서의 서브 메뉴 인덱스가 전달되며 lParam은 메인 메뉴의 핸들이 전달된다. 이 인수로 GetSubMenu를 호출하면 열려진 서브 메뉴의 핸들을 얻을 수 있다.

HIWORD(wParam) : 메뉴 플래그값이며 다음 중 하나가 된다. 이 값이 0xFFFF이고 lParam이 NULL이면 시스템이 메뉴를 닫은 것이다.

플래그

설명

MF_BITMAP

비트맵 메뉴

MF_CHECKED

체크된 상태

MF_DISABLED

사용 금지된 상태

MF_GRAYED

그레이 상태

MF_HILITE

하이라이트 상태

MF_MOUSESELECT

메뉴 항목이 마우스로 선택되었다.

MF_OWNERDRAW

오너 드로우 항목

MF_POPUP

드롭 다운 또는 서브 메뉴

MF_SYSMENU

메뉴 항목은 시스템 메뉴의 일부이다.

lParam : 클릭된 메뉴의 핸들

설명

사용자가 메뉴 항목을 선택할 때 메뉴의 소유자에게 보내진다. 이때 선택이란 메뉴 항목을 클릭한 것을 의미하는 것이 아니며 메뉴 항목 위로 마우스 커서나 반전 막대가 움직이고 있다는 뜻이다. 각각의 항목을 선택할 때마다 이 메시지가 전달되므로 개별 항목에 대한 처리가 필요할 때 이 메시지를 이용한다. 예를 들어 각 메뉴 항목에 대한 도움말을 보여 주고 싶다면 이 메시지를 받았을 때 선택된 메뉴 항목에 따른 도움말을 상태란 등에 출력한다.

리턴

메시지를 처리했으면 0을 리턴한다.

예제

예제 1

다음 예제는 다섯개의 메뉴 항목을 제공하는데 각 메뉴 항목에 대한 도움말을 타이틀 바에 보여준다.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;

	switch(iMessage) {
	case WM_MENUSELECT:
		switch (LOWORD(wParam)) {
		case 0:
			SetWindowText(hWnd,"첫번째 서브 메뉴");
			break;
		case 1:
			SetWindowText(hWnd,"두번째 서브 메뉴");
			break;
		case IDM_MENU1:
			SetWindowText(hWnd,"첫번째 메뉴 항목을 선택했습니다");
			break;
		case IDM_MENU2:
			SetWindowText(hWnd,"이 프로그램은 잠시 후 자살합니다.");
			break;
		case IDM_MENU3:
			SetWindowText(hWnd,"하드 디스크를 몽땅 포맷합니다.");
			break;
		case IDM_MENU4:
			SetWindowText(hWnd,"운영체제를 못살게 굽니다.");
			break;
		case IDM_MENU5:
			SetWindowText(hWnd,"설치되어 있는 운영체제를 깔끔하게 지웁니다.");
			break;
		}
		return 0;
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

LOWORD(wParam)으로 전달된 메뉴 항목의 ID, 또는 위치값을 보고 도움말을 출력한다. 도움말은 미리 배열로 정의해 놓거나 아니면 같은 ID의 문자열 리소스로 작성해 놓을 수도 있다. 구현을 간단하게 하기 위해 타이틀 바에 도움말을 출력했으나 보통 상태란에 도움말을 출력한다.

메뉴 항목에 대한 실제 코드는 위험성이 높고 기술적으로 어려우므로 작성하지 않았다.

플랫폼

95이상

참조

 


written by http://www.winapi.co.kr