2013-01-31 7 views
1

J'ai un texte statique sur une fenêtre qui est noire, et je voudrais le changer au moment de l'exécution en utilisant une boîte de dialogue Sélecteur de couleurs. J'ai réussi à obtenir la couleur, maintenant j'ai juste besoin de changer le texte! J'ai lu que le message WM_CTLCOLORSTATIC est celui à gérer, bien que cela ne semble être que lorsque le contrôle est initialement dessiné à l'écran. Pourrait-on utiliser WM_PAINT?Dans Win32, comment modifier la couleur du texte STATIC?

Le code de réglage de la couleur que je l'ai à ce jour est (en WM_CTLCOLORSTATIC cas):

if ((HWND)lParam == GetDlgItem(hWnd, uLabelId) 
{ 
    SetBkMode((HDC)wParam, TRANSPARENT); 
    SetTextColor((HDC)wParam, crLabelTextColour); 
    return (BOOL)CreateSolidBrush(GetSysColor(COLOR_MENU)); 
} 

j'ai tout à fait le mauvais bout du bâton aborder cette question, de sorte que toute aide serait grandement appréciée !

Répondre

4

Vous êtes sur la bonne voie avec WM_CTLCOLORSTATIC. Si vous voulez changer la couleur, alors invalidez le contrôle (probablement en utilisant RedrawWindow). Cela va le faire repeindre. Lorsqu'il est repeint, votre gestionnaire WM_CTLCOLORSTATIC sera à nouveau appelé.

0

Quelques suggestions:

  • Savez-vous que c'est la boîte de dialogue parent qui reçoit WM_CTLCOLORSTATIC, pas le contrôle lui-même?

  • Le return (BOOL)... semble étrange - dans quelle fonction ce code vit-il? Vous devriez retourner un LRESULT de votre proc de fenêtre.

  • Vous avez une fuite à chaque fois - vous devez maintenir une seule brosse et retourner cette brosse à chaque fois. Windows ne nettoie pas le pinceau.

+0

Merci! Je savais que 'WM_CTLCOLORSTATIC' est une notifcation. La déclaration de retour est juste quelque chose que j'ai obtenu d'un autre exemple - je ne l'aime pas vraiment non plus! Merci de m'avoir averti de la brosse - je vais regarder ça! – BWHazel

Questions connexes