2010-09-08 26 views
2

Je cherche un moyen de superposer la sortie graphique d'une application tierce avec quelques lignes, arcs, etc. Les applications acceptent un handle d'une fenêtre dans laquelle il affichera alors sa sortie.Hooking dans Forms redessiner

L'utilisation de VC++ J'ai mis en place une application Windows Forms dans Visual Studio qui dessine des éléments (non statiques) dans la méthode onPaint d'un formulaire. Passer la poignée de ce formulaire à l'autre application, bien sûr, écrase mes trucs graphiques chaque fois que l'autre application se redessine. Puis-je en quelque sorte me connecter à ce processus de redessin pour ajouter mes graphiques après l'autre application se redessine? Superposer le formulaire avec un panneau transparent sur lequel je dessine pourrait être une alternative. Mais réel la transparence pour les contrôles semblent être un problème propre à Windows ...

Répondre

1

Vous ne pouvez pas faire cela facilement sans recevoir des notifications de l'application. Ce qui, s'il ne les fournit pas, nécessiterait de définir un hook global avec SetWindowsHookEx() afin que vous puissiez voir les messages WM_ERASEBKGND et WM_PAINT. C'est difficile à obtenir, vous ne pouvez pas écrire un tel crochet dans le code managé. Comme il faut injecter une DLL dans le processus cible.

La seule autre option est que vous mettez une superposition transparente au-dessus de votre formulaire. Une autre forme qui a son jeu de propriétés TransparencyKey. Le code de base dont vous avez besoin pour obtenir ce droit est disponible dans ma réponse au this thread. Vous avez juste besoin de le modifier pour qu'il soit permanent.