Code : Tout sélectionner
Global SFColor.l, SBColor.l,DFColor.l,DBColor.l ,Icons.l
Structure new_mm
hFont.l
Text.s
hIco.l
EndStructure
Global Dim menu.new_mm(13)
Procedure Menu_Owner(wnd, msg, wParam, lParam)
Select msg
Case #WM_MEASUREITEM
hdc = GetDC_(wnd)
*nmm.MEASUREITEMSTRUCT = lParam
*lnew_mm.new_mm = *nmm\itemData
GetTextExtentPoint32_(hdc,*lnew_mm\Text,Len(*lnew_mm\Text),@size.SIZE);
*nmm\itemWidth = size\cx + Icons
*nmm\itemHeight = size\cy
ReleaseDC_(wnd,hdc)
Case #WM_DRAWITEM
*nmd.DRAWITEMSTRUCT = lParam
*llnew_mm.new_mm = *nmd\itemData
If *nmd\itemState & #ODS_SELECTED
SetTextColor_(*nmd\hDC,SFColor)
SetBkColor_(*nmd\hDC,SBColor)
ExtTextOut_(*nmd\hDC,*nmd\rcItem\left + Icons,*nmd\rcItem\top,#ETO_OPAQUE,*nmd\rcItem,*llnew_mm\Text,Len(*llnew_mm\Text),0)
;DrawIconEx_(*nmd\hDC,*nmd\rcItem\left,*nmd\rcItem\top,*llnew_mm\hIco,14,14,0,0,3)
Else
SetTextColor_(*nmd\hDC,DFColor)
SetBkColor_(*nmd\hDC,DBColor)
ntx = *nmd\rcItem\left + Icons
nty = *nmd\rcItem\top
ExtTextOut_(*nmd\hDC,*nmd\rcItem\left + Icons,*nmd\rcItem\top,#ETO_OPAQUE,*nmd\rcItem,*llnew_mm\Text,Len(*llnew_mm\Text),0)
;DrawIconEx_(*nmd\hDC,*nmd\rcItem\left,*nmd\rcItem\top,*llnew_mm\hIco,14,14,0,0,3)
EndIf
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
Icons = 15 ;Can be 0
If OpenWindow(0, 0, 0,400,300, "PopupMenu Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
SetWindowColor(0,$000000)
mhnd = CreateMenu(0, WindowID(0))
MenuTitle("File")
MenuItem( 1, "")
MenuItem( 2, "")
MenuItem( 3, "")
MenuBar()
MenuItem( 4, "")
MenuTitle("Edition")
MenuItem(5, "")
MenuItem(6, "")
MenuItem(7, "")
menu(0)\Text = " Load"
menu(1)\Text = " Save"
menu(2)\Text = " Save As...."
menu(3)\Text = " Quit"
menu(4)\Text = " Cut"
menu(5)\Text = " Copy"
menu(6)\Text = " Paste"
;hMenu = GetMenu_(WindowID(0))
ModifyMenu_(MenuID(0),1,#MF_BYCOMMAND|#MF_OWNERDRAW,1,menu(0))
ModifyMenu_(MenuID(0),2,#MF_BYCOMMAND|#MF_OWNERDRAW,2,menu(1))
ModifyMenu_(MenuID(0),3,#MF_BYCOMMAND|#MF_OWNERDRAW,3,menu(2))
ModifyMenu_(MenuID(0),4,#MF_BYCOMMAND|#MF_OWNERDRAW,4,menu(3))
ModifyMenu_(MenuID(0),5,#MF_BYCOMMAND|#MF_OWNERDRAW,5,menu(4))
ModifyMenu_(MenuID(0),6,#MF_BYCOMMAND|#MF_OWNERDRAW,6,menu(5))
ModifyMenu_(MenuID(0),7,#MF_BYCOMMAND|#MF_OWNERDRAW,7,menu(6))
; GetWindowRect_(WindowID(0), wr.RECT)
; OpenWindow(1,wr\left+90 ,wr\top+25,314,20,"",#WS_POPUP,WindowID(0))
; SetWindowColor(1,$000000)
; SetActiveWindow(0)
;**********************************************************************************
hPMenu = CreatePopupMenu(1)
MenuItem(10, "")
MenuItem(11, "")
MenuItem(12, "")
MenuBar()
OpenSubMenu("")
MenuItem(13, "")
MenuItem(14, "")
CloseSubMenu()
MenuBar()
MenuItem( 15, "")
menu(7)\Text = " Cut"
menu(8)\Text = " Copy"
menu(9)\Text = " Paste"
menu(10)\Text = " Options"
menu(11)\Text = " Window..."
menu(12)\Text = " Gadget..."
menu(13)\Text = " Quit"
ModifyMenu_(hPMenu,10,#MF_BYCOMMAND|#MF_OWNERDRAW,10,menu(7))
ModifyMenu_(hPMenu,11,#MF_BYCOMMAND|#MF_OWNERDRAW,11,menu(8))
ModifyMenu_(hPMenu,12,#MF_BYCOMMAND|#MF_OWNERDRAW,12,menu(9))
ModifyMenu_(hPMenu,13,#MF_BYCOMMAND|#MF_OWNERDRAW,13,menu(11))
ModifyMenu_(hPMenu,14,#MF_BYCOMMAND|#MF_OWNERDRAW,14,menu(12))
ModifyMenu_(hPMenu,15,#MF_BYCOMMAND|#MF_OWNERDRAW,15,menu(13))
;SubMenu
ModifyMenu_(hPMenu,4,#MF_BYPOSITION|#MF_OWNERDRAW,0,menu(10))
DFColor = $FD0202
DBColor = $01FFFE
SFColor = $00FFFF
SBColor = $EAAB0D
SetWindowCallback(@Menu_Owner())
; Result = GetMenuItemCount_(MenuID(0))
; For i = 0 To Result - 1
; Debug GetMenuItemCount_(GetSubMenu_(MenuID(0),i))
; Next
; Debug GetMenuItemCount_(MenuID(1))
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
If EventGadget() = 0 And EventType() = #PB_EventType_RightClick
DisplayPopupMenu(1, WindowID(0))
EndIf
Case #WM_RBUTTONDOWN
DisplayPopupMenu(1, WindowID(0))
Case #PB_Event_Menu
Select EventMenu() ; To see which menu has been selected
Case 1 ; Load
MessageRequester("PureBasic", "Load", 0)
Case 10 ; Cut
MessageRequester("PureBasic", "Cut", 0)
Case 11 ; Copy
MessageRequester("PureBasic", "Copy", 0)
Case 12 ; Paste
MessageRequester("PureBasic", "Paste", 0)
Case 4,15 ; Quit
Quit = 1
EndSelect
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1
EndIf
End