Окна. Изменить положение выпадающего меню - PullRequest
1 голос
/ 18 января 2011

Есть ли способ изменить положение всплывающего меню. С окнами верхнего уровня я могу сделать это с помощью функции обратного вызова CBTProc и MoveWindow. Могу ли я сделать то же самое с меню? Необходимо сделать так, чтобы всплывающее меню находилось только в области его родительского окна. Что-то вроде легкого оконного менеджера.

1 Ответ

1 голос
/ 18 января 2011

Да, при обратном вызове WH_CBT вы будете получать nCode HCBT_CREATEWND при каждом создании окна меню.Проверка на имя класса, стандартные окна меню / подменю будут иметь имя класса «# 32768».Затем вы можете отправить в окно сообщение MN_GETHMENU, чтобы узнать, какое меню должно быть активировано.Но , как задокументировано , слишком рано перемещать окно при получении уведомления, меню еще даже не видно, поэтому вам может потребоваться создать подкласс окна и обработать дополнительные сообщения.

Обратите внимание, что вам не нужно ловить, чтобы получать уведомления при отображении окна меню, вы можете поместить обработчик для сообщения WM_ENTERIDLE, проверьте для wParam, чтобы увидеть, еслиВызвав сообщение, получите окно меню из 'lParam' и снова отправьте 'MN_GETHMENU', чтобы узнать конкретное меню.На этом этапе можно перемещать окно без дальнейшей обработки сообщений.Просто имейте в виду, что WM_ENTERIDLE будет вызываться несколько раз, поэтому вам нужно следить за тем, что вы уже переместили конкретное окно или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...