CodeSarang.Com
Home | All categories Join | Login | 검색   

 

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 cpueblocpueblo.com