begin process at 2008 07 20 23:14:22
1 213 497 membres
398 nouveaux aujourd'hui
14 167 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Background boite de dialogue [ Archives / Graphique ] (alf03)

Background boite de dialogue le 17/12/2005 18:58:38

alf03
Bonjour à toutes et à tous,

Je cherche à desiner par dessus une bitmap se trouvant dans une boite de dialogue.
Mais malheureusement, mes dessins apparaissent sous la bitmap !
Ma question est donc, comment mettre cette fameuse bitmap en arriere plan par rapport aux dessins ?
Merci de votre aide
A+

Re : Background boite de dialogue le 17/12/2005 19:36:25

vecchio56
(Admin CS)
Réponse acceptée !
Logiquement, un arrière plan se dessine à la réception du message WM_ERASEBKGND. C'est donc a cet endroit que tu devrais utiliser BitBlt pour dessiner ta bitmap

Re : Background boite de dialogue le 17/12/2005 19:44:58

alf03

Ok, merci; j'ai bien crée la fonction WM_ERASEBKGND grâce à class wizard mais après, quel code je dois mettre pour définir l'emplacement de ma bitmap ?
Merci


Re : Background boite de dialogue le 17/12/2005 19:46:30

vecchio56
(Admin CS)
Je te prépare un code en Win32. Après tu pourra adapter pour MFC

Re : Background boite de dialogue le 17/12/2005 19:48:10

alf03
ok, mirci beaucoup !!

Re : Background boite de dialogue le 17/12/2005 20:02:58

vecchio56
(Admin CS)
C'est ici: http://www.cppfrance.com/code.aspx?ID=35138

Re : Background boite de dialogue le 17/12/2005 21:36:51

alf03

Re-bonjour,
euh ... merci pr ton code mais j'ai pas assez d'expérience en Visual pr réussir à l'adapter en MFC...
Voici ce que j'ai pu "bredouiller" sans succès malheureusement.
J'ai pas tout compris tout le code; j'espere que vous ne vous arracherez pas les cheveux en lisant ceci :

BOOL CDialMaBdd::OnEraseBkgnd(CDC* pDC)
{
  CPaintDC hdc(this);
  RECT rcClient;
  HWND hDlg;
  HBITMAP hbmp;
  HINSTANCE hInstance;

  GetClientRect(hDlg, &rcClient);
  HDC hDC = GetDC(0);
  hdc = CreateCompatibleDC(hDC);
  hbmp = LoadBitmap(hInstance, (LPCTSTR)IDB_BITMAP1);
  SelectObject(hdc, hbmp);
  ReleaseDC(0, hDC);

  DialogBoxParam(hInstance, (LPCTSTR)IDD_BDD1, 0, CDialMaBdd, 0); 
  BitBlt(hdc, 0,0, 200, 200, hDC, 0,0, SRCCOPY);
  DeleteDC(hdc);
  DeleteObject(hbmp);
  return CDialog::OnEraseBkgnd(pDC);

}

Merci beaucoup de votre aide


Re : Background boite de dialogue le 17/12/2005 21:43:43

vecchio56
(Admin CS)
En MFC, les API sont tous redéfinis, donc en général quand le premier argument est un HWND, il faut l'enlever (par exemple pour GetClientRect Le plus important je pense est de ne pas appeler CDialog::OnEraseBkgnd(pDC), car il va redessiner par dessus le fond par défaut. Faut pas non plus créer un DC et charger la bitmap à chaque fois, tu peux les créer une fois pour toutes, comme j'ai fait CPaintDC hdc(this); ne sert à rien, car tu as déja la variable pDC Je vais essayer de le faire de mon coté en MFC

Re : Background boite de dialogue le 17/12/2005 21:48:32

vecchio56
(Admin CS)
Bon, je viens de me rendre compte que je vais pas le faire de mon coté en MFC, parce que j'utilise la version VC++ 2005 Express, et je peux pas créer un projet MDC avec Ta fonction devrait logiquement être assez courte: BOOL CDialMaBdd::OnEraseBkgnd(CDC* pDC) { RECT rcClient; GetClientRect(&rcClient); pDC->StretchBlt(0,0, rcClient.right, rcClient.bottom, pMemDC, 0,0, 200, 200, SRCCOPY); return 1; } Tu dois créer ailleurs un CDC* pMemDC contenant la bitmap

Re : Background boite de dialogue le 17/12/2005 22:36:45

alf03
ok, je vois à peu prés sauf pour le coup du CDC* pMemDC qui doit contenir la bitmap. 
Au cours de mes nombreuses recherches, j'ai vu qu'on déclarait la bitmap comme ceci :
 
HBITMAP bit= (HBITMAP) LoadImage(NULL, "MonImage.bmp", IMAGE_BITMAP,0,0, LR_DEFAULTSIZE|LR_LOADFROMFILE);

Je vois pas trop à quoi correspond CDC* pMemDC ; la plupart du temps il est utilisé comme cela :

 CDC MemDC;
 MemDC.CreateCompatibleDC(pDC);
 MemDC.SelectObject( &bitmap );

merci


[Page 1 Page 2]
Classé sous : boite, dialogue, bitmap, background, dessins

Participer à cet échange

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS