Screenshot: https://i.stack.imgur.com/5NKZI.jpg
Hello, I am trying to set png with alpha channel on top of static control, but transparent pixels always fill white or black color.
It's not critical if the image is on top of the static control or just drawn on main window.
If you have some ideas please give feedback.
THX
Sorry I should have post code before
//First try loading icon with transparency to static control or button:
//static control;
HWND hL;
HICON iStick;
case WM_CREATE:
iStick = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 0, 0, LR_LOADTRANSPARENT);
hL = CreateWindow(L"STATIC", NULL, WS_CHILD | WS_VISIBLE | SS_BITMAP/*SS_ICON*/, 193, 290, 32, 32, hwnd, NULL, hInst, NULL);
SendMessage(hL, STM_SETIMAGE, IMAGE_ICON, (LPARAM)iStick);
//SendMessage(hL, STM_SETICON, IMAGE_ICON, (LPARAM)iStick);
//Second try to draw on background 32bit bmp A8R8G8B8 :
PAINTSTRUCT ps;
HDC hdc;
RECT r;
static HDC membit;
static BITMAP bm;
case WM_CREATE:
SetWindowLong(hWnd, GWL_EXSTYLE, WS_EX_TOPMOST | WS_EX_LAYERED);
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE |SWP_NOSIZE);
SetLayeredWindowAttributes(hWnd, 0, (255 * 100) / 100, LWA_ALPHA);
hStick = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP15));
GetObject(hStick, sizeof(bm), &bm);
membit = CreateCompatibleDC(hdc);
SelectObject(membit, hStick);
ReleaseDC(hWnd, hdc);
case WM_CTLCOLOREDIT:
SetTextColor((HDC)wParam, RGB(65, 65, 65)); //
return 0;
//MakeStaticbackground transparent
case WM_CTLCOLORSTATIC:
SetBkMode((HDC)wParam, TRANSPARENT); //
SetTextColor((HDC)wParam, RGB(38, 205, 247)); //
return (BOOL)GetStockObject(NULL_BRUSH);
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &r);
FillRect(hdc, &r, hBrush);
SetBkMode(hdc, TRANSPARENT);
BLENDFUNCTION BlendFunction;
BlendFunction.AlphaFormat = AC_SRC_ALPHA;
BlendFunction.BlendFlags = 0;
BlendFunction.BlendOp = AC_SRC_OVER;
BlendFunction.SourceConstantAlpha = 255;
//BitBlt(hdc, 500, 280, bm.bmWidth, bm.bmHeight, membit, 0, 0, SRCCOPY);
AlphaBlend(hdc, 500, 280, bm.bmWidth, bm.bmHeight, membit, 0, 0, 32, 32, BlendFunction);
//TransparentBlt(hdc, 500, 300, 32, 32, membit, 32, 32, 32, 32, RGB(255, 255, 255));
EndPaint(hWnd, &ps);
break;
case WM_ERASEBKGND:
return (LRESULT)1;
And more which I don`t remember but background pixels always fill white or black colour.