Я использую Visual Basic 6 (пожалуйста, не смейтесь), и я хотел бы динамически позиционировать элемент управления во время выполнения в положение, основанное на положении одного из пунктов меню «верхнего уровня» (например, "Файл", "Редактировать", "Просмотр").
К сожалению, элемент управления VB's Menu (который представляет собой тип элемента управления «File», «Edit» и т. Д.) Не имеет таких свойств, как «Top», «Left», «Height» или « Ширина».
Я мог бы просто поэкспериментировать, взглянув на это, и в итоге получить числа, которые я жестко закодирую, но по разным причинам я бы предпочел, чтобы код действительно выяснил, куда должен идти элемент управления.
Я думаю, что, возможно, есть какой-то вызов Windows API, который я могу использовать, чтобы выяснить положение элемента управления Menu?
Заранее спасибо.
Редактировать: Если это имеет значение, это в форме 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, указана в пикселях, поэтому при необходимости конвертируйте в твипы или что-то еще.