views:

245

answers:

3

I'm creating a custom control in wxWidgets that displays a menu as part of it, and currently working on the Windows side of things. wxWidgets doesn't have a way of setting the width of a menu. It just makes the window as wide as the longest string plus a few pixels on either side.

In the API, there is a way to get the actual Windows API menu handle. Does the Windows API have a method of setting the width of a menu other than just calculating it on its own based on the width of the string?

+2  A: 

With the handle of the menu, you can cycle through the menu items and call SetMenuItemInfo, indicating that you want to owner-draw the menu items. When you do this, the window that the menu is attached to will receive the WM_MEASUREITEM message, which you would then respond to by setting the dimensions required for the menu. It is here you can set your width.

Of course, this means you have to subclass the windows message handler for the window that contains the menu.

casperOne
Sounds like I'm going to have fun with this tomorrow!
Grant Limberg
A: 

It has nothing to do with WM_MEASUREITEM

Just use internal win32 menu messages

(Win32 FAQ : news://comp.os.ms-windows.programmer.win32)

A little more info would be appreciated. I found the FAQ, however I'm not seeing anything useful on first glance.
Grant Limberg
A: 

First of all, try to obtain the HWND to the menu: (1) WM_DRAWITEM (2)get the HDC (3)WindowFromDC(), then you can arbitrarily adjust aspects of the menu. NOTE: don't send WM_QUIT WM_CLOSE to the menu, or you'll effectively shut down your computer with no clue.

6qing88