Question

En regardant une fenêtre surgissante de classe tooltips Windows, je vois qu'il tire son ombre portée extérieur rectangle réelle de la fenêtre surgissante.

Utilisation SpyXX - je peux obtenir le rect de la fenêtre de l'info-bulle et styles de classe:

Rectangle:     (440, 229)-(544, 249), 104x20
Restored Rect: (440, 229)-(544, 249), 104x20
Client Rect:   (0, 0)-(104, 20), 104x20

Vous remarquerez que l'ombre que vous voyez est physiquement à l'extérieur la fenêtre qui est en cours d'élaboration. Comment puis-je dessiner une ombre à l'extérieur autour de ma fenêtre, tout en étant en dehors ma fenêtre?

Remarque : Rediriger GDI, DirectX et WPF :

  

Dessin et lecture A partir de l'écran   - baaaad

     

Enfin, puisque nous sommes sur la redirection   sujet, un particulièrement dangereux   la pratique est en train d'écrire à l'écran,   soit par l'utilisation de GetDC (NULL)   et écrit à cela, ou de tenter de   faire lignes de bande en caoutchouc XOR, etc. Il   sont deux grandes raisons pour que l'écriture à   l'écran est mauvais:

     

Il est cher ... écrit au   l'écran lui-même est pas cher, mais il   est presque toujours accompagné   la lecture de l'écran parce qu'un   ne généralement de lecture-modification-écriture   opérations comme XOR lors de l'écriture   l'écran. La lecture de la vidéo   surface de mémoire est très cher,   requiert la synchronisation avec le DWM,   et des stands l'ensemble de tube de GPU, comme   ainsi que la conduite d'application DWM.
  Il est imprévisible ... si vous en quelque sorte   parviennent à se rendre à la première réelle   et écrire, il n'y a pas   prévisibilité quant à combien de temps ce que vous   écrit au primaire restera sur   écran. Étant donné que le UCE ne sait pas   à ce sujet, il peut être effacé dans le   image suivante rafraîchissement, ou il peut persister   pour un temps très long, selon   ce qu'il reste à être mis à jour sur la   écran. (Nous ne permettons pas vraiment directe   écrit au primaire de toute façon, pour   cette raison ... si vous essayez de   accéder au primaire DirectDraw, pour   par exemple, le DWM s'éteint jusqu'à ce que   l'application se ferme à l'accès)

Était-ce utile?

La solution

Vous ne pouvez pas tirer en dehors de votre fenêtre de la manière que vous décrivez.

Si vous cliquez droit sur votre bureau puis aller à des propriétés / apparence / effets et décochez « Afficher des ombres sous les menus » ... vous n'aurez plus l'ombre.

Bottom line est que c'est un produit du gestionnaire de fenêtres pas votre programme.

Autres conseils

Q: Comment tirez-vous à l'extérieur d'une fenêtre? A: Dessiner l'intérieur une autre fenêtre

La première chose à noter est que la classe infobulle fait Finalité utiliser le style CS_DROPSHADOW - mais notez que c'est un class de style, pas une fenêtre style, donc vous devez regarder le classe onglet dans les propriétés Spy ++ dialogue pour le trouver. Vous verrez que les fenêtres de tooltips_class32 a bel et bien cela -. Et quelques autres

Mais cela conduit simplement à la question suivante - comment est que travail? Eh bien, il semble que Windows implémente en créant une aide HWND pour dessiner l'ombre - on peut supposer qu'il est la création d'une autre fenêtre de la même taille et la forme que celui qu'il est shadowing, de le remplir avec le gris, le plaçant directement sous la fenêtre principale, et le réglage comme une fenêtre de WS_EX_LAYERED de telle sorte que l'ombre peut être transparent et disparaître autour des bords à l'aide d'alpha-mélange. Et il n'y a rien pour vous empêcher d'utiliser les mêmes ou vous-même des techniques similaires si vous voulez ajouter un autre type d'effet d'ombre à un de vos propres fenêtres.

Alors, histoire courte: si vous voulez dessiner en dehors de votre propre fenêtre, créez une fenêtre transparente d'aide dans la zone générale que vous voulez dessiner, et tirer parti de cette fenêtre d'aide à la place .

-

Maintenant, si vous essayez de trouver une de ces fenêtres d'ombre d'aide dans Spy ++, vous ne trouverez pas beaucoup. Contrairement aux fenêtres tooltip_class32, qui sont de longue durée et que cachent / se montrent au besoin, ces fenêtres d'ombre sont une créature plus insaisissable: ils ne sont créés pour aussi longtemps que nécessaire, de sorte que vous auriez à rafraîchir Spy ++ alors qu'il ya une info-bulle ou le menu contextuel ou une autre fenêtre en utilisant l'ombre actuelle - et c'est difficile, puisque la plupart des infobulles et menus disparaîtront dès que vous déplacez la souris pour passer à Spy ++. Mais il se trouve que les infobulles sur la barre d'outils propre de Spy ++ colleront autour de: Spy ++ afin de commencer, passer la souris sur un élément dans la barre d'outils et cliquez sur F5 pour rafraîchir l'arbre HWND tandis que l'info-bulle et l'ombre sont présents. Maintenant, faites défiler vers le bas, et vous devriez voir les troisième et quatrième HWNDs visibles dans l'arbre sont l'info-bulle elle-même, et juste après, une fenêtre SysShadow. Malheureusement, étant donné que l'info-bulle et l'ombre ont maintenant disparu, si vous essayez d'obtenir les propriétés de dialogue pour ce HWND, vous obtiendrez une obtenir une boîte de dialogue de propriété vide avec le message d'un "non valide fenêtre. Si vous voulez vraiment fouiller et voir comment cela SysShadow fonctionne, quels styles utilise elle-même et ainsi de suite, vous pouvez créer une application cible avec un pop-up à long terme qui utilise CS_DROPSHADOW que vous pouvez explorer Spy ++ à loisir.

(Enfin, notez que ces ombres sont une chose complètement différente que les ombres que vous voyez quand une fenêtre d'application est au-dessus d'une autre au-dessus de l'autre depuis Vista: ce type d'ombre fait partie du mode Aero Glass, et géré par la même Gestionnaire de bureau Composition qui ajoute l'effet de verre titlebar, et il n'a pas besoin d'utiliser ou de fenêtres d'aide pour mettre en œuvre les ombres.)

Je ne serais pas surpris si cette ombre est intimement liée au gestionnaire de fenêtres; il est après tout le gestionnaire de fenêtres qui décide ce fenêtre arrive à peindre qui parties de lui-même et lorsque il peut le faire. Je ne vois pas comme la science des fusées pour peindre cette ombre si le contrôle de tout ce qui est gagné, que le gestionnaire de fenêtres a.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top