2009-05-11 11 views
1

J'ai une sous-classe CTabCtrl que j'essaie de remplacer WM_PAINT pour effectuer un dessin personnalisé. Le seul problème est, lorsque je change l'onglet sélectionné, je reçois des artefacts à gauche dans la boîte de dialogue où l'ancien code de peinture n'a pas été effacé avant que le nouveau code est peint sur le dessus. (Les onglets standard ont l'onglet sélectionné apparaît 2 pixels plus grand que les onglets non sélectionnés, donc lorsque vous passez de sélectionné à non sélectionné, il vous reste les artefacts de peinture précédents).Comment peindre des zones transparentes pour les contrôles enfants?

Quelle est la meilleure façon de "repeindre" cette zone? J'ai essayé d'obtenir le DC et le BitBlt du contrôle parent sur le contrôleur de domaine de l'enfant, mais cela ne fonctionne pas car le contrôleur de domaine parent contient déjà une image de ce contrôle.

Répondre

2

Vous substituez également le message WM_ERASEBACKGROUND? Vous devriez probablement faire cela et effacer la zone dans le contrôle.

Vous pouvez utiliser DrawThemeParentBackground pour dessiner l'arrière-plan (XP et ultérieur) si vous ne souhaitez pas remplacer toute la logique de dessin.

+0

Je gère le message et retourne FALSE pour faire tout le dessin dans WM_PAINT. Je vais essayer cette fonction maintenant ... –

+0

Cela a fonctionné à merveille - merci Larry. –