Я использую Visual Basic 6 (пожалуйста, не смейтесь), и я хотел бы динамически позиционировать элемент управления во время выполнения в позиции, основанной на позиции одного из пунктов меню «верхнего уровня» (например, «Файл» , «Редактировать», «Просмотреть»).
К сожалению, элемент управления меню VB (который является типом элемента управления, которым являются эти «Файл», «Редактировать» и т. Д.) Не имеет никаких свойств, таких как «Верх», «Слева», «Высота» или «Ширина».
Я мог бы просто поэкспериментировать, взглянув на него и, в конце концов, прийти к числам, которые я жестко запрограммировал бы, но по разным причинам я бы предпочел, чтобы код действительно определял, куда должен идти элемент управления.
Я думаю, что, возможно, есть какой-то вызов API Windows, который я могу использовать, чтобы выяснить положение элемента управления «Меню»?
Заранее спасибо.
Редактировать. Если это имеет значение, это форма MDI.
Изменить №2:
Хорошо, отвечая на мой собственный вопрос:
Вы можете получить положение каждого элемента в строке главного меню с помощью функции GetMenuBarInfo, например:
Dim mbi as MENUBARINFO
mbi.cbSize = LenB(mbi)
GetMenuBarInfo Me.hWnd, OBJID_MENU, lMenuNumber, mbi
Где «lMenuNumber» равно 1 для первого (например, «Файл»), 2 для второго (например, «Редактировать») и т. д.
Эта структура mbi имеет член rcBar, который представляет собой координаты прямоугольника, в котором находится этот пункт меню.
К сожалению, это в абсолютных координатах относительно экрана, а не относительно формы MDI. Итак, получите mbi тот, который вас интересует и из первого, и вычтите.
Кроме того, позиция, указанная в mbi, указывается в пикселях, поэтому при необходимости конвертируйте в твипы или что-то еще.