Just to refresh my mind

The title say it all
DPI aware
Code: Select all
Global dpix.d,dpiy.d,itemy
dpix = DesktopResolutionX()
dpiy = DesktopResolutionY()
UsePNGImageDecoder()
Procedure IsMouseOver(hWnd)
GetWindowRect_(hWnd,r.RECT)
GetCursorPos_(p.POINT)
Result = PtInRect_(r,p\y << 32 + p\x)
ProcedureReturn Result
EndProcedure
Procedure winCB(hWnd,uMsg,wParam,lParam)
Select uMsg
Case #WM_ENTERIDLE
GetCursorPos_(cpt.POINT)
hHnd = WindowFromPoint_(cpt\y<<32 + cpt\x)
If hHnd = hwnd Or hHnd = GadgetID(0)
SendMessage_(hwnd, #WM_CANCELMODE,0,0)
EndIf
Case #WM_SIZE,#WM_MOVE
ResizeGadget(0,0,0,WindowWidth(0),GadgetHeight(0))
ResizeGadget(10,GadgetWidth(0)-58, 4, 54, itemy)
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
OpenWindow(0, 0, 0, 600, 400, "Custom Menu", #PB_Window_SystemMenu | #PB_Window_SizeGadget |#PB_Window_ScreenCentered)
WindowBounds(0,300,200,#PB_Default,#PB_Default)
ContainerGadget(0,0,0,600,36,#PB_Container_Flat)
itemy = GadgetHeight(0)-6
SetGadgetColor(0,#PB_Gadget_BackColor,0)
TextGadget(1, 2, 2, 34, itemy,"File",#WS_BORDER|#SS_CENTER|#SS_CENTERIMAGE|#SS_NOTIFY)
SetGadgetColor(1,#PB_Gadget_BackColor,$3D3D3D)
SetGadgetColor(1,#PB_Gadget_FrontColor,$FFFFFF)
TextGadget(2, 42, 2, 60, itemy,"Image",#WS_BORDER|#SS_CENTER|#SS_CENTERIMAGE|#SS_NOTIFY)
SetGadgetColor(2,#PB_Gadget_BackColor,$3D3D3D)
SetGadgetColor(2,#PB_Gadget_FrontColor,$FFFFFF)
TextGadget(10, GadgetWidth(0)-58, 2, 54, itemy,"Help",#WS_BORDER|#SS_CENTER|#SS_CENTERIMAGE|#SS_NOTIFY)
SetGadgetColor(10,#PB_Gadget_BackColor,$3D3D3D)
SetGadgetColor(10,#PB_Gadget_FrontColor,$FFFFFF)
CloseGadgetList()
CreatePopupImageMenu(0)
MenuItem( 1, "New",LoadImage(10, #PB_Compiler_Home + "examples/sources/Data/ToolBar/New.png"))
MenuItem( 2, "Open",LoadImage(11, #PB_Compiler_Home + "examples/sources/Data/ToolBar/Open.png"))
MenuItem( 3, "Save",LoadImage(12, #PB_Compiler_Home + "examples/sources/Data/ToolBar/Save.png"))
MenuBar()
OpenSubMenu("Recents")
MenuItem( 5, "Pure.png")
MenuItem( 6, "Basic.jpg")
OpenSubMenu("Even more !")
MenuItem( 12, "Yeah")
CloseSubMenu()
MenuItem( 13, "Rocks.tga")
CloseSubMenu()
MenuBar()
MenuItem( 7, "&Quit")
CreatePopupImageMenu(1)
MenuItem( 8, "Cut",LoadImage(13, #PB_Compiler_Home + "examples/sources/Data/ToolBar/Cut.png"))
MenuItem( 9, "Copy",LoadImage(14, #PB_Compiler_Home + "examples/sources/Data/ToolBar/Copy.png"))
MenuItem(10, "Paste",LoadImage(15, #PB_Compiler_Home + "examples/sources/Data/ToolBar/Paste.png"))
CreatePopupImageMenu(10)
MenuItem(11, "Contents and Index",LoadImage(16, #PB_Compiler_Home + "examples/sources/Data/ToolBar/Find.png"))
MenuItem(12, "About")
SetWindowCallback(@winCB())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Menu
Select EventMenu()
Case EventMenu()
Debug EventMenu()
downflag = 0
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case 1
DisplayPopupMenu(0, WindowID(0), GadgetX(1,#PB_Gadget_ScreenCoordinate )*dpix,yy)
downflag = 1
Case 2
DisplayPopupMenu(1, WindowID(0), GadgetX(2,#PB_Gadget_ScreenCoordinate )*dpix,yy)
downflag = 1
Case 10
DisplayPopupMenu(10, WindowID(0), GadgetX(10,#PB_Gadget_ScreenCoordinate )*dpix-200*dpix,yy)
downflag = 1
EndSelect
Case #WM_MOUSEMOVE
yy = (GadgetY(0,#PB_Gadget_ScreenCoordinate )+GadgetHeight(0)-3)*dpiy
If downflag = 1
If IsMouseOver(GadgetID(1))
DisplayPopupMenu(0, WindowID(0), GadgetX(1,#PB_Gadget_ScreenCoordinate )*dpix,yy)
ElseIf IsMouseOver(GadgetID(2))
DisplayPopupMenu(1, WindowID(0), GadgetX(2,#PB_Gadget_ScreenCoordinate )*dpix,yy)
ElseIf IsMouseOver(GadgetID(10))
DisplayPopupMenu(10, WindowID(0), GadgetX(10,#PB_Gadget_ScreenCoordinate )*dpix-200*dpix,yy)
EndIf
EndIf
EndSelect
Until Quit = 1
Edit 2 :Modified
Edit 3 :Modified