2010-03-16 5 views
3

Je travaille sur un constructeur de formulaire simple qui héberge des objets .NET en direct et qui exécute son propre dessin pour les lignes directrices (grille), la sélection des objets, etc. Les choses vont bien mais comme vous le voyez ci-dessous, exactement optimal car il peint toujours derrière les contrôles hébergés.Comment dessiner "sur le dessus" des contrôles hébergés dans .NET?

Selection Sample http://img405.imageshack.us/img405/8572/selectsample01.png

Comment puis-je modifier ma logique de peinture pour dessiner « sur » de tous les contrôles hébergés?

Si l'image manque dans votre point de vue donc il peut être consulté ici: http://img405.imageshack.us/img405/8572/selectsample01.png

Répondre

1

Ce n'est pas un problème d'ordre Z. Le problème est que vous ne pouvez pas dessiner dans le rectangle client d'une autre fenêtre. La fenêtre "Texte" dans votre cas. Une fenêtre comme votre "formulaire" a l'indicateur de style WS_CLIPCHILDREN activé.

Je ne sais pas exactement comment le concepteur Windows Forms parvient à dessiner des poignées de sélection autour des contrôles. Mais quand je regarde le concepteur avec Spy ++, je vois deux fenêtres autrement invisibles qui sont la taille de la zone de conception. Ils sont nommés "OverlayControl" et "AdornerWindow". Ma conjecture est que le concepteur dessine réellement les poignées sur une de ces fenêtres (OverlayControl probablement) et que le fond de fenêtres est transparent.

J'ai utilisé une astuce similaire dans this thread, vous pourriez être en mesure de tirer parti du code. Vous devriez aussi jeter un coup d'oeil à ceci magazine article.

+0

+1 Cela semble très prometteur. (Je prendrai quelques heures pour travailler sur les concepts de demain.) J'avais peur que cela puisse arriver à une idée de superposition, mais je ne m'en suis pas occupée depuis mes jours MFC. Espérait une solution .NET plus simple, mais ces liens sont d'excellents prospects! Merci beaucoup nobugz! Et en passant, l'utilisation de la superposition aborde également quelques autres problèmes liés aux concepteurs. –

0

la capture d'écran, il semble que le contrôle hébergé a toujours l'accent qui signifie qu'il doit être peint en face.

Supprime le focus du contrôle hébergé et vérifie que l'ordre z est correctement défini.

Si vous contrôlez la commande z, vérifiez que vous peignez conformément à l'ordre z.

Si vous n'avez pas de z-ordre, vous devez en implémenter un.

+0

J'ai essayé de changer la mise au point mais quel que soit mon réglage, mon dessin apparaît toujours derrière les autres commandes. Ces contrôles sont hébergés dans le panneau que je dessine, donc je ne suis pas sûr de pouvoir faire grand chose avec l'ordre z. –

Questions connexes