Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
TransparentBlt - Альфа каналы
#1
(Для любителей графики и чистого винАпи!!!)
Парни ну выручайте, уже долгое время пытаюсь побороть альфу на транспаренте Sad
Метод инициализации окна с битмапом:

[src="C++"]
void SPLASH::Init(HWND hWnd,HINSTANCE hInst,int resid,int x,int y)
{
HBITMAP hBmp = LoadBitmap(hInst,MAKEINTRESOURCE(resid));
if(hBmp)
{
HDC hDc=GetDC(hWnd);
hdcMem = CreateCompatibleDC(hDc);
SelectObject(hdcMem, hBmp);
GetObject(hBmp, sizeof(bm), &bm);
TransparentBlt(hDc, 0, 0, 251, 209, hdcMem, 0, 0, 251, 209, RGB(255, 255, 255));
//Rectangle(dc,10,156,150,154);
hParentWindow=hWnd;
hSplashWnd=CreateWindowEx(WS_EX_NOACTIVATE, L"STATIC", L"", WS_POPUP|SS_BITMAP|WS_VISIBLE, x, y, 251, 209, hWnd, NULL, hInst, NULL);
SendMessage(hSplashWnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBmp);
this->SHOWING = FALSE;
DeleteDC(hdcMem);
}
}[/src]

Естественно вызываю с мейнФрейма, предварительно создав окно + отцентрировав его:
[src="C++"] HWND hWnds = CreateWindowEx(NULL,L"STATIC",0,NULL,0,0,0,0,hWND,NULL,hinstDLL,NULL); //WS_OVERLAPPEDWINDOW
GetWindowRect (hWnds, &rc);
int xPos = (GetSystemMetrics(SM_CXSCREEN) - rc.right)/2;
int yPos = (GetSystemMetrics(SM_CYSCREEN) - rc.bottom)/2;
SetWindowPos(hWnds, NULL, xPos, yPos, 251, 209, SWP_NOZORDER | SWP_NOSIZE );
splashload.Init(hWnds,hinstDLL,IDB_SPLASHLOAD,xPos,yPos);[/src]

Суть проблемы:
Тупо не выводит долбаный битмап Sad При этом если - убрать с окон - ВС_ВИЗИБЛ, то битмап прогружается но с белым фоном (маской)...Что не так делаю? Куда копать? Может с положениями окон дела? Либо не верный ДС выбрал?!!

----
Вопрос снят. Переделал всё.


Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)