Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    mai 2011
    Messages
    363
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : mai 2011
    Messages : 363
    Points : 17
    Points
    17

    Par défaut Problème de tracé de HBITMAP

    Bonjour,

    Je cherche à afficher un HBITMAP dans un controle d'ou la couleur clblack est transparent.

    La particularité , il recopie le contenue du controle HWND parent vers un context temporaire et recopie le hbitmap dans le context temporaire et le trace dans le controle.

    Bug : il recopie la position 0,0 du controle parent , ce n'est pas le probléme, je vais me débrouiller.

    Le probléme majeur : c'est que cela ne marche pas du tout !
    je dis bien ne marche pas du tout ! : Il trace rien ;

    Ne vous preoccupez pas de la fonction loadbitmap , elle fonctionne.


    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    DWORD WINAPI wndnew(HWND h,UINT message,WPARAM wparam,LPARAM lparam)
    {
    	switch (message)
    	{
    		
    		case WM_PAINT:
    			{
    				//oldwndproc(h,message,wparam,lparam);;
    				static HBITMAP hb=0;
    				if (hb==0)
    				{
    					hb=loadbitmap(_T("e:\\x\\png\\dlo.png"),0);
    				}
    				PAINTSTRUCT lp={0};
    				HDC dc=BeginPaint(h,&lp);
    				HDC dcparent=GetDC(GetParent(h));
    				//HDC dcmem=dcparent;
    				HDC dcmem=CreateCompatibleDC(dc);
    				HDC dcmembitmap=CreateCompatibleDC(dcparent);
    				HDC dcmemparent=CreateCompatibleDC(dcparent);
    				SelectObject(dcmembitmap,hb);
    				//BitBlt(dc,0,0,50,50,dcmem,0,0,SRCCOPY);
    				
    				BITMAP _bmp={0};
    				GetObject(hb,sizeof(BITMAP),&_bmp);
    				SetLastError(0);
    				BOOL b=BitBlt(dcmem,0,0,50,50,dcparent,0,0,SRCCOPY); //on recopie le contenu graphique du controle parent vers dcmem
    				int err=GetLastError();
    				b=TransparentBlt(dcmem,0,0,_bmp.bmWidth,_bmp.bmHeight,dcmembitmap,0,0,_bmp.bmWidth,_bmp.bmHeight,0); //on insert dans dcmem un HBITMAP avec couleur noir en tant que transparence
    				err=GetLastError();
    				SetLastError(0);
    				b=BitBlt(dc,0,0,50,50,dcmem,0,0,SRCCOPY); //on recopie le dcmem et le controle (dessin) ET CA NE MARCHE PAS !
    				err=GetLastError();
    				ReleaseDC(GetParent(h),dcparent);
    				DeleteDC(dcmembitmap);
    				DeleteDC(dcmem);
    				DeleteDC(dcmemparent);
    				
    				
    				
    				EndPaint(h,&lp);
    				return 0;
    			}
    		break;
    		
    	}
    	return oldwndproc(h,message,wparam,lparam);;
    }

    Pouvez - vous m'aider ?
    Avez - vous une solution ?
    Merci ;

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    mai 2011
    Messages
    363
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : mai 2011
    Messages : 363
    Points : 17
    Points
    17

    Par défaut

    J'ai résolue mon probléme ,
    il fallait passer par un bitmap temporaire.


    Code :
    1
    2
    3
    4
    5
    6
    HBITMAP bitmapparent = CreateBitmap(_orc.right,_orc.bottom, 1, 32, NULL);
    HGDIOBJ oparent=SelectObject(dcmem,bitmapparent);
    ....
    ...
    ...
    DeleteObject(bitmapparent);

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •