QA: WM_COMMAND 메세지가 수신되지 않을 경우
등록자 : cpueblo (유광희), 2008-10-31
Q. Win32 프로그램 작성시 WM_COMMAND 가 수신되지 않을 경우
TrackPopupMenu 나 키보드 처리중 WM_COMMAND 가 수신되지 않습니다.
A. 엑셀러레이터 (Accelerator) 로 메세지 루핑 처리를 해야 합니다
엑셀레이터는 ShortCut 단축키등 여러 복잡한 메세지를
WM_COMMAND 나 WM_SYSCOMMAND 로 변환해 주는 루핑 처리 방법 입니다
일반적인 메세지 처리시는 아래와 같은 방법으로 처리하게 되지만
// 기본 메시지 루프입니다.
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
엑셀레이터를 적용하게 되면 아래와 같습니다.
HACCEL hAccelTable = LoadAccelerators(AfxGetInstanceHandle(), (LPCTSTR)IDR_ACCELERATOR1);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
일반적인 메세지 처리 방법으로는 WM_COMMAND 가 수신되지 않으므로
엑셀레이터로 루핑 처리를 하셔야 합니다
관련 자료
http://www.winapi.co.kr/reference/Function/LoadAccelerator.htm
http://www.winapi.co.kr/win32lec/lec5/lec5-4-0.htm
http://codesarang.com. mail to cpueblo cpueblo.com
|