SetMenu

원형

BOOL SetMenu(HWND hWnd, HMENU hMenu);

MFC 원형

BOOL CWnd::SetMenu( CMenu* pMenu );

인수

▶hWnd : 메뉴를 붙일 윈도우의 핸들. 차일드 윈도우에는 메뉴를 붙일 수 없다.

▶hMenu : 메뉴 핸들. 이 핸들을 NULL로 주면 윈도우의 메뉴를 제거한다.

리턴

성공하면 0이 아닌 값을 리턴하며 실패하면 0을 리턴한다.

설명

윈도우의 메뉴를 설정 또는 변경한다. 윈도우에 메뉴가 붙어 있지 않으면 hMenu를 새로 붙이고 이미 메뉴가 붙어 있으면 새로운 메뉴로 대체된다. 이때 이전 메뉴는 자동으로 파괴되지 않으므로 DestroyMenu 함수로 파괴해 주어야 한다. 메뉴가 변경되면 윈도우는 다시 그려진다.

예제 1

다음 예제는 두 벌의 메뉴를 미리 작성해 놓고 마우스 좌우 버튼을 누르면 실행중에 메뉴를 교체한다.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	static HMENU hM1, hM2;
	TCHAR Mes[]="마우스 좌우 버튼을 누르면 메뉴를 변경합니다";

	switch(iMessage) {
	case WM_CREATE:
		hM1=LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_MENU1));
		hM2=LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_MENU2));
		return 0;
	case WM_LBUTTONDOWN:
		SetMenu(hWnd,hM1);
		return 0;
	case WM_RBUTTONDOWN:
		SetMenu(hWnd,hM2);
		return 0;
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		TextOut(hdc,10,10,Mes,lstrlen(Mes));
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		DestroyMenu(hM1);
		DestroyMenu(hM2);
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

LoadMenu 함수로 메뉴 핸들을 읽어 놓았으며 조건에 따라 SetMenu 함수로 윈도우의 메인 메뉴를 교체하였다. 이 방법을 사용하면 한글, 영문, 일어, 중국어 등의 다국어 메뉴를 미리 작성해 놓고 사용자가 선택한 언어에 따라 메뉴를 교체할 수 있다.

참고함수

LoadMenu

플랫폼

95이상

참조

 


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