CodeSarang.Com
Home | 전체 메뉴 | 질문/답변 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