2009-07-30 4 views
0

J'essaie de créer un contrôle CStatic personnalisé dans vc++ et j'ai quelques problèmes.CStatic Custom Control

À l'origine, j'utilisais simplement un contrôle CStatic avec le style SS_BLACKRECT. C'était bon pour la situation jusqu'à ce que je devais afficher une image sur le contrôle à la demande.

J'ai trouvé toute la logistique nécessaire pour dessiner l'image sur la commande mais je n'arrive pas à comprendre comment faire sans interférer avec d'autres choses.

Fondamentalement, je veux que le contrôle fonctionne comme un CStatic normal avec le style SS_BLACKRECT la plupart du temps.

Ensuite, je dois être en mesure d'appeler une méthode qui l'amènera à dessiner une image sur le contrôle à la place. Je fais le dessin en utilisant GDI et l'ai essayé à la fois dans la méthode OnPaint() et la méthode DrawItem() sans succès. Je peux l'obtenir pour dessiner dans le OnPaint() mais quand j'appelle la base CStatic::OnPaint() elle dessine sur mon image.

Je dois être en mesure de le laisser dessiner comme d'habitude mais ensuite de lancer une image. Lorsque j'ai essayé de le faire dans la méthode DrawItem(), j'ai eu un problème parce que, évidemment, il ne dessinait pas en utilisant le style SS_BLACKRECT mais en attendant que je dessine le contrôle comme il est censé le faire.

Je suppose que ce que je pense que je cherche est l'une des trois choses. Un moyen de dessiner en utilisant GDI après la méthode de base OnPaint() se termine. Une façon d'avoir le contrôle dessiner le style par défaut SS_BLACKRECT puis OWNERDRAW l'image après. Ou le code pour imiter le dessin de SS_BLACKRECT.

Le dernier peut être le plus facile mais je ne sais pas tout ce que j'ai besoin de configurer pour dessiner un contrôle CStatic comme le DrawItem par défaut.

+0

Avez-vous trouvé une solution à ce problème? – Alan

Répondre

1

Essayez d'appeler Default() dans votre gestionnaire OnPaint(). Ensuite, selon que vous dessinez votre image, vous pouvez dessiner sur le haut du contrôle standard CStatic.

0

est ici quelques idées:

Si CStatic::OnPaint() tire sur l'image, puis essayez de l'appeler d'abord et dessiner votre image par la suite.

Sinon, de ce peu que je l'ai vu de SS_BLACKRECT, vous devriez être en mesure de le reproduire dessine simplement appeler CDC::FillSolidRect() passer le rectangle de votre commande obtenue par GetClientRect() et en utilisant la couleur retournée par GetSysColor(COLOR_WINDOWFRAME)