[WinApi]Screenshot konkretnego okna
Ostatnio zmodyfikowano 2013-10-26 10:47
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ś? |
|
pekfos |
» 2013-10-04 22:18:24 |
|
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? |
|
Mrovqa |
» 2013-10-05 00:08:02 |
|
mar3 Temat założony przez niniejszego użytkownika |
» 2013-10-14 20:53:05 Mam coś takiego: 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; 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ść? |
|
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. |
|
« 1 » |