|
메뉴라면 어떤 메뉴를 말씀하시는 건지요.
DC = GetDC(0); 으로 전체화면을 얻고,
BitBlt(bmp->Canvas->Handle, 0, 0, width, height, DC, left, top, SRCCOPY);
위와같이 작업하시면 전체 화면을 캡쳐하실 수 있습니다. 메뉴가 화면에 보이는 것이라면, 캡쳐가 분명히 되겠지만, 화면에 보이지 않는 것이라면 캡쳐를 하실 수 없습니다. 후자에서는 무언가의 다른 작업이 필요하겠네요.
그리고, GetDC는 메모리 누수가 발생할 수 있는 함수입니다. 아래 첨부해주신 소스중에 GetCRT 라는 소스의 호출이 빈번하다면, OnCreate 같은 곳에서 GetDC 로 DC를 하나 얻어서 계속 작업하신 다음, OnDestroy 에서 Release 시켜 주는 식으로 하시는 방법이 좋습니다.
하느리 님이 쓰신 글 :
: 일반적인 경우, 화면을 캡쳐할려면,
: void __fastcall GetCRT (Graphics::TBitmap *bmp, TRect& area, int width, int height)
: {
: bmp->Width = width;
: bmp->Height = height;
: int col_num = GetCRTColorBit ();
: if ( col_num == 4 ) bmp->PixelFormat = pf4bit;
: else if ( col_num >= 16 ) bmp->PixelFormat = pf16bit;
: else bmp->PixelFormat = pf8bit;
:
: HWND desktop = GetDesktopWindow ();
: HDC dt_dc = GetDC (desktop);
: SetStretchBltMode (bmp->Canvas->Handle, STRETCH_HALFTONE);
: StretchBlt (bmp->Canvas->Handle, 0,0, width, height,
: dt_dc, area.Left, area.Top, area.Right - area.Left, area.Bottom - area.Top, SRCCOPY);
: ReleaseDC (desktop, dt_dc);
: }
:
: 이렇게 하면 되는데, 메뉴는 이렇게 해서 그림으로 저장할 수가 없네요.
: 아마도 윈도우핸들 (HWND) 때문인 것 같기도 한데,
: 메뉴를 그림으로 캡쳐할려면, 어떻게 해야 하나요 ?
:
|