2010-12-20 2 views
4

단추를 클릭하면 WM_COMMAND 메시지가 부모에게 보내지지만이 메시지를 보내는 메시지는 무엇인지 알 수 있습니까? 단추의 기본 WndProc을 재정의하고 단추가 WM_COMMAND 메시지를받지 못하므로 어떤 메시지가 단추로 WM_COMMAND 메시지를 보내야 해당 기능을 복제 할 수 있는지 알아야합니다.어떤 메시지가 단추로 WM_COMMAND 메시지를 보내 게합니까?

답변

3

실제로는 WM_LBUTTONDOWN, WM_MOUSELEAVE 및 기타 몇 가지 기능이 조합 된 것입니다. 예를 들어 WM_COMMAND는 마우스로 버튼을 누른 경우에만 발생하고 WM_LBUTTONUP이 발생하면 버튼에 남아 있습니다. 공간에 관해서는, 등, 난 그냥 VK_ENTER 메시지 및 물건을 처리 믿습니다.

+0

명시 적으로 트랩하지 않으려는 메시지의 단추에 대해 이전 WndProc을 호출 할 수 있습니다. (메모리에서, 나는 그것을 GetWindowLongPtr (hWnd, GWL_WNDPROC)라고 생각한다.) 당신이하려고하는 것은 무엇이든 할 수있게 해주는 반면, 새로운 버튼은 정상적으로'WM_COMMAND' 메시지를 보낸다. 해야 할 것. 비록 이것이 당신의 상황에 어떤 좋은 점인지 정말로 알 수는 없지만 ... –

+0

@ 브론 아니, 나는 버튼이 (버튼의 규칙에 따라) 진정으로 "클릭 된"것인지 아닌지를 말할 수 있어야한다. 원래 WndProc, 그래서 내 물건을 할 수 있습니다. 부모 윈도우에서 WM_COMMAND를 트래핑하는 것은 내가 필요한 것이 아닙니다. –

0

나는 그것이 WM_LBUTTONUP이지만, Spy 프로그램을 사용하여 확실히 알아 낸다.

+1

어떤 때를에 대해 할 수있는 버튼 래퍼 객체에 대한 포인터 이전 예제의 some_info이

::SetWindowLongPtr(button_handle, GWL_USERDATA, reinterpret_cast<LONG_PTR>(some_info)); 

같은 정보를 설정해야합니다

::GetWindowLongPtr(HWND(lParam), GWL_USERDATA); 

호출하면 버튼에 대한 정보를 추출 할 수 있습니다 스페이스 키로 클릭하십시오. 또는 Enter 키? 아니면 가속기 키로? –

0

WM_LBUTTONDOWN 메시지가 WM_COMMAND 메시지로 변환되어 상위 컨트롤로 보내 지므로 WM_COMMAND 메시지를 무시할 수 없습니다. 백그라운드에서 수행되는 메커니즘입니다.

당신은 공간에 대한 질문과 key.This이 등. ... vk_enter, vk_tab 같은 가상 키 코드에 의해 제어 할 수

0

WM_COMMAND 메시지가 항상 컨트롤의 부모에 의해 수신 입력합니다. 프로그래밍 방식으로 버튼을 클릭하려면 다음을 수행하십시오.

::SendMessage(button_handle, BM_CLICK, 0, 0); 

WM_COMMAND의 LPARAM은 button_handle을 보유합니다. 그래서 당신은 당신이

관련 문제