2009-10-16 2 views

Répondre

3

Si vous êtes satisfait de P/Invoke, la fonction EnumWindows énumère toutes les fenêtres de niveau supérieur donnant un HWND; à partir de cela, vous pouvez obtenir le rectangle non-client (GetWindowRect) à comparer avec les limites de votre formulaire. Cela ne tient pas compte des fenêtres avec des zones opaques non rectangulaires (peaux fantaisie pour les lecteurs multimédias et autres), de sorte que vous pouvez obtenir des faux positifs pour une telle fenêtre en masquant votre contrôle.

+0

Je pense que cela fonctionnera ... – NotDan

0

Dans l'API Win32, vous pouvez utiliser WindowFromPoint pour déterminer la fenêtre la plus élevée à un point donné. Cela ne vous dira pas si tout votre contrôle est visible, mais si vous testez les 4 coins, cela vous donnera de bonnes chances.

+0

En fait, j'ai besoin de savoir exactement ce qui est visible, donc si la moitié de mon contrôle est visible, je dois le savoir exactement. – NotDan

0

Pourquoi voulez-vous cette information? Généralement, lorsque les gens posent cette question, c'est parce qu'ils veulent s'assurer que leur interface utilisateur est au premier plan si ce n'est pas le cas. Et c'est généralement ce qui se passe juste avant qu'ils n'essaient de détourner l'attention de l'application. a le premier plan.

Et le vol de premier plan est très, très, très mauvais. Les gens sont vraiment vexés lorsque les applications volent la vedette. Cela dit, l'une ou l'autre des deux techniques ci-dessus fonctionnerait - je pense que je préférerais la technique EnumWindows/GetWindowRect/IntersectRect dans la réponse de Steve Gilham.

Questions connexes