|
그리거나 지우거나 할 경우 최종적으로 출력되는 부분은 화면 하나라는 사실입니다.
그래서 이미 화면에 출력된 여러개의 그림은 하나의 그림이라고 볼수 있습니다.
이것을 각각 분리하는 것은 불가능하죠
그래서 그림판이나 그런 그리기 툴에서는 그리는 부분은 한곳에서 처리하고
그리고자하는 내용을 수치상의 데이터로만 관리해야합니다.
내가 사각형을 그린다고 치면 그려지는 사각형의 데이터(좌표값, 색상, 굵기등..)만 설정하고 유지한상태로
그려지는 부분에 데이터가 준비되었으니 그리라는 명령만해주면 그리는 쪽에서는
데이터를 기준으로 그리기만하면됩니다.
그려지는 데이터가 여러개이면 해당 데이터도 여러개로 관리해야합니다.
그러면 나중에 내가 그린 특정한 부분만 다시 지우고자 할경우
해당 데이터만 삭제시키고 다시 그리면 삭제된 데이터 부분만 안그려 지겠죠
그림판등에서 그리기 취소등의 동작은 이런 식으로 이루어지는 것입니다.
즉, 최종 출력 물인 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;
: }
|