C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[37366] Re:canvas 의 크기만큼 bitmap 을 생성해서 그릴 때.
박지훈.임프 [cbuilder] 1067 읽음    2004-09-22 15:14
this 포인터는 아마도 폼일테고...
비트맵에 미리 그려놓고 그걸 폼에 엎어씌우려는 것인지요.
어떤 목적이든, 보여주신 코드에는 좀 문제가 있습니다.

비트맵을 생성한 직후 비트맵의 캔바스에는 이미 DC가 할당된 상태입니다.
또 폼의 캔바스에도 DC가 할당된 상태이구요.
따라서 보여주신 것처럼 비트맵 캔바스의 DC 핸들에 폼 캔바스의 DC 핸들을 할당해버리면 원래의 비트맵 캔바스 핸들은
갈곳을 잃어버리고 누수(leak)됩니다.

또한 비트맵과 폼의 캔바스 각각에 이미 생성되어 할당된 DC가 있으므로 어떤 이유이든 그넘들을 ReleaseDC()를
해버리면 문제가 생깁니다.

아마도 빈 TCanvas 객체를 생성해서 다른 객체의 DC를 할당하고 그림을 그리는 루틴을 보시고 따라하신 듯 한데,
그러려면 비트맵의 캔바스가 아니라 그냥 캔바스 객체만 생성해서 그려주셔야 합니다.
TCanvas *MyCanvas = new TCanvas;
MyCanvas->Handle = 어떤DC;

위의 코드는 주로 API 코딩을 통해 VCL 컴포넌트가 아닌 API 객체의 DC를 생성하거나 얻어왔을 경우, 그 DC에 그림을
그리는 작업을 간단히 하기 위해 흔히 쓰는 코드입니다. 주로 메시지핸들러 등에서 쓰이지요.
따라서 원하시는 결과가 무엇인지는 모르겠으나 위의 코드가 이 경우에 적용할 수 있는 것이 아닙니다.

만약 비트맵에 미리 그려놓고 폼에 한번에 엎으려고 하는 것이라면,
Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
pBitmap->Canvas 에 그림.
this->Canvas->Draw(0, 0, pBitmap);
delete pBitmap;
이것만으로 충분합니다.

그럼...


잠스타 님이 쓰신 글 :
: bitmap 에 그린 후 canvas 에서 한번에 bitmap 을 그릴려고 합니다.
:
: Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
: HDC hdc = ::GetDC(this->Canvas->Handle);
: pBitmap->Canvas->Handle = hdc;
: pBitmap->Width = this->Width;
: pBitmap->Height= this->Height;
:
: //pBitmap->Canvas 에 그림.
:
: this->Canvas->Draw(0, 0, pBitmap);
: ::ReleaseDC(pBitmap->Canvas->Handle, hdc);
: delete pBitmap;
:
: 이런 식으로 되어 있습니다. 여기서 궁금한건,
: 현재 canvas 의 handle 을 구해서 bitmap 의 canvas 의 handle 에 붙이는게 맞는가요?
: 또 다 쓰고 해제할 때, bitmap의 canvas 의 handle 에서 GetDC 로 구한 hdc 를 해제하는 게 맞는지 햇갈림니다..
:
: 이렇게 bitmap 을 생성해서 그릴 때, handle 을 붙여서 사용하는지도 궁금하고요...
: 답변 부탁드릴께요...

+ -

관련 글 리스트
37359 canvas 의 크기만큼 bitmap 을 생성해서 그릴 때. 잠스타 981 2004/09/22
37366     Re:canvas 의 크기만큼 bitmap 을 생성해서 그릴 때. 박지훈.임프 1067 2004/09/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.