Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinApi]Screenshot konkretnego okna

Ostatnio zmodyfikowano 2013-10-26 10:47
Autor Wiadomość
mar3
Temat założony przez niniejszego użytkownika
[WinApi]Screenshot konkretnego okna
» 2013-10-04 22:16:44
Witam,
Piszę program w Qt. WinApi nie znam nigdy się go nie uczyłem. Potrzebuje tylko funkcji która zwróci screenshot konkretnego okna. Funkcja ta będzie w pętli. Podany jako argument jest HWND okna, a chce, żeby zwracała HBITMAP, żebym mógł skorzystać z
QPixmap::fromWinHBITMAP()
.
Pomoże ktoś?
P-93135
pekfos
» 2013-10-04 22:18:24
P-93136
mar3
Temat założony przez niniejszego użytkownika
» 2013-10-04 22:33:49
No dobra robię
HDC hdc = GetWindowDC( hwnd );
. W funkcji BitBlt podaje to jako source tak? a co mam podać jako destination device context?
P-93137
Mrovqa
» 2013-10-05 00:08:02
P-93140
mar3
Temat założony przez niniejszego użytkownika
» 2013-10-14 20:53:05
Mam coś takiego:
C/C++
HDC hdcScreen = GetDC( hwnd );
RECT rect;
HBITMAP hbmC;

GetClientRect( hwnd, & rect );

if(( hbmC = CreateCompatibleBitmap( hdcScreen, rect.right, rect.bottom ) ) != NULL )
{
    HDC hdcC;
    if(( hdcC = CreateCompatibleDC( hdcScreen ) ) != NULL )
    {
        HBITMAP hbmOld =( HBITMAP ) SelectObject( hdcC, hbmC );
       
        BitBlt( hdcC, 0, 0, rect.right, rect.bottom, hdcScreen, 0, 0, SRCCOPY );
       
        SelectObject( hdcC, hbmOld );
        DeleteDC( hdcC );
    }
}

RECT re; //pozycja okna
GetWindowRect( hwnd, & re );
QPixmap tmp = QPixmap::fromWinHBITMAP( hbmC );
lupaFrame::getInstance().painter->drawPixmap( re.left, re.top, tmp.width(), tmp.height(), tmp );
ReleaseDC( hwnd, hdcScreen );
Niestety, ale przeźroczyste fragmenty np manu start w win 7 ma czarne tło. Jak zrobić, żeby była przeżroczystość?
P-93714
DejaVu
» 2013-10-26 10:47:17
Obsługa przezroczystości za pomocą WinAPI wymaga napisania kilkunastu linijek kodu - problem postawiony w temacie 'jak zrobić screena' został rozwiązany. Problem 'przezroczystości' jest zupełnie inną kwestią, więc temat zamykam, bowiem jeden temat = jeden problem.
P-94580
« 1 »
  Strona 1 z 1