dans les fenêtres, comment peut faire une fenêtre 'enfant au-delà de la fenêtre parent, et la fenêtre parent toujours en état actif (GetActiveWindow() mère de retour), tout comme la fenêtre déroulante combobox.La fenêtre déroulante de combobox peut apparaître au-delà de la fenêtre de liste déroulante, comment?
Répondre
Je pense que ce sont les principaux points en essayant de le faire:
Le pop-up est une fenêtre de niveau supérieur qui a le même parent que le contrôle. (Ie la pop-up est pas un enfant du contrôle Ce n'est pas un enfant de fenêtre du tout. C'est une fenêtre de niveau supérieur, mais sans bordure de fenêtre épaisse, etc. il ne ressemble pas à une top- normale fenêtre de niveau.) C'est pourquoi il peut s'étendre en dehors des limites du contrôle. Lorsque la fenêtre contextuelle est créée, elle est affichée à l'aide de ShowWindow (hWndPopup, SW_SHOWNA) de sorte qu'elle ne prenne pas le focus d'entrée. Cela empêche la fenêtre parente de devenir inactive.
Lorsque le pop-up est créé, vous capturer la souris à l'aide SetCapture. Vous suivez ensuite l'emplacement de la souris et mettez en surbrillance les éléments dans la fenêtre contextuelle lorsque la souris les chevauche. Lorsque vous cliquez sur le bouton de la souris, vous agissez sur tout ce qui se trouve sous la souris (ou annulez le pop-up si la souris n'est pas dessus du tout). N'oubliez pas de répondre à WM_CAPTURECHANGED, au cas où quelque chose d'autre capture la souris. Et souvenez-vous de ReleaseCapture lorsque vous avez terminé.
Le popup doit gérer WM_MOUSEACTIVATE en retournant MA_NOACTIVATEANDEAT.
mais la fenêtre déroulante peut afficher au-delà de tous les parents. Si vous jetez un coup d'oeil sur word2010, la fenêtre contextuelle peut contenir des modifications et d'autres contrôles. non seulement laisser l'utilisateur "cliquer". – lovespring
Parce que le menu déroulant est une fenêtre de niveau supérieur, il est pas lié par les bords du parent. C'est comme une fenêtre de boîte de message, sauf qu'elle n'a pas de bordure épaisse. Si vous voulez des contrôles dans la fenêtre contextuelle, les choses deviennent complexes, sauf si vous êtes prêt à laisser la fenêtre pop-up prendre le focus (et désactiver la fenêtre principale); pour éviter que vous deviez traiter tous les mouvements de la souris et cliquiez vous-même et dites aux contrôles ce qu'il faut faire (ou dessinez les contrôles vous-même en fonction de ce que fait la souris). Au moins, c'est la seule façon que je sais de le faire. OMI, en le laissant se concentrer est d'accord s'il y a des contrôles dedans. –
, nous pouvons rendre le contrôle en elle prendre le focus et le message du clavier recv, mais la fenêtre contenant encore dans l'état INACTIF? – lovespring