2010-02-25 2 views
3

J'ai un contrôle ActiveX qui est placé dans un conteneur de navigateur IE. Le contrôle crée une autre boîte de dialogue dont les propriétés WS_POPUP et WS_LAYERED sont activées afin de pouvoir utiliser la fonction SetLayeredWindowAttributes (...) pour obtenir une transparence par clé de couleur et une fusion alpha au-dessus du contrôle.Avec un contrôle ActiveX dans un conteneur de fenêtre de navigateur, comment puis-je détecter lorsque l'utilisateur change de tabulation du contrôle ActiveX

Étant donné que la propriété WS_LAYERED ne peut pas être utilisée avec la propriété WS_CHILD, la gestion de la visibilité de la fenêtre n'est pas automatique. Je dois être en mesure de détecter quand le contrôle ActiveX n'est plus visible (c'est-à-dire parce que l'onglet du navigateur a été modifié ou réduit) afin que je puisse changer la visibilité de la fenêtre de superposition.

J'ai essayé d'utiliser certains des messages de fenêtre existants (WM_) pour déterminer cette modification, mais je ne les ai pas vus se déclencher lorsque l'onglet du navigateur IE est modifié. Est-ce que quelqu'un sait la meilleure façon de capturer quand ces changements de visibilité se produisent?

Répondre

2

Si vous ne voyez pas de notification WM_SHOWWINDOW, votre fenêtre est masquée plutôt que masquée. Il n'y a pas de message Windows qui vous dira quand votre contrôle ActiveX a été couvert. Vous devez rechercher des notifications dans le navigateur.

Ou trouvez une solution qui n'utilise pas une fenêtre WS_POPUP. Peut-être que vous pourriez utiliser AlphaBlend pour faire votre propre composition de couleur plutôt que de compter sur le comportement implicite d'AlphaBlend de SetLayeredWindowAttributes.

+0

Oui, une notification WM_SHOWWINDOW dans le contrôle ne se produit pas lorsque l'onglet est modifié ou même si la fenêtre du navigateur est réduite. Comment procéder pour intercepter et interpréter les notifications du navigateur? – flawlesslyfaulted

+0

Je peux créer une fenêtre "OWNED" comme mentionné sur msdn mais cela résout seulement le problème de minimiser le problème de changement d'onglet. http://msdn.microsoft.com/fr-fr/library/ms632599(VS.85).aspx#owned_windows "-Une fenêtre possédée est toujours au-dessus de son propriétaire dans l'ordre z -Le système automatiquement détruit une fenêtre possédée quand son propriétaire est détruit -Une fenêtre possédée est cachée quand son propriétaire est minimisé. " – flawlesslyfaulted

+0

Si le navigateur ne vous donne aucun contrôle sur les notifications, vous devez rechercher une solution qui n'utilise pas de fenêtre WS_POPUP. Je ne pense pas que vous serez en mesure d'interpréter quoi que ce soit de façon fiable. La fenêtre contextuelle est juste un deadend, désolé. –

Questions connexes