hwnd of a B+ menu

BlitzPlus Forums/BlitzPlus Programming/hwnd of a B+ menu

Cold Harbour(Posted 2005) [#1]
How do I get the hwnd of a Blitz+ menu?

I've tried
hwnd=GetMenu (QueryObject (win,1))

where:
win is the handle of my main window
GetMenu%(hwnd%):"GetMenu" in User32

GetMenu always returns zero.
Anyone know what I'm doing wrong? I'm trying to add bitmaps to my menus.


Kev(Posted 2005) [#2]
hi Cold Harbour.

try this, it works for me.

if you need the decls, and constants , let me now.

function to add bitmaps to your menus

Function AddBitmapMenuIcon(window,subindex,menuindex,bitmapfile$,width=16,height=16)

	; get hwnd handle to passed window.
	hwnd = QueryObject(window,1)
	
	; check if it has a parent.
	real_hwnd = apiGetParent(hwnd)
	If real_hwnd <> 0 Then
		hwnd = real_hwnd
	EndIf
	
	; get the windows menu and submenu.
	hMenu_pointer = apiGetMenu(hwnd) 
	hMenu_subitem_pointer = apiGetSubMenu(hMenu_pointer,subindex)
	
	; open bitmap image to use in the menu.
	loadiconimage = apiLoadImage(0,bitmapfile$,IMAGE_BITMAP,width,height,LR_LOADFROMFILE)
	
	; add the icon to the windows menu item.
	icon = apiSetMenuItemBitmaps(hMenu_subitem_pointer,menuindex,MF_BYPOSITION,loadiconimage,loadiconimage)
	
End Function


kev


Cold Harbour(Posted 2005) [#3]
Cheers Kev.
Can I see how you declared apiLoadImage please and also what you use as bitmapfile$.

Thanks again.


JoshK(Posted 2005) [#4]
Alternatively, you can use this code to retrieve the real window handle:
Function WindowHandle%(window)
Return PeekL(window+164)
End Function



JoshK(Posted 2005) [#5]
My icons make anything close to white transparent. I tried the LR_LOADTRANSPARENT (=32) flag, but it had no effect.

We also need a way to change the menuitem height, since the menus are too small to display a 16x16 icon.


Kev(Posted 2005) [#6]
@Cold Harbour

.lib "user32.dll"
apiLoadImage%(hinst%,lpszName$,uType%,cxDesired%,cyDesired%,fuLoad%):"LoadImageA"

bitmapfile$ is the name of the image file on disk to open.

@halo

try LR_DEFAULTSIZE im not sure yet about the LR_LOADTRANSPARENT flag, i look into it.


JoshK(Posted 2005) [#7]
LR_DEFAULTSIZE is a default flag. You don't need to enter a width and height.


Cold Harbour(Posted 2005) [#8]
Kev, damn, left the A off the end of :"LoadImageA".

Yay it works. Thanks for your help!


Kev(Posted 2005) [#9]
@halo
the MENUITEMINFO struct might be the way to change the menuitem height, using MFT_OWNERDRAW and WM_MEASUREITEM/WM_DRAWITEM messages but under blitz+ i not sure about hooking these messages.

@Cold Harbour
no problems, checkout api viewer.
http://www.activevb.de/rubriken/apiviewer/index-apiviewereng.html