Je veux ajouter de la vieillesse Sur l'élément de menu pour mon application. Je veux l'ajouter au système de menu de l'application (celui qui apparaît quand on clique sur l'icône de l'application dans le coin en haut à gauche). Alors, comment puis-je le faire dans .NET?
Windows, il est assez facile d'obtenir un handle vers une copie du formulaire du menu système pour la personnalisation des buts avec
GetSystemMenu
function. La partie difficile est que vous êtes sur votre propre pour effectuer les modifications appropriées dans le menu il renvoie, à l'aide de fonctions telles queAppendMenu
,InsertMenu
, etDeleteMenu
comme vous le feriez si vous étiez de la programmation directement à l'encontre de l'API Win32.Cependant, si tout ce que vous voulez faire est d'ajouter un simple élément de menu, il est vraiment pas si difficile. Par exemple, vous n'aurez qu'à utiliser le
AppendMenu
fonction parce que tout ce que vous voulez faire est d'ajouter un élément ou deux à la fin du menu. Faire quelque chose de plus avancé (comme l'insertion d'un élément dans le milieu du menu, l'affichage d'une image bitmap sur l'élément de menu, affichage des éléments de menu cochée, la fixation d'un élément de menu par défaut, etc.) nécessite un peu plus de travail. Mais une fois que vous savez comment c'est fait, vous pouvez aller sauvages. Le la documentation sur le menu des fonctions liées à l' raconte tout.Voici le code complet pour un formulaire qui ajoute une ligne de séparation et un "à Propos" élément vers le bas de son menu système (également appelé une fenêtre de menu):
Et voici ce que le produit fini ressemble à:
About
entrée. J'ai essayé plusieursMenuItemInfo
s'struct propriétés (dwItemData
,fMask
,hbmpItem
) tout au long de la journée, mais je obtenir soit pas d'ajout de l'élément ou de l'une sans une icône. 🙁hbmpItem
champ deMENUITEMINFO
. Sur Vista et les versions ultérieures, vous pouvez spécifier un PARGB32 bitmap pour obtenir un beau mélange alpha icône. Dans l'avenir, lorsque vous avez une nouvelle question, veuillez poser une nouvelle question au lieu de poster un commentaire. Vous obtiendrez un tas de meilleure réponse.J'ai pris Cody Gris de la solution d'un pas, et fait une classe réutilisable hors de lui. C'est une partie de mon journal d'application soumettre outil qui doit cacher son Sujet d'info dans le menu système.
https://github.com/ygoe/FieldLog/blob/master/LogSubmit/Unclassified/UI/SystemMenu.cs
Il peut facilement être utilisée comme ceci:
La valeur ajoutée est plutôt petit pour la quantité de pinvoke vous aurez besoin. Mais c'est possible. Utilisation GetSystemMenu() pour récupérer le système de menu de la poignée. Puis InsertMenuItem pour ajouter une entrée. Vous devez faire cela en une substitution de OnHandleCreated() afin de recréer le menu de la fenêtre soit recréé.
Remplacer WndProc() pour reconnaître le message WM_SYSCOMMAND qui est généré lorsque l'utilisateur clique dessus. Visite pinvoke.net pour les déclarations pinvoke vous aurez besoin.
Je sais que cette réponse est vieux, mais j'ai vraiment aimé LonelyPixel de réponse. Cependant, il avait besoin de quelques travaux pour fonctionner correctement avec WPF. Ci-dessous est un WPF version que j'ai écrit, afin que vous ne devez pas :).
VB.NET version acceptée réponse: