2010-05-13 4 views
1

J'ai un formulaire parent, avec quelques fenêtres enfants (pas de formulaires - juste des fenêtres, par exemple des commandes d'étiquettes) à l'intérieur. Dans certaines circonstances, je souhaite que l'une de ces fenêtres enfants soit dessinée "au-dessus" des autres, pour afficher un message sur l'ensemble du formulaire principal.Comment puis-je faire une fenêtre enfant au sommet?

J'ai essayé de définir HWND_TOPMOST et HWND_TOP sur les fenêtres enfants, mais cela ne semble pas avoir d'effet du tout. Est-ce que je fais quelque chose de mal, ou est-ce que HWND_TOPMOST et HWND_TOP ne fonctionnent que sur des formulaires, par opposition aux contrôles dans les formulaires?

Merci.

Répondre

3

HWND_TOPMOST s'applique uniquement aux fenêtres de niveau supérieur, et non aux fenêtres enfants.

Utilisez SetWindowPos avec l'indicateur HWND_TOP pour modifier le zorder de la fenêtre enfant cible pour le placer en haut de la zorder parmi ses frères et sœurs.

Notez que zorder dans les fenêtres enfants s'applique uniquement aux frères et sœurs - hwnds avec le même parent.

1

J'ai rencontré ce problème lorsque je voulais placer un contrôle de barre de défilement au-dessus de toutes les fenêtres enfants.

Ma solution a été:

  1. Utilisez WS_CLIPSIBLINGS à toutes les fenêtres de l'enfant. Cela évite que les zones de chevauchement des fenêtres des frères et sœurs ne soient redessinées.
  2. Utilisez SetWindowPos avec HWND_TOP sur hWndInsertAfter pour le placer au-dessus des autres contrôles.
Questions connexes