тема такая - загружаю я картинку с ресурсов: Код (Text): case WM_CREATE: MyImg = LoadResources( GetModuleHandle( 0 ), NULL ); reinterpret_cast<Gdiplus::Bitmap*>(MyImg)->GetHBITMAP(Gdiplus::Color(0,255,255,255), &bmFrame); hdc = GetDC( hWnd ); hScrDC = CreateCompatibleDC( hdc ); SelectObject( hScrDC, bmFrame ); ReleaseDC( hWnd, hdc ); DeleteObject( bmFrame ); break; case WM_PAINT: hdc = BeginPaint( hWnd, &ps ); DrawObjects( hWnd, hScrDC, 0, 0); BitBlt( hdc, 0, 0, 400, 500, hScrDC, 0, 0, SRCCOPY ); EndPaint( hWnd, &ps ); break; BOOL DrawObjects( HWND hWnd, HDC hScrDC, int xPos, int yPos ) { StretchBlt( hScrDC, 360, 5, 25, 25, hScrDC, 400, 0, 25, 25, SRCCOPY ); StretchBlt( hScrDC, 300, 0, 40, 40, hScrDC, 425, 0, 40, 40, SRCCOPY ); return TRUE; } Image* LoadResources( HINSTANCE hInstance, LPSTR Name ) { Gdiplus::Image* img; return LoadImageFromResource( IDB_PNG_BG, _T("PNG") , hInstance, &img); } Image* LoadImageFromResource(UINT res, LPCTSTR pType, HMODULE hInst, Gdiplus::Image **image) { HRSRC hResource = ::FindResource(hInst, MAKEINTRESOURCE(res), pType); if (!hResource){ return false; } DWORD imageSize = ::SizeofResource(hInst, hResource); if (!imageSize) return false; const void* pResourceData = ::LockResource(::LoadResource(hInst, hResource)); if (!pResourceData) return false; HGLOBAL hBuffer = ::GlobalAlloc(GMEM_MOVEABLE, imageSize); if (hBuffer) { void* pBuffer = ::GlobalLock(hBuffer); if (pBuffer) { CopyMemory(pBuffer, pResourceData, imageSize); IStream* pStream = NULL; if (::CreateStreamOnHGlobal(hBuffer, FALSE, &pStream) == S_OK) { (*image) = Gdiplus::Image::FromStream(pStream); DWORD dw = GetLastError(); } ::GlobalUnlock(hBuffer); } ::GlobalFree(hBuffer); hBuffer = NULL; } return *image; } возвращает красивенький битмап и я был доволен до недавна......пока не начал вызывать DrawObjects. Получается так: если в строчке Код (Text): reinterpret_cast<Gdiplus::Bitmap*>(MyImg)->GetHBITMAP(Gdiplus::Color(0,255,255,255), &bmFrame); Color будет как и написано (0,255,255,255) - фон закрасит синим - почему? - не извесно! если Color изменить,например (0,255,255,0) - фон черный) при регистрации класа окна указываю что Brush = NULL_BRUSH. Проверял - так оно и есть,окошко прозрачное...И остается прозрачным пока не сделаю SelectObject( hScrDC, bmFrame ); чё я не так делаю?? С графикой только вот пытаюсь понять как работать так что не особо пока разбераюсь,вот надеюсь с вашей помощью понять где "сабака зарыта". На код сильно не "плюйтесь" - темп из темпов) зарание благодарен за ответы! ПС размер картинки 500х500, видимая область 400х500. 100 пикселов оставил на кнопки,которые там и нарисованы. Формат *.png с транспарентом. Если выводить при помощи Bitmap img(background.png) + DrawImage(img) - прозрачность присутствует.
вот сижу и дальше продолжаю - все сходится на конверте: reinterpret_cast<Gdiplus::Bitmap*>(MyImg)->GetHBITMAP(Gdiplus::Color(0,255,255,255), &bmFrame); -как его мона заменить что бы дальше продолжить иследования???
как выгуглил - я был прав GetHBITMAP убивает прозрачность,всеми любимый майкрософт при создании GDIplus забыл об этом методе "присохшим" еще с win3.1))) - я и не сомневался в их находчивости. Ну лан суть не в том кто как пишет и о чём при этом думает,а в том что бы обойти траблу с заду(мне так больше нравится)) - Подумал о создании собственной функции GetHBITMAP - как думаете,реально? - ну да все реально,но стоит ли?! Может кто подскажет хоть в какую сторону идти и что почитать - буду крайне благодарен. А то общение с гулей особо ни на что не вывели_Спс