I am using Visual Basic 6 (please don’t laugh), and I would like to dynamically position a control, at runtime, in a position based upon the position of one of the “top level” menu items (such as “File”, “Edit”, “View”).
Unfortunately, VB’s Menu control (which is the type of control that these “File”, “Edit”, etc. things are) does not have any properties like “Top”, “Left”, “Height”, or “Width”.
I could just experiment, eyeballing it, and eventually arrive at numbers that I’ll hardcode, but for various reasons I would prefer that the code actually figure out where the control should go.
I am thinking that perhaps there is some Windows API call that I can use to figure out the position of the Menu control?
Thanks in advance.
Edit: In case it matters, this is on an MDI form.
Edit #2:
OK, answering my own question:
You can get the position of each item on the main menu bar via the GetMenuBarInfo function, such as:
Dim mbi as MENUBARINFO
mbi.cbSize = LenB(mbi)
GetMenuBarInfo Me.hWnd, OBJID_MENU, lMenuNumber, mbi
Where “lMenuNumber” is 1 for the first (e.g. “File”), 2 for the second (e.g. “Edit”), etc.
That mbi struct has an rcBar member, which is the coordinates of the rectangle where that menu item is.
Unfortunately, it’s in absolute coordinates relative to the screen, not relative to the MDI form. So, get the mbi the one you’re interested in and of the first, and subtract.
Plus, the position as given in the mbi is in pixels, so convert as necessary to twips or whatever.
OK, answering my own question:
You can get the position of each item on the main menu bar via the GetMenuBarInfo function, such as:
Where “lMenuNumber” is 1 for the first (e.g. “File”), 2 for the second (e.g. “Edit”), etc.
That mbi struct has an rcBar member, which is the coordinates of the rectangle where that menu item is.
Unfortunately, it’s in absolute coordinates relative to the screen, not relative to the MDI form. So, get the mbi the one you’re interested in and of the first, and subtract.
Plus, the position as given in the mbi is in pixels, so convert as necessary to twips or whatever.