Page 1 of 1
Menu coloring using SetMenuInfo_ () not working with 64 Bit?
Posted: Thu Dec 04, 2014 12:00 am
by es_91
What the heck is this? Yeah, I know it's a formal way to start a thread but I'm a bit p****d with the things right now.
This is a nice code showing how to color your menu bar. I used snippets from it several times, but I never noticed that it refuses delivery when compiling in 64 Bit.
It's the same with
this code.
The system is Windows Vista SP2 64 Bit. The
PureBasic version is 5.31.
As I said, it runs a yellow menu in 32 Bit, it runs a standard grey menu (and a #Null return from
SetMenuInfo_ ()) in 64 Bit.
(Turning the structure members into
Integer won't do the trick.)
Have I ignored an important information? Or, what else could it be? What do you think about this? Does the linked code work for you?
Re: Menu coloring using SetMenuInfo_ () not working with 64
Posted: Thu Dec 04, 2014 12:16 am
by bbanelli
es_91 wrote:What the heck is this? Yeah, I know it's a formal way to start a thread but I'm a bit p****d with the things right now.
This is a nice code showing how to color your menu bar. I used snippets from it several times, but I never noticed that it refuses delivery when compiling in 64 Bit.
It's the same with
this code.
The system is Windows Vista SP2 64 Bit. The
PureBasic version is 5.31.
As I said, it runs a yellow menu in 32 Bit, it runs a standard grey menu (and a #Null return from
SetMenuInfo_ ()) in 64 Bit.
(Turning the structure members into
Integer won't do the trick.)
Have I ignored an important information? Or, what else could it be? What do you think about this? Does the linked code work for you?
Code: Select all
Structure myMENUINFO
cbSize.l
fMask.l
dwStyle.l
cyMax.l
hbrBack.l
dwContextHelpId.l
dwMenuData.l
CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
PB_Alignment2.b[12]
CompilerEndIf
EndStructure
http://www.forums.purebasic.com/english ... e0#p437628
Alternatively, just change this
into
Re: Menu coloring using SetMenuInfo_ () not working with 64
Posted: Thu Dec 04, 2014 12:30 am
by luis
The menu bar or the menu items ?
The first code does nothing here, using PB 5.31 x86 on Win7 x64.
On the other hand adding #MIM_APPLYTOSUBMENUS
Code: Select all
\fMask = #MIM_BACKGROUND | #MIM_APPLYTOSUBMENUS
changes the background color of the menu items to yellow.
Still doesn't work on x64 though.
I don't think it's a terrific idea to change the bg color of a menu, not knowing what the foreground color is.
Well, I don't think it's a nice idea to change any color (OS themes are there for a good reason and you can piss off the user doing so), *unless* you owner draw all (maybe skinning your program entirely).
To make it work on x86 and x64 I've changed it as follow:
Code: Select all
#MIM_BACKGROUND = 2
#MIM_APPLYTOSUBMENUS = $80000000 ; added
Structure myMENUINFO Align #PB_Structure_AlignC ; added
cbSize.l
fMask.l
dwStyle.l
cyMax.l
hbrBack.i ; changed to HBRUSH, handle size -> pointer size
dwContextHelpId.l
*dwMenuData ; changed to ULONG_PTR -> http://msdn.microsoft.com/en-us/library/windows/desktop/aa384255%28v=vs.85%29.aspx
EndStructure
Debug SizeOf(myMENUINFO)
hMenuBrushBG = CreateSolidBrush_(RGB(255,255,0))
With mi.myMENUINFO
\cbSize = SizeOf(myMENUINFO)
\fMask = #MIM_BACKGROUND | #MIM_APPLYTOSUBMENUS ; added
\hbrBack = hMenuBrushBG
EndWith
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If CreateMenu(0, WindowID(0))
MenuTitle("Menü 1")
MenuItem(1,"Item 1")
MenuTitle("Menü 2")
MenuItem(2,"Item 2")
EndIf
Debug SetMenuInfo_(MenuID(0), mi)
DrawMenuBar_(WindowID(0))
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_Event_CloseWindow
DeleteObject_(hMenuBrushBG)
Quit=1
EndIf
Until Quit=1
EndIf
references:
MENUINFO
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Windows data types
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Re: Menu coloring using SetMenuInfo_ () not working with 64
Posted: Thu Dec 04, 2014 12:57 am
by es_91
Luis' code works absolutely fine. Thanks for doing some research, luis!
And bbanelli thank you for the try and for giving me a link to a fine RASHAD code!
Re: Menu coloring using SetMenuInfo_ () not working with 64
Posted: Fri Dec 05, 2014 2:28 am
by leodh
Hi guys
How could this be done with popup menus ?
Leo
Re: Menu coloring using SetMenuInfo_ () not working with 64
Posted: Fri Dec 05, 2014 10:43 am
by chi
How could this be done with popup menus ?
same same but (a little bit) different
Code: Select all
#MIM_BACKGROUND = 2
#MIM_APPLYTOSUBMENUS = $80000000 ; added
Structure myMENUINFO Align #PB_Structure_AlignC ; added
cbSize.l
fMask.l
dwStyle.l
cyMax.l
hbrBack.i ; changed to HBRUSH, handle size -> pointer size
dwContextHelpId.l
*dwMenuData ; changed to ULONG_PTR -> http://msdn.microsoft.com/en-us/library/windows/desktop/aa384255%28v=vs.85%29.aspx
EndStructure
Debug SizeOf(myMENUINFO)
hMenuBrushBG = CreateSolidBrush_(RGB(255,255,0))
With mi.myMENUINFO
\cbSize = SizeOf(myMENUINFO)
\fMask = #MIM_BACKGROUND | #MIM_APPLYTOSUBMENUS ; added
\hbrBack = hMenuBrushBG
EndWith
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If CreatePopupMenu(0) ;changed
MenuTitle("Menü 1")
MenuItem(1,"Item 1")
MenuTitle("Menü 2")
MenuItem(2,"Item 2")
EndIf
Debug SetMenuInfo_(MenuID(0), mi)
DrawMenuBar_(WindowID(0))
Repeat
EventID=WaitWindowEvent()
If EventID = #PB_Event_RightClick ;changed
DisplayPopupMenu(0, WindowID(0))
EndIf
If EventID=#PB_Event_CloseWindow
DeleteObject_(hMenuBrushBG)
Quit=1
EndIf
Until Quit=1
EndIf