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
[16170] Re:[질문]폼에 창문그리기.
Julien [julien] 1110 읽음    2002-03-10 23:16
OnResize 에서 Invalidate() 를 수행해보세요

유지상 님이 쓰신 글 :
: 폼에 한문에서의 밭전 자와 같은 모양으로 창문을 그리려고 다음과 같이 코딩했습니다.
:  
: void __fastcall TForm1::FormPaint(TObject *Sender)
: {
:   Canvas->Pen->Color = clRed;
:   Canvas->Pen->Width = 3;
:   Canvas->Brush->Style = bsClear;
:   TRect rect = ClientRect;
:   Canvas->Rectangle(rect);
:   Canvas->MoveTo(0,rect.Height()/2);
:   Canvas->LineTo(rect.Width(),rect.Height()/2);
:   Canvas->MoveTo(rect.Width()/2,0);
:   Canvas->LineTo(rect.Width()/2,rect.Height());
: }
:
: 그런데 이렇게 코딩해서 실행해보면 폼을 리사이즈할 때나, 또는 폼이 부분적으로 다른 윈도우에 위해 가려졌다가 다시 나타나는 경우에 창문모양이 원하던 대로 안나오고 이상하게 변형됩니다.
: 아마도 무효화영역이 생기는 문제와 연관된 것 같습니다.
:
: 폼에 창문 그리는 또다른 방법은 위의 코드를 페인트박스의 OnPaint헨들러에 아래와 같이 코딩하고 나서, 그 페인트박스의 Align속성을 alClient로 바꾸는 방법입니다.
: void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
: {
:   PaintBox1->Canvas->Pen->Color = clRed;
:   PaintBox1->Canvas->Pen->Width = 3;
:   TRect rect = PaintBox1->ClientRect;
:   PaintBox1->Canvas->Rectangle(rect);
:   PaintBox1->Canvas->MoveTo(0,rect.Height()/2);
:   PaintBox1->Canvas->LineTo(rect.Width(),rect.Height()/2);
:   PaintBox1->Canvas->MoveTo(rect.Width()/2,0);
:   PaintBox1->Canvas->LineTo(rect.Width()/2,rect.Height());
: }
: 이 방법의 경우는 폼을 리사이즈하거나 폼이 가려졌다가 다시 나올 경우에도 아무 문제가 안생깁니다.
:
: 재 생각에는 이 차이가 무효화영역이 설정되는 것의 차이인 것 같습니다.
: 페인트박스에 그리는게 아니라, 폼에다 직접 그리는 경우 생기는 이러한 문제를 없애려면 어떻게 해야되죠?
: 폼에 무언 가를 그릴 경우는 폼에 직접 그리는 것보다는 Align속성이 alClient인 페인트박스를 이용하는 것이 정석인가요?
:
:

+ -

관련 글 리스트
16152 [질문]폼에 창문그리기. 유지상 875 2002/03/09
16170     Re:[질문]폼에 창문그리기. Julien 1110 2002/03/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.