Le plus simple est sans doute de définir le style de la fenêtre des formulaires ControlBox = False
et MinimizeBox = False
puis appelez SHDoneButton dans la peinture de la forme gestionnaire d'événement et quand il est activé ou montré. Vous êtes vraiment supposé avoir besoin de le faire avant que le formulaire ne devienne la fenêtre de premier plan, mais j'ai trouvé que vous devez également l'appeler dans le gestionnaire d'événements Paint. Alors SHDoneButton(this.handle, SHDB_SHOW)
où SHDB_SHOW = 0x0001
vous aurez besoin:
[DllImport("aygshell.dll")]
public static extern bool SHDoneButton(IntPtr hWnd, UInt32 dwState);
quelque part aussi bien.
par la documentation liée:
En règle générale, le bouton Terminé est géré par le shell, et afficher ou masquer le bouton OK se fait automatiquement. Une fenêtre de niveau supérieur qui nécessite l'affichage du bouton Terminé doit utiliser le style de fenêtre WS_EX_CAPTIONOKBTN.
Pour que le bouton OK s'affiche, assurez-vous que votre fenêtre ne possède pas les styles WS_CAPTION ou WS_CHILD.
Chaque fois que la fenêtre de premier plan change, le shell vérifie les bits de style de la fenêtre pour déterminer si le bouton OK doit apparaître dans la barre des tâches. Le bouton OK est prioritaire sur une barre de menu ajoutée à la barre des tâches.
Cela a été très utile, merci. J'ai trouvé des résultats différents en ce qui concerne l'événement de peinture. Si je l'ai ajouté dans le gestionnaire de peinture, l'application semblerait coincer dans une boucle lors de l'affichage comme si l'appel déclenchait une autre peinture, ce qui provoquait un autre appel, etc. L'ajout de l'appel dans l'événement de chargement de formulaires fonctionnait comme un charme sur les deux plates-formes. – ZippyBurger