|
메뉴라면..
파일, 편집, 보기 이런 메뉴들을 말씀하시는 건지요..?
이것들을 전부 펼쳐진 상태로 캡쳐를 하시기 원하시는 건가요?
하느리 님이 쓰신 글 :
: 우선 답변 감사드립니다.
: 저도 처음에는 그렇게 생각했습니다. 그래서 이것저것 해 보는데(영인님이 설명하신 것을 포함하여), 않되는군요. 시작메뉴라든가 각 프로그램에 있는 메뉴를 캡쳐할 수가 없네요.
:
: 참고로 현재 프로그래밍하고 있는 운영체제는 XP입니다.
:
:
:
: 유영인.Chris 님이 쓰신 글 :
: : 메뉴라면 어떤 메뉴를 말씀하시는 건지요.
: :
: : 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) 때문인 것 같기도 한데,
: : : 메뉴를 그림으로 캡쳐할려면, 어떻게 해야 하나요 ?
: : :
|