이글은 '선문비트 고급과정'에서 강의받은 내용을 토대로 작성하였으며, 비트 교육센터 자료를 참고하여 올린내용입니다. 문제가 될시 삭제가 될 수 있습니다.
작성날짜 : 2011-03-22 |
ATL ActiveX
Visual Basic 으로 구현 할 수도 있다.
MFC Library와 C++의 차이점.
- 다중 상속하지 않음.
- Template 을 사용 하지 않음
CComControl
- CWindowImpl의 기능
- 새로운 윈도우를 생성, 기존의 윈도우를 슈퍼 클래싱할 수 있는 구현 코드 제공
- 고유 기능
- 컨트롤의 윈도우 생성
- 컨트롤의 속성이 변경되기 전과 후에 컨테이너에게 그 사실을 알려주는 함수제공
컨테이너가 지원하는 IOleInPlaceSiteWindowless, IDataAdviseHolder, IOleAdviseHolder, IOleClientSite, IAdviseSink 인터페이스와 환경 속성을 제공하는 IDispatch 인터페이스 포인터를 관리
수퍼 클래싱과 서브 클래싱
하나의 길이 있다고 가정할 때.
서브 클래싱 : 샛길을 만들어 내는 방법.
수퍼 클래싱 : 아예 새로운 길을 만드는 방법.
ATL 인터페이스 클래스
- ATL Object Wizard의 Controls 카테고리
- Full version
- 모든 컨테이너에서 사용가능
- Full Control, HTML Control, Composite Control
- Lite version (인터넷의 특화)
- 인터넷 익스플로어에서 사용가능
- Lite Control, Lite HTML Control, Lite Composite Control
- 컨트롤의 인터페이스 구현 코드 제공
- interfacenameImpl
Lite Control 유형이 지원하는 인터페이스
지원 인터페이스 | 설 명 |
IOleObject | 컨트롤이 포함개체로서 컨테이너와 통신할 수 있는 기능 제공 |
IOleInPlaceActiveObject | IOleObjecImpl 클래스가 이 인터페이스의 디폴트 구현 코드 제공 컨트롤이 컨테이너 안에서 활성화 상태가 될 때 컨테이너와 통신할 수 있는 기능 제공. IOleInPlaceActiveObjectImpl 클래스가 이 인터페이스의 디폴트 구현 코드 제공 |
IOleContol | 키 입력, 환경 속성 등에 대하여 컨트롤이 컨테이너와 통신 할 수 있는 기능 제공. IOleControlImpl 클래스 디폴트 구현 코드 제공 |
IPersistStreamInit | 컨테이너가 하나의 스트림 안에 속성의 초기값과 속성값 저장을 컨트롤에게 요청할 수 있게 함. IPersistStreamInitInmp 클래스 디폴트 구현 코드 제공 |
IOleInPlaceObject | 컨트롤의 활성화/비활성화를 관리하며, 컨트롤이 나타나야 하는 영역 크기 결정 |
IOleInPlaceObjectWindowless | 윈도우 없는 컨트롤이 윈도우 메시지를 받고, 마우스 끌어놓기에 참여할 수 있도록 한다. IOleInPlaceObjectWindowlessImpl 클래스는 이 Interface와 IOleInPlaceObject 의 디폴트 구현 코드 제공 |
IViewObject IViewObject2 IViewObjectEx | IViewObject와 IViewObject2 는 컨트롤이 자신을 컨테이너 안에 나타내는 기능을 제공. IViewObjectEx는 윈도우 없는 컨트롤이 그리기 최적화를 할 수 있는 기능 제공. IViewObjectImpl 디폴트 코드 제공 |
ATL 윈도우 클래스
- CWindow
- 윈도우 핸들 저장 데이터 멤버
- m_hWnd
- 윈도우 관련 Wind32 API 함수 캡슐화 메소드
- CWindowImpl, CDialogImpl 클래스를 파생
- CWindowImpl, CDialogImpl
- ATL에서 윈도우와 다이얼로그를 생성할 수 있게 해줌
- 메시지 맵 매커니즘 지원
BEGIN_MSG_MAP(CMyWindow) MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown) END_MSG_MAP() |
MessageMap : 함수포인터 배열
LRESULT MessageHandlerName( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); BOOL &bHandled TRUE : 메시지가처리된경우 FALSE : 메시지가처리되지않은경우로, 다른메시지함수를찾는다. |
- 다른 메시지 맵으로도 전달 기능
BEGIN_MSG_MAP(CMyWindow) MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown) CHAIN_MSG_MAP(CAnotherWindow) END_MSG_MAP() CHAIN_MSG_MAP(메시지맵이정의된다른클래스명) |
'Programming > COM' 카테고리의 다른 글
[COM] ActiveX Control 배포 (0) | 2015.05.11 |
---|---|
[COM] 복합 컨트롤 (0) | 2015.05.11 |
[COM] ActiveX Control(Graph) (0) | 2015.05.11 |
[COM] ATL / COM (0) | 2015.05.11 |
[COM] IDL (0) | 2015.05.11 |