WM_INITMENU

인수

wParam : 초기화될 메뉴의 핸들

설명

사용자가 메뉴 바의 메뉴를 클릭하거나 메뉴 키를 눌러 메뉴가 열리기 직전에 이 메시지가 보내진다. 응용 프로그램은 이 메시지를 받았을 때 메뉴 항목에 대한 초기화나 수정을 한다. 선택된 메뉴 항목에 체크 표시를 하거나 사용 금지된 메뉴 항목을 Disable시킬 수 있으며 추가로 더 필요한 메뉴 항목을 AppendMenu 등의 함수로 만들 수 있다.

이 메시지는 메뉴가 활성화될 때 딱 한번만 보내지며 메뉴 바의 팝업 메뉴를 옮겨 다녀도 추가적인 메시지는 발생하지 않는다. 메뉴 항목에 대한 정보는 별도로 제공하지 않으므로 직접 구해서 사용해야 한다.

리턴

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

예제

예제 1

다음 예제는 세 개의 메뉴 항목을 가지고 있으며 메뉴가 열릴 때마다 메뉴 항목의 체크 표시를 옮긴다.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	static int count=0;
	TCHAR Mes[]="메뉴가 열릴 때마다 메뉴 항목을 순서대로 체크합니다";

	switch(iMessage) {
	case WM_INITMENU:
		CheckMenuItem((HMENU)wParam,IDM_MENU1,MF_BYCOMMAND | MF_UNCHECKED);
		CheckMenuItem((HMENU)wParam,IDM_MENU2,MF_BYCOMMAND | MF_UNCHECKED);
		CheckMenuItem((HMENU)wParam,IDM_MENU3,MF_BYCOMMAND | MF_UNCHECKED);
		count=(count +1) % 3;
		CheckMenuItem((HMENU)wParam,IDM_MENU1+count,MF_BYCOMMAND | MF_CHECKED);
		return 0;
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		TextOut(hdc,10,10,Mes,lstrlen(Mes));
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

실전에서는 프로그램의 조건에 따라 메뉴 항목에 적절하게 체크 표시를 달거나 사용 금지시켜야 한다. 예를 들어 사용자가 옵션을 선택했으면 옵션 메뉴 항목 옆에 체크 표시를 달아 주고 클립보드를 사용할 수 없는 상황이면 관련 메뉴 항목을 사용 금지시킨다.

 

플랫폼

95이상

참조

 


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