2012-10-17 3 views
2

J'essaie de développer une application Windows qui permet aux gens de "dessiner sur leur écran".Comment faire pour qu'une fenêtre WPF transparente reste au-dessus de toutes les autres fenêtres, mais n'affecte pas les entrées utilisateur?

Je développe avec:

.NET 3.5 C#/WPF

J'ai une fenêtre WPF qui héberge un InkCanvas, les deux ayant un fond transparent.

fenêtre Propriétés XAML:

ShowInTaskbar="True" ResizeMode="NoResize" Background="Transparent" 
WindowStyle="None" AllowsTransparency="True" Topmost="True" 

propriétés InkCanvas:

Background="#11FFFFFF" 

je besoin d'un gestionnaire d'événements pour ce qui suit: - clic droit n'importe où dans la fenêtre - évasion de presse

souhaitée résultat: - Fenêtre WPF reste au-dessus de toutes les autres fenêtres, mais n'est plus acti ve et n'accepte plus l'entrée - La fenêtre WPF peut être plus focalisée. Toutes les entrées des utilisateurs doivent aller à leur fenêtre ciblée actuelle et ignorer la fenêtre wpf avec l'inkcanvas qui est au-dessus de tout

Exemple d'utilisation de base: Un utilisateur de l'application joue à un jeu. Ils s'arrêtent et dessinent quelques flèches dans la fenêtre wpf/inkcanvas. Ils finissent en appuyant sur échapper. La fenêtre wpf reste en haut, avec les formes ouvertes par l'utilisateur, et l'entrée de l'utilisateur revient à la fenêtre ouverte/focalisée.

Jusqu'à présent, j'ai essayé ceci:

MouseRightButtonUp :: 

mywindow.isenabled = false 

et j'ai essayé:

mywindow.IsInputMethodEnabled = false 

ne fonctionne pas à ce jour, la fenêtre de WPF commence toujours saisir l'entrée de l'utilisateur. Je dois d'une manière ou d'une autre faire en sorte que cette fenêtre soit visible mais sans qu'elle soit activée ... même après qu'elle ait été "utilisée" pendant un certain temps.

Merci d'avance pour tout conseil!

Répondre

0

Vous pouvez intercepter le WndProc (en utilisant le AddHook du HwndSource comme indiqué here) et intercepter le WM_NCHITTEST et renvoyer HTTRANSPARENT. Cela ne le laissera passer à d'autres fenêtres dans ce fil. Une autre option peut être de définir le bit de style étendu WS_EX_TRANSPARENT. Voir this question's answer pour un exemple.

+0

Merci, nous allons essayer cette direction aujourd'hui et vous mettrons à jour comment ça se passe. –

+0

@AlexanderPerls Ça fait longtemps, avez-vous déjà trouvé une solution? –

Questions connexes