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
[55184] Re:[질문] Panel 초기화
장성호 [nasilso] 1626 읽음    2008-11-13 21:32
음 먼저

Panel의 dc에 그린이미지를 지우고 싶다면?

그냥 Panel->Repaint(); 호출해주면 됩니다.

Panel1->Refresh; 요런것도 있구요

아래코드도 메세지를 보내어서 다시 그리라는 것이구요

SendMessage(Panel->Handle,WM_PAINT,0,0);
Panel->Perform(WM_PAINT,0,0);

Panel1->Invalidate(); //바뀐부분만 갱신한는것입니다.



그리고 님의 코드에 한가지 문제점이 있는데요

TCanvas 는 new한후에 delete를 잘 해주셨는데요

m_plmgDraw->Handle = GetDC(Panel1->Handle);

를 하여 사용을 다한후에

ReleaseDC(Panel1->Handle, m_plmgDraw->Handle);
를 해줘야 합니다.

반복해서 호출하면 dc가 계속 늘어납니다.

윈도우즈 작업관리자 프로세서탭에서 보기옵션에서 "GDI 개체"를 선택한후에

GetDC를 하면 GDI개체가 계속 증가할것입니다.

반드시 ReleaseDC를 해줘야 GDI개체가 증가하지 않습니다.
계속 반복해서 GetDC를 하게된다면
언젠가 프로그램은 뻗어버리게 될것입니다.

그럼..



양진욱 님이 쓰신 글 :
: Graphics::TBitmap *TheGraphic = new Graphics::TBitmap();
:
:                              switch(ID){
:                                case 11 : TheGraphic->LoadFromFile("11.bmp");
:                                          TCanvas *m_plmgDraw;
:                                          m_plmgDraw = new TCanvas;
:                                          m_plmgDraw->Handle = GetDC(Panel1->Handle);
:
:                                          m_plmgDraw->Draw(AixX,AixY,TheGraphic);
:                                          delete m_plmgDraw; break;
:
: 위의 소스를 이용하여 Pannel 위에 그림을 찍었습니다. 그런다 다음 값이 들어와서 패널에 다시 찍으니까
: 이전에 찍었던 그림이 그대로 있습니다. 패널 위에 찍었던 그림을 지우거나 초기화 하는 방버좀 알려주세요
:
: ㅜㅜ
:
: 부탁드립니다.

+ -

관련 글 리스트
55183 [질문] Panel 초기화 양진욱 1320 2008/11/13
55184     Re:[질문] Panel 초기화 장성호 1626 2008/11/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.