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

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[145] [팁] C++ Builder의 프로그래밍 모델
박지훈.임프 [cbuilder] 9290 읽음    2001-07-30 16:33
이 팁은 담비님(천리안 FREKBS)님이 1999년 04월 08일에 천리안 프로그래머포럼에 올리신 것입니다.
담비님으로부터는 전제하여 올리는 데 대해 허락을 받았습니다.
좋은 정보를 공유하도록 허락해주신 담비님께 감사드립니다.
───────────────────────────────────────

안녕하세요! 담비입니다.

출처 : http://www.inprise.co.jp/tips/cbuilder/cb004/index.html

C++ Builder의 프로그래밍 모델
───────────────

이 문서는, C++ Builder에서의 프로그래밍의 사고방식을 설명한다. 프로그래밍의
중심이 되는 컴포넌트의 기능과 유용성에 관하여, 기존의 클래스 라이브러리와의
비교를 섞어 해설한다.

1. 컴포넌트
C++ Builder 어플리케이션은 컴포넌트를 사용해 구축한다. 컴포넌트는 어플리게이션
윈도우가 되는 폼과 단추, 에디트박스 등을 캡슐화한 것으로부터, 데이타베이스에
대한 엑세스와 타이머 기능을 사용한것까지 다양하다.
컴포넌트에는, 프로퍼티라는 컴포넌트의 상태를 정의하는 많은 항목이 있다.
프로퍼티를 참조하고, 컴포넌트의 상태를 취득할 수 있다. 또, 프로퍼티를 변경하여,
콤포넌트의 상태에 변경을 가할수도 있다. 또, 콤포넌트에는 콤포넌트를 조작하는데
사용하는 메소드가 준비되어 있다. 메소드는 콤포넌트의 기능을 이용하는데
사용되어지는 콤포넌트의 멤버함수이다.
콤포넌트에 상태변화가 일어나면, 콤포넌트는 이벤트를 발생시킨다. 프로그램은
각각의 콤포넌트의 이벤트에 응답하는 특수한 처리를 행하는 함수(이벤트 핸들러)를
기술한다.

2. VCL
C++ Builder의 Visual Component Library - VCL은, Win32 어플리케이션을 구성하고
있는 부품을 캡슐화한 콤포넌트라는것을 제공을 제공한다. 콤포넌트는 C++ Builder의
종합개발환경에있어서, 비쥬얼한 개발을  할수있는 기능을 가지고 있다. 컴포넌트로
사용된 Win32 어플리케이션의 부품은, 비쥬얼 환경에서 그 배치나 속성을 정의하고,
이벤트 핸들러를 정의할 수 있다.
VCL이 제공하는 기능은, 컴포넌트 팔레트에 등록된 컴포넌트만이 아니다.
VCL에서는, 컴포넌트 팔레드에 등록되어 있는 않은 컴포넌트나, 컴포넌트의
프로퍼티를 독립적으로 사용할 수 있는 오브젝트 또한 제공한다. 이것들의 구성
요소는 C++ builder의 어플리케이션에 있어서의 코딩에서 그 위력을 발휘한다.
예로, 레지스트리에 대한 엑세스, multi-thread, 프린트에 대한 엑세스 등이며
이것들의 기능은 모든 VCL에 의해 캡슐화되어 있다.  또 문자열 리스트나 비트맵등의
오브젝트도, VCL에 의해 제공되는 기능의 한가지이다.

3. PME 모델
VCL에 의해 제공되는 이것들의 기능은 대부분이 C++ Builder의 통합 개발환경에 의해
비주얼하게 조작할 수 있다. 컴포넌트를 폼상에 배치하고, 프로퍼티와 이벤트를
설정한다라고 하는 C++ Builder의 개발 스타일을 이용하면, 코딩에 의해 이것들의
컴포넌트를 작성하거나 조작할 필요가 없어진다. C++ Builder의 폼 디자이너를
사용해 설계하고, 적절한 콤포넌트의 이벤트 핸들러에 몇 행을 추가하는 것에 의해
많은 C++ Builder 어플리케이션을 작성할 수 있다.
C++ Builder의 컴포넌트가 다른 C++의 클래스와 크게 다른 점은, 컴포넌트는 계승해
사용하는 것이 아니라, 그대로 이용된다는 점이다. 컴포넌트를 사용하는데 있어서,
중요한 방침은, 가능한 한 컴포넌트에 의해 제공되는 프로퍼티나 메소드를
이용한다는 것이다.
컴포넌트의 동작을 변경시키기 위해서는 먼저, 컴포넌트가 게공하는 프로퍼티를
이용하는것을 검토한다. 프로퍼티 중에는 컴포넌트의 외관이나 동작을 변경하는 것도
있다. 이것들의 프로퍼티를 이용하면, 설계시에 그 외관을 확인할수 있다.
컴포넌트의 메소드는, 컴포넌트의 기능을 이용하지만, 특정의 이벤트 핸들러에서
이것들의 기능을 사용하면 정의된 액션을 일으켰을 때에, 이것들의 기능이
실행되도록 할 수 있다.

4. 기존의 클래스 라이브러리와의 다른점
VCL이 기존의 윈도우즈 클래스 라이브러리와 가장 다른점은 "그대로 사용한다"는
점으로, 구체적인 코딩에서 볼수있다.
OWL의 대표적인 튜터리얼인 draw 프로그램에서는 draw의 대상이 되는 윈도우상에서
마우스 왼쪽 단추에 의해 행해지는 draw의 처리를 실현하기 위해서 TWindow를 계승한
TDrawWindow를 작성했다. 이 클래스에서는, WM_LBUTTONDOWN, WM_LBUTTONUP 및
WM_MOUSEMOVE 이벤트에 응답하기 위해서, 응답 TABLE을 기술한다.

   DEFINE_RESPONSE_TABLE1(TDrawWindow, TWindow)
       EV_WM_LBUTTONDOWN,
       EV_WM_LBUTTONUP,
       EV_WM_MOUSEMOVE,
   END_RESPONSE_TABLE;


그리고, 이것들의 이벤트에 응답하는 함수를 기술한다. 예로 WM_LBUTTONDOWN에
응답하는 EvLButtonDown함수는, 다음과 같다.

   void TDrawWindow::EvLButtonDown(unit, TPoint& point)
   {
       Invalidate();
       if (!DragDC){
           SetCapture();
           DragDC = new TClientDC(*this);
           DragDC->MoveTo(point);
       }
   }


C++ Builder에서는 정말 단순하다. draw를 행하는 폼의 OnMouseDown 이벤트나
OnMouseUp, OnMouseMove에 이벤트 핸들러를 설정한다. 이것들의 이벤트의 설정은,
오브젝트 인스펙터의 Events 페이지에서 하는것만으로 충분하다. draw 대상도
Canvas 프로퍼티에 의해, 보다 고도에 캡슐화가 되어 있다. draw가 필요한경우에는
Canvas 프로퍼티를 사용하면, VCL은 필요한 디바이스 문맥을 준비한다.
application programmer가 이것들의 자원을 파기하거나 관리할 필요는 없다.

+ -

관련 글 리스트
145 [팁] C++ Builder의 프로그래밍 모델 박지훈.임프 9290 2001/07/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.