BitBlt

Signaler
Messages postés
22
Date d'inscription
jeudi 14 octobre 2004
Statut
Membre
Dernière intervention
3 janvier 2005
-
Messages postés
22
Date d'inscription
jeudi 14 octobre 2004
Statut
Membre
Dernière intervention
3 janvier 2005
-
Gringo

bonjour
j'ai débuté il ya qq temps sous visual C++ et les MFC. Je remercie d'ailleurs les personnes qui ont pu m'aider sur ce forum.
je crée une fenetre ds laquelle je dessine un fond et du texte. A l'appui sur une touche j'aimerai faire apparaitre un sorte de message box que je dessine. J'aimerai éviter le clignotement et conserver en arrière plan ma fenetre. Cependant, je ne dessine pas ma messagebox dans la meme fonction qui affiche ma page de dessin. En fait je ne vois pas comment faire pour conserver l'arrière plan. Pour éviter le clignotement, j'utilise bitblt.
Est il possible de superposer deux buffers mémoires.

Je vous remercie pour votre aide.

Tchao.

4 réponses

Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Je suppose ke ta MessageBox est une dialog (ou une fenetre, on sen fout). Tu l'affiche kan tu en as besoin, je vois pas pkoi tu parle de clignotement ?

+2(p - n)
Messages postés
22
Date d'inscription
jeudi 14 octobre 2004
Statut
Membre
Dernière intervention
3 janvier 2005

Gringo

en fait c'est pas une boite de dialogue mais un rectangle que je dessine ds lequel je veux insérer du texte. En fait je n'utilise aucun composant active x de windows. Je dessine juste ce dont j'ai besoin, un fond, du texte, des lignes ...
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Muè c pas top comme solution kan mm...Je te conseille de faire une dialogue, ce sera bocou plus simple.
si tu ne veux pas, tu n'as k'a créer un hdc compatible, lui 'attribuer' un bitmap, ecrire dans le hdc créé précédemment et pis un coup de BitBlt pour finir et tout copier dans le hdc de ta fenetre :

WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
hdcmem = CreateCompatibleDC(hdc);
hbmp = CreateCompatibleBitmap(hdc, rct.right, rct.bottom);
holdbmp = SelectObject(hdcmem, hbmp);
//Tu dessines dans le hdc memoire
TextOut(...)
//Puis tu 'blittes' tout ca
BitBlt(hdc, 0, 0, rct.right, rct.bottom, hdcmem, 0, 0, SRCCOPY);
//Tu Detruis tout ce que t'a créé
SelectObject(hdcmem, holdbmp);
DeleteObject(hbmp);
DeleteObject(holdbmp);
DeleteDC(hdcmem);
EndPaint(hwnd, &ps);
return 0;

Voila

++

+2(p - n)
Messages postés
22
Date d'inscription
jeudi 14 octobre 2004
Statut
Membre
Dernière intervention
3 janvier 2005

Gringo

mais lorsque j'intercepte un évènement clavier par exemple, j'aimerai afficher mon rectangle et mon texte tout en conservant en arrière plan le fond de ma fenetre et le tout sans clignotement. La méthode que tu me proposes marche si je dessine qu'un message box ds le WM_PAINT si je veux en dessiner plusieurs, comment dois je procéder à ton avis ?
Par exemple l'appui sur une touche, m'affiche une nouvelle page ensuite un test sur un évènement clavier m'affiche une autre message box.
Je sais pas si j'ai été clair mais vois tu ce que je veux dire.

En tout cas, je te remercie pour ton aide. C sympa.