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
[64547] Re:TCanvas 관련 질문 입니다. 답변 부탁드립니다..
송신영 [palindrome] 1783 읽음    2011-06-09 12:12
그리거나 지우거나 할 경우 최종적으로 출력되는 부분은 화면 하나라는 사실입니다.
그래서 이미 화면에 출력된 여러개의 그림은 하나의 그림이라고 볼수 있습니다.
이것을 각각 분리하는 것은 불가능하죠
그래서 그림판이나 그런 그리기 툴에서는 그리는 부분은 한곳에서 처리하고
그리고자하는 내용을 수치상의 데이터로만 관리해야합니다.
내가 사각형을 그린다고 치면 그려지는 사각형의 데이터(좌표값, 색상, 굵기등..)만 설정하고 유지한상태로
그려지는 부분에 데이터가 준비되었으니 그리라는 명령만해주면 그리는 쪽에서는
데이터를 기준으로 그리기만하면됩니다.
그려지는 데이터가 여러개이면 해당 데이터도 여러개로 관리해야합니다.
그러면 나중에 내가 그린 특정한 부분만 다시 지우고자 할경우
해당 데이터만 삭제시키고 다시 그리면 삭제된 데이터 부분만 안그려 지겠죠
그림판등에서 그리기 취소등의 동작은 이런 식으로 이루어지는 것입니다.
즉, 최종 출력 물인 DC나 Canvas를 가지고 어떻게 하려고 하지 말고
따로 그려지는 수치상의 데이터를 관리해야한다는 것입니다.

김현우 님이 쓰신 글 :
: 안녕하세요.
: TCanvas 관련해서 질문 드립니다
: 제가 아래 와 같이 버튼(정사각형)으로 정사각형을 Panel1 에 만들었는데요..
: 만든 정사각형외각을 드래그해서 모양도 바꾸는 것까지는 했습니다.
:
:  그런데 다른 버튼(다각형)을 하나 새로 만들어서 Panel1에 또 다른 도형을 추가 하려고 합니다.
:
: 그러면 Panel1 에 정사각형과 또다른 도형이 그려지는데요..
: 저는 그 두개의 도형이 서로다른 Canvas로 개별적으로 지우거나 모양을 변형 시키고 싶은데요..
: 제가 (TCanvas *Canvas = new TCanvas;)  TCanvas를 할당 하였는데
: 그 그림을 지우려고 하면 하면 두개 도형이 같이 없어지잖아요...
: 개별적으로 그려지거나 지우거나 할수 없나요
: Panel1 안에 서로 다른 여러 Canvas를 그려지게 하고 싶습니다.
: 배열처럼 여러개로 할 수 는 없는지 방법을 찾고 있는데 .. 아직 못찾고 있습니다. ㅠㅠ
: 질문의 요지를 최대한 정리하려고 했는데요 이해가 되시는분 부탁드립니다. ㅠㅠ.;;
:
:  void __fastcall TForm1::RECClick(TObject *Sender)
: {      
:         TCanvas *Canvas = new TCanvas;
:         HDC hdc;
:         hdc = NULL;
:
:         hdc = GetDC(Panel1->Handle);
:         Canvas -> Handle = hdc;         
:         Canvas -> Pen -> Width = 1;
:         Canvas -> Pen -> Color = clRed;
:         Canvas -> Pen -> Style = psSolid;
:         Canvas -> Brush -> Style = bsClear;
:
:         Canvas -> Rectangle(X1,Y1,X2,Y2);
:         ReleaseDC(Handle,hdc);
:         delete Canvas;
:         GetRec = true;
: }
: void __fastcall TForm1::POLYClick(TObject *Sender)
: {
:         TCanvas *Canvas = new TCanvas;
:         //TCanvas canvas[5];
:         HDC hdc;
:         hdc = NULL;
:
:         hdc = GetDC(Panel1->Handle);
:         Canvas -> Handle = hdc;             Canvas -> Pen -> Width = 1;
:         Canvas -> Pen -> Color = clGreen;
:         Canvas -> Pen -> Style = psSolid;
:         Canvas -> Brush -> Style = bsClear;
:
:         TPoint points[9];
:         points[0] = Point(px0,py0);
:         points[1] = Point(px1,py1);
:         points[2] = Point(px2,py2);
:         points[3] = Point(px3,py3);
:         points[4] = Point(px4,py4);
:         points[5] = Point(px5,py5);
:         points[6] = Point(px6,py6);
:         points[7] = Point(px7,py7);
:         points[8] = Point(px8,py8);
:
:         pCanvas->Polygon(points,PolySize);
:         ReleaseDC(Handle,hdc);//
:         delete Canvas;
:         GetPoly = true;
: }

+ -

관련 글 리스트
64545 TCanvas 관련 질문 입니다. 답변 부탁드립니다.. 김현우 1275 2011/06/09
64547     Re:TCanvas 관련 질문 입니다. 답변 부탁드립니다.. 송신영 1783 2011/06/09
64550         Re:Re:답변감사합니다 ~~~!! 김현우 1312 2011/06/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.