Много разных способов искал как вывести без мерцания(с помощью двойной буф) картинку в окно. BitBlt - хароший штука,но требует HBITMAP, при получении которого с Bitmap* или Image* (.GetHBITMAP) теряется прозрачность в моем битмапе(*.png). Прочитано не мало,вариантов опробовано не мало и вот он - выход DrawCachedBitmap,но и тут нашлись НО. Для того чтобы создать CachedBitmap нужен объект Graphics при создании которого нужно указать девайс(HDC). Получается так: Код (Text): Gdiplus::Bitmap* BgBmp; Gdiplus::Graphics* gr; CachedBitmap* cb; void create(HWND hWnd) { hdc = GetDC( hWnd ); BgBmp = LoadImageFromResource( IDB_PNG_BG, _T("PNG"), GetModuleHandle(NULL), &BgImg ); gr = new Gdiplus::Graphics(hdc); cb = new CachedBitmap( BgBmp, gr ); gr->DrawCachedBitmap( cb, 0, 0 ); ReleaseDC( hWnd, hdc ); return; } void paint(HWND hWnd) { hdc = GetDC( hWnd ); //hdc = BeginPaint( hWnd, &pss ); gr->DrawCachedBitmap( cb, 0, 0 ); //gr.DrawImage(BgImg, 0, 0, 500, 500); //BitBlt( hdc, 0, 0, W_MAIN_WND, H_MAIN_WND, hMemDC, 0, 0, SRCCOPY ); ReleaseDC( hWnd, hdc ); //EndPaint( hWnd, &pss ); return; } но получается так что в ф-ии create(...) винда возвращает один HDC а в paint(...) другой( Вообщем на это я не жалуюсь,но пока не понимаю почему(да и читать пока не охота по этому поводу)). Убивает то что не могу понять как мне создать один раз CachedBitmap при создании окна,например... и потом только выводить его постоянно DrawCachedBitmap в паинте...А то если создавать кешированую картинку прям в паинте - ну панятно - безсмысленно) правда и так пробовал)))) !прошу помощи!спс!
не вестись на прозрачность в GDIplus(ИМХО!),все чему я научился спустя неделю чтений и тестов.) Ужасно тормозит комп! Принято решение - самому вырезать програмно и двойной буферизацией с помощью BitBlt копировать на "дисплей". А те мелочи типа подсветки кнопок и т.п. - мона уже с помощью DrawImage - не особо они большого размера и должно незаметно прорисоватся)