HBITMAPa z przeźroczystością

0

Witam,

Piszę program lupa. Robię screenshoty otwartym oknom i składam w jeden obraz który potem zoomuje. Oto funkcja, która robi screena konkretnego okna:

HBITMAP engine_winapi::screenshot(HWND hwnd)
{
    HDC hdcWindow;
    HDC hdcMemDC = NULL;
    HBITMAP hbmScreen = NULL;
    HBITMAP hbmOld = NULL;
   
    hdcWindow = GetDC(hwnd);

    hdcMemDC = CreateCompatibleDC(hdcWindow);

    RECT rcClient;
    GetClientRect(hwnd, &rcClient);
    hbmScreen = CreateCompatibleBitmap(hdcWindow, rcClient.right-rcClient.left, rcClient.bottom-rcClient.top);

    hbmOld = (HBITMAP)SelectObject(hdcMemDC,hbmScreen);

    BitBlt(hdcMemDC,
                                       0,0,
                                       rcClient.right-rcClient.left, rcClient.bottom-rcClient.top,
                                       hdcWindow,
                                       0,0,
                                       SRCCOPY);

    ReleaseDC( hwnd, hdcWindow );
    SelectObject( hdcMemDC, hbmOld );
    DeleteDC( hdcMemDC );

    return hbmScreen;
}

Problem w tym, że nie działa przeźroczystość np. w win 7 pasek z tytułem okna jest czarny.
Z góry dzięki za pomoc.

0

Z tego co pamiętam, GDI nie obsługuje bitmap z kanałem alfa. Spróbuj z GDI+.

0

To działa na główne okno (Win XP / 7) lub wszystkie okna ( Win 8)

http://cpp0x.pl/dokumentacja/WinAPI/SetLayeredWindowAttributes/1152

A to działa na bitmapach z uzyciem maski

http://cpp0x.pl/kursy/Kurs-WinAPI-C++/Podstawy/Bitmapy/182
(Mniejwięcej w połowie masz o przeźroczystych bitmapach)

0

To działa na główne okno (Win XP / 7) lub wszystkie okna ( Win 8)

http://cpp0x.pl/dokumentacja/WinAPI/SetLayeredWindowAttributes/1152

Ale ja nie chce zmieniać okna. Przecież robię zrzut z ekranu okien innych aplikacji które już są częściowo przeźroczyste.

A to działa na bitmapach z uzyciem maski

http://cpp0x.pl/kursy/Kurs-WinAPI-C++/Podstawy/Bitmapy/182
(Mniejwięcej w połowie masz o przeźroczystych bitmapach)

To to sam znalazłem i tam jest jak zrobić coś w pełni przeźroczyste, a np. tytuł okna w win Vista/7/8 jest tylko częściowo przeźroczyste.

1 użytkowników online, w tym zalogowanych: 0, gości: 1