(que si j'ai la réponse c'est cool =)
Comment connaître (voir même modifier) la police (taille, style et couleur compris) d'un menu sous windows ?
passons au sujet que je voulais lancer ^^
j'ai essayé de comprendre comment fonctionnaient les menus sous windows pour me coder des fonctions supplémentaires et j'ai bloqué sur différents points:
Il m'a fallu du temps avant de comprendre que MenuTitle() ne servait strictement à rien.
Voila un exemple:
Code : Tout sélectionner
If OpenWindow(0, 200, 200, 220, 100, #PB_Window_SystemMenu, "SubMenu Example")
If CreateMenu(0, WindowID())
OpenSubMenu("Project")
MenuItem(1, "Open")
MenuItem(2, "Close")
MenuBar()
OpenSubMenu("Recent files")
MenuItem( 3, "C:\Autoexec.bat")
MenuItem( 4, "D:\Test.txt")
CloseSubMenu()
CloseSubMenu()
MenuItem(5, "Not a MenuTitle")
OpenSubMenu("Help")
MenuItem(6, "About")
CloseSubMenu()
EndIf
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Menu
Debug EventMenuID()
EndIf
Until Event = #PB_Event_CloseWindow
EndIfJ'ai même pu mettre un MenuItem dans la barre de menu alors que je ne pensais pas ca possible. J'étais persuadé qu'on n'utilisait que MenuTitle() dans la barre de menu... C'est un exemple sur les PopupMenu qui m'a fait tilté, dans le Popup MenuTitle() crée un sous menu.
Le PureBasic se veut simple, mais je trouve que MenuTitle() complique les choses, apres la question est de savoir si ceux sont les autres OS qui créent le besoin d'avoir cette fonction... Votre avis là-dessus ?
MenuID() maintenant...
Cette fonction renvoit l'identifiant du menu en cours, mais je n'ai pas de fonction pour connaitre le menu en cours (pas de UseMenu() ?)
En plus MenuID ne permet pas de préciser de numéro de menu, pourtant ce serait très pratique...
z'en pensez quoi ?
Bon apres y'a toutes les fonctions que j'aimerais avoir en natif que j'ai pu coder une fois que j'avais zapé le probleme des MenuTitle()
Code : Tout sélectionner
Procedure.l GetMenuItemCount(MenuID.l)
ProcedureReturn GetMenuItemCount_(MenuID)
EndProcedure
Procedure.l IsMenuID(MenuID.l)
Protected IsMenuID
If GetMenuItemCount(MenuID) <> #Menu_Error
IsMenuID = #True
EndIf
ProcedureReturn IsMenuID
EndProcedure
Procedure.l IsMenuItem(MenuID.l, Position.l)
ProcedureReturn GetMenuItemID_(MenuID, Position)
EndProcedure
Procedure.l IsSubMenu(MenuID.l, Position.l)
ProcedureReturn GetSubMenu_(MenuID, Position)
EndProcedure
Procedure.l IsMenuBar(MenuID.l, Position.l)
Protected IsMenuBar
If IsMenuID(MenuID)
If IsMenuItem(MenuID, Position) = #Menu_Error And IsSubMenu(MenuID, Position) = #False
IsMenuBar = #True
EndIf
EndIf
ProcedureReturn IsMenuBar
EndProcedure
Procedure.s GetMenuText(MenuID.l, MenuItem.l, ByPosition.l)
Protected String.s, MenuItemInfo.MenuItemInfo
String = Space($FF)
MenuItemInfo\cbSize = SizeOf(MenuItemInfo)
MenuItemInfo\fMask = #MIIM_TYPE
MenuItemInfo\fType = #MFT_STRING
MenuItemInfo\dwTypeData = @String
MenuItemInfo\cch = $FF
If GetMenuItemInfo_(MenuID, MenuItem, ByPosition, MenuItemInfo) = #False
String = #NULL$
EndIf
ProcedureReturn String
EndProcedure
Procedure.l SetMenuText(MenuID.l, MenuItem.l, ByPosition.l, String.s)
Protected MenuItemInfo.MenuItemInfo
MenuItemInfo\cbSize = SizeOf(MenuItemInfo)
MenuItemInfo\fMask = #MIIM_TYPE
MenuItemInfo\fType = #MFT_STRING
MenuItemInfo\dwTypeData = @String
MenuItemInfo\cch = Len(String)
ProcedureReturn SetMenuItemInfo_(MenuID, MenuItem, ByPosition, MenuItemInfo)
EndProcedure