Настройка ширины меню в Windows API - PullRequest
0 голосов
/ 06 февраля 2009

Я создаю пользовательский элемент управления в wxWidgets, который отображает меню как его часть, и в настоящее время работает на стороне Windows. У wxWidgets нет способа установить ширину меню. Это просто делает окно таким же широким, как самая длинная строка, плюс несколько пикселей с каждой стороны.

В API есть способ получить фактический дескриптор меню Windows API. Есть ли в Windows API метод установки ширины меню, кроме простого расчета его по ширине строки?

Ответы [ 3 ]

2 голосов
/ 06 февраля 2009

С помощью дескриптора меню вы можете циклически перемещаться по пунктам меню и вызывать SetMenuItemInfo, указывая, что вы хотите нарисовать владельцем элементы меню. Когда вы сделаете это, окно, к которому присоединено меню, получит сообщение WM_MEASUREITEM, на которое вы бы ответили, установив размеры, необходимые для меню. Именно здесь вы можете установить свою ширину.

Конечно, это означает, что вы должны создать подкласс обработчика сообщений Windows для окна, содержащего меню.

0 голосов
/ 11 ноября 2009

Прежде всего, попробуйте получить HWND в меню: (1) WM_DRAWITEM (2) получить HDC (3) WindowFromDC (), тогда вы можете произвольно настроить аспекты меню. ПРИМЕЧАНИЕ: не отправляйте WM_QUIT WM_CLOSE в меню, иначе вы фактически выключите свой компьютер без подсказки.

0 голосов
/ 06 февраля 2009

Это не имеет ничего общего с WM_MEASUREITEM

Просто используйте внутренние сообщения меню win32

(Win32 FAQ: новости: //comp.os.ms-windows.programmer.win32)

...