C/C++ windows: DC et DrawTextEx

C/C++ windows: DC et DrawTextEx - Programmation

Marsh Posté le 13-12-2001 à 18:07:18    

Question 1:
Qqn peut il m'expliquer simplement comment on modifie la font d'un DC?
 
Question 2:  
Y a t il un moyen de faire en sorte que le fond du texte soit transparant (qu'il ne recouvre pas ce qui est déjà écrit sous le text)?

Reply

Marsh Posté le 13-12-2001 à 18:07:18   

Reply

Marsh Posté le 13-12-2001 à 18:31:39    

* CreateFont(), puis le sélectionner dans le dc
 
* SetBkMode(TRANSPARENT);

Reply

Marsh Posté le 13-12-2001 à 18:32:35    

youdontcare a écrit a écrit :

* CreateFont(), puis le sélectionner dans le dc
 
* SetBkMode(TRANSPARENT);  




 
j'ai essayé avec create font, mais j'ai du faire une connerie, ça a rien changé

Reply

Marsh Posté le 13-12-2001 à 18:34:55    

LetoII a écrit a écrit :

j'ai essayé avec create font, mais j'ai du faire une connerie, ça a rien changé  



montre ton code ...

Reply

Marsh Posté le 13-12-2001 à 18:40:07    

Dés que je l'aurais réécrit :)

Reply

Marsh Posté le 13-12-2001 à 19:05:22    

Bon une autre question:
 
déjà voici le code, ça va simplifier:
static RECT inRect;
 
HDC test=GetDC(Handle);
SetBkMode(test,TRANSPARENT);
refreshN=true;
 
InvalidateRect(Handle,&inRect,true);
inRect.left=X;
inRect.top=Y;
inRect.right=Width-X;
inRect.bottom=Y+DrawTextEx(test,pText,-1,&inRect,DT_CALCRECT | DT_TOP | DT_LEFT,0);
DrawTextEx(test,pText,-1,&inRect,DT_TOP | DT_LEFT,NULL);
ValidateRect(Handle,&inRect);
                   
ReleaseDC(Handle,test);
 
bon alors ça marche pas trop mal sauf que comme le text s'affiche en transparence là où j'ai la souris il en reste tjrs un bout non effacé (en fait plus qu'un bout) quand je bouge la souris (le petit bout de code est appeléchaque fois qu'elle change de position). Alors question comment je fais pour permetre l'effacement de tout le text. Si j'enlève le validate le text ne s'affiche plus.

Reply

Marsh Posté le 13-12-2001 à 20:20:42    

tout le code est dans la même fonction ? elle est où ta fonction d'ailleurs ... c'est un onPaint() ? parce que là je comprends pas trop, si tu veux afficher qq chose, c'est soit
 
* en réponse à WM_PAINT où tu utilises alors BeginPaint() et EndPaint() pour chopper un dc et valider la surface
 
* périodiquement, ie 30 fois par secondes, tu peux faire un GetDC() sur ta fenêtre et painter directement. ça va flicker, il faut donc painter dans un dc mémoire (CreateCompatibleDC() et CreateCompatibleBitmap() - je crois) et blitter la surface à coups de BitBlt().

Reply

Marsh Posté le 13-12-2001 à 20:58:31    

non elle répond pas à un événement onpaint( je pense que c de là que vient le plus gros du PB) elle se trouve dans un événement qui gère le drag and drop

Reply

Marsh Posté le 13-12-2001 à 21:33:22    

d'accord ... parce que le code que tu files est un peu bizarre : InvalidateRect() va envoyer un WM_PAINT, donc ton code avec TextOut() va être éxécuté, puis le code de onPaint().  
 
donc ... si tu veux effacer le texte, il va falloir le faire à la main. il faut gicler le invalidate(), et le validate() aussi (pas sûr). normalement tu devrais juste pouvoir faire GetDC(), FillRect() (pour effacer le fond), puis ton TextOut().
 
enfin, le mieux je pense serait juste d'appeler InvalidateRect() dans ta fonction, et de faire réagir le onPaint() de façon appropriée : suivant un flag dans ton code, il appelle telle ou telle fonction et lui passe le hdc pour dessiner.

Reply

Marsh Posté le 13-12-2001 à 21:46:01    

Je suis assez daccord avec ton dernier paragraph, je vais faire ça on va voir si ça marche mieu

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed