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);;
} |