2011-01-18 7 views
1

팝업 메뉴의 위치를 ​​변경하는 방법이 있습니까? 최상위 창을 통해 CBTProc 콜백 함수 및 MoveWindow를 통해이를 수행 할 수 있습니다. 메뉴를 사용하여 동일한 작업을 수행 할 수 있습니까? 팝업 메뉴가 상위 창의 영역에만 위치하도록해야합니다. 가벼운 창 관리자와 같은 것.Windows. 드롭 다운 메뉴 위치 변경

답변

1

예, WH_CBT 훅 콜백에서 메뉴 창이 생성 될 때마다 HCBT_CREATEWND의 'nCode'로 통보됩니다. 클래스 이름 테스트, 표준 메뉴/하위 메뉴 창의 클래스 이름은 '# 32768'입니다. 그러면 활성화 할 메뉴를 찾으려면 창에 MN_GETHMENU 메시지를 보낼 수 있습니다. 그러나 as documented, 알림을 수신 할 때 창을 이동하기에는 너무 이르다. 아직 메뉴가 표시되지 않으므로 창을 하위 클래스로 지정하고 추가 메시지를 처리해야 할 수도 있습니다.

메뉴 창이 표시 될 때 알림을받을 필요가 없으므로 WM_ENTERIDLE 메시지에 대한 처리기를 넣고 'wParam'을 테스트하여 메뉴에서 메시지가 나타나는지 확인하고 메뉴를 가져옵니다. 창에서 'lParam'을 선택하고 특정 메뉴를 찾으려면 'MN_GETHMENU'를 다시 보냅니다. 메시지 처리를 더 이상하지 않고이 시점에서 창을 이동할 수 있습니다. 'WM_ENTERIDLE'이 여러 번 호출되므로 이미 특정 창을 이동했는지 여부를 추적해야합니다.

+0

대단히 감사합니다. 내가 필요한 것입니다. 이제 상황에 맞는 메뉴를 사용하여 동일한 작업을 시도하지만 적절한 창 메시지를 찾을 수 없습니다. 나에게 뭔가 조언 해 줄 수 있니? – Alexander

+0

@Alexander - Delphi 응용 프로그램에서 테스트 한 결과 두 가지 방법 모두 작동하는 것 같습니다. 'hwnd' 매개 변수를 위해 윈도우의 핸들을'TrackPopupMenu [ex]'에 넘겨 주어야합니다. 이것은 메시지를받을 창을 가리키기 때문입니다. –