TranslateAccelerator

원형 int TranslateAccelerator(HWND hWnd, HACCEL hAccTable, LPMSG lpMsg);
인수

▶hWnd : 메시지를 변환할 윈도우의 핸들

▶hAccTable : 액셀러레이터 테이블의 핸들이며 일반적으로 LoadAccelerators 함수로 읽혀진 것이다.

▶lpMsg : GetMessage 또는 PeekMessage 함수에 의해 읽혀진 메시지 정보 구조체

리턴 성공하면 0이 아닌 값을 리턴하며 실패하면 0을 리턴한다. 이 함수가 0이 아닌 값을 리턴할 경우 이 메시지는 변환되어 이미 처리되었으므로 TranslateMessage 함수로 보내서는 안된다.
설명

액셀러레이터 명령을 만든다. 이 함수는 hAccTable을 참조하여 WM_KEYDOWN, WM_SYSKEYDOWN으로부터 WM_COMMAND, WM_SYSCOMMAND 메시지를 만들어 낸다. 눌러진 키가 액셀러레이터 테이블에 정의된 명령일 경우 명령 메시지로 변환하여 메시지 큐에 붙여주며 이 메시지는 다음번 GetMessage나 PeekMessage에 의해 읽혀져 처리되며 이 메시지가 완전히 처리되기 전에는 리턴하지 않는다.

일반적으로 액셀러레이터는 메뉴 항목에 대한 단축키를 제공하기 위해 작성한다. 이 경우 액셀러레이터키가 눌러지면 마치 메뉴가 선택된 것처럼 WM_INITMENU, WM_INITPOPUPMENU 메시지가 전달된다. 단 윈도우가 사용금지되어 있거나 메뉴 항목이 사용금지된 경우, 마우스가 캡처된 경우는 제외된다. WM_COMMAND 메시지는 명령이 액셀러레이터로부터 온 경우 wParam의 상위 워드로 1이 전달되며 메뉴로부터 온 경우 0이 전달되는데 보통 이 구분은 무시하지만 메뉴로부터의 명령과 액셀러레이터로부터의 명령을 구분하려면 HIWORD(wParam)을 참고하도록 한다. 다음은 액셀러레이터가 정의되어 있을 경우의 메시지 루프이다.

while(GetMessage(&Message,0,0,0)) {
	if (!TranslateAccelerator(hWnd,hAccel,&Message)) {
		TranslateMessage(&Message);
		DispatchMessage(&Message);
	}
}

GetMessage로 메시지를 조사한 후 먼저 TranslateAccelerator 함수가 이 메시지를 검사하여 액셀러레이터표에 있는 키보드 입력인지 조사한다. 만약 그렇다면 이 메시지는 WM_COMMAND로 변환되어 메시지 처리 함수로 보내지며 이 경우 TranslateMessage, DispatchMessage 함수는 호출되지 말아야 한다.

참고함수 LoadAccelerators : 액셀러레이터 테이블을 읽어들인다.
플렛폼95이상
본문참조 

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