2012-06-06 2 views
0

Cela diplay le texte sur l'écran avec un TRANSPARENT BG et un texte de couleur, mais si je veux changer le textewin32 modifier le texte insideTextOut

plus tard, comment puis-je faire? devrais-je utiliser: SendMessage(); ou: SetWindowText() Si oui, comment et si

non, alors quoi alors ??? et comment

case WM_PAINT: 

     dc = BeginPaint(hwnd, &Ps); 

SetBkMode(dc, TRANSPARENT); 

     SetTextColor(dc, RGB(454,0,0)); 

     TextOut(dc, 10, 200, L"SEE? ", 5); 

     EndPaint(hwnd, &Ps); 

     break; 
+1

Utilisez une * variable * pour que ce code puisse peindre n'importe quel texte. Appelez InvalidateRect() lorsque vous modifiez la variable afin que la fenêtre peint le nouveau texte. –

+0

Un exemple? s'il vous plaît im nouveau – user1417815

Répondre

2

Si vous voulez dessiner le texte associé à la fenêtre - c'est ce que vous devez faire:

  1. Ne pas appeler TextOut avec la chaîne codée en dur. Au lieu de l'obtenir via GetWindowText. Ajouter un message à WM_SETTEXT. En le recevant - invalidez votre fenêtre (ou au moins la zone où le texte est supposé être dessiné).

maintenant quelques explications sur la transparence, etc

Je suppose que la fenêtre a une brosse de fond associée (à savoir son WNDCLASS avait membre non nul hbrBackground lors de l'enregistrement de classe). Si ce n'est pas le cas, vous peignez un texte transparent au-dessus d'une zone non peinte, qui peut contenir des indésirables.

Pendant l'appel à BeginPaint votre procédure de fenêtre reçoit WM_ERASEBACKGROUND. En supposant que vous le passez au DefWindowProc - la zone client de votre fenêtre sera remplie par le pinceau d'arrière-plan. Alors que chaque fois que vous commencez à peindre - le client est de votre fenêtre sera rempli par un pinceau. Ensuite, vous dessinez votre texte de manière transparente sur le fond nouvellement rempli. Alors que pas de bavure devrait se produire.

Chaque fois que vous voulez changer quelque chose de visuel sur votre fenêtre - dessiner des choses supplémentaires sur place ne suffit pas. Parce que le système d'exploitation peut demander à votre fenêtre de se redessiner à tout moment. Alors que votre fenêtre doit être capable de se peindre de manière adéquate lors de la réception WM_PAINT.

Une pratique courante consiste à invalider votre fenêtre (ou une partie de celle-ci en utilisant InvalidateRect ou une fonction similaire) en cas de modification. Et puis, quand vous recevez WM_PAINT - repeindre votre fenêtre.

+0

Pourriez-vous s'il vous plaît me mettre à jour avec un exemple dans le code? – user1417815

+0

Peu importe, j'aurais dû donner mon temps de lecture ... – user1417815