Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Как сграбить экран?


Автор: VID 6.6.2006, 12:12
Ребята хэлп!

  Мне необходимо сграбить содержимое экрана в Bitmap. Не знаю как это сделать под BDS C++.
Нашел примеры как это сделать под MFC:
С помощью MFC это делается командами GetDC(GetDesktopWindow), затем BitBlt куда надо. RTFM: BitBlt, CreateCompatibleDC, CreateCompatibleBitmap:
Код

hDc = GetDC(hWndScr);
hMemDc = CreateCompatibleDC(hDc);
hBmpNew = CreateCompatibleBitmap(hDc, 500, 500);
hBmpOld = SelectObject(hMemDc, hBmpNew);
BitBlt(hMemDc, 0, 0, 500, 500, hDc, 0, 0, SRCCOPY); 


Но вот что дальше делать с handl'ом на девайс понять не могу. Как мне в результате получить TBitmap? 

Автор: _hunter 6.6.2006, 13:23
вот на делфях:
http://forum.vingrad.ru/index.php?showtopic=92863 

Автор: Romikgy 6.6.2006, 13:23
Может 
hBmpNew = CreateCompatibleBitmap( TBitmap->Canvas->Handle, 500, 500); 

Автор: VID 6.6.2006, 13:57
Цитата

Может hBmpNew = CreateCompatibleBitmap( TBitmap->Canvas->Handle, 500, 500);  


CreateCompatibleBitmap, создает HBITMAP из хэндла на контекс девайса, а у канвы Handle и так уже HBITMAP. Так что тут что-то не так  smile 

А пример 
Код
hunter'a
 с масенькими переделками заработал !!!

Ничего, что код той статьи повторю на С++ с переделками (мне нужно было весь экран грабить):

Код

    TCanvas* DeskTop = new TCanvas();
    try
    {
        DeskTop->Handle = GetWindowDC(0); /// GetWindowDC(GetDesktopWindow) вернул HDC = 0 !!!
        Image1->Canvas->CopyRect(Image1->Canvas->ClipRect, DeskTop, DeskTop->ClipRect);
  }
   __finally
  {
        if (DeskTop)
            delete DeskTop;
  }



Спасибо всем за помощь.

P.S
   И как вы так быстро откликнулись?!! Вы здесь живете что-ли?  smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)