이글은 '선문비트 고급과정'에서 강의받은 내용을 토대로 작성하였으며, 비트 교육센터 자료를 참고하여 올린내용입니다. 문제가 될시 삭제가 될 수 있습니다.
작성날짜 : 2011-03-22 |
복합 컨트롤
- 여러 개의 컨트롤을 사용하여 사용자 인터페이스를 구성하는 ActiveX 컨트롤
- CComCompositeControl 템플릿 클래스에서 파생
class ATL_NO_VTABLE CUpDown : . . . public CComCompositeControl<CUpDown>, . . . { |
CComCompositeControl
- CAxDialogImpl 템플릿 클래스로 구현되는 대화상자를 포함하는 CComControl 컨트롤을 구현
- 대화상자 구현(열거형 변수 IDD)
- 표준 컨트롤, 윈도우 공통 컨트롤, 커스텀 컨트롤 포함 가능
template <class T> class CComCompositeControl : public CComControl< T, CAxDialogImpl< T > > |
복합 컨트롤 클래스 생성
- ATL COM AppWizard
- DLL
- ATL Object Wizard
- Controls
- Conposite Control or Lite Conposite Control
- 자동으로 빈 다이얼로그 리소스 생성
다이얼로그 사용자 인터페이스 및 코드 구현
- 사용자 인터페이스 구성
- 표준 컨트롤, 윈도우 공통 컨트롤, 커스텀 컨트롤, ActiveX 컨트롤 포함 가능
- ActiveX Control 포함시 오른쪽 마우스 클릭을 통해 Insert ActiveX Control 선택
- 포함된 컨트롤 제어 방법
- API 함수 호출
- CWindow, CDialogImpl, CAxDialogImpl 클래스의 멤버 함수 호출
- SendMessage API 함수 또는 CWindows 정적 함수 호출
- 이벤트 핸들러
- 메시지 맵에 메시지 핸들러 추가
- VC++ 6.0 이후, [New Windows Messagte and Event Handlers] 대화 상자를 이용해 이벤트 핸들러 자동 추가 기능 지원
- Workspace윈도우의 ClassView탭에서 사용자 컨트롤 클래스 노드를 오른쪽 마우스 클릭하고 [New Windows Message Handlers] 선택
포함된 ActiveX 컨트롤의 이벤트 핸들러 구성
- ActiveX 임포트
#import "D:\EXAMPLE\CIRCLE\DEBUG\CIRCLE.DLL" raw_interfaces_only, raw_native_types, no_namespace, named_guids |
- 사용자 컨트롤 클래스의 베이스 클래스에 IDispEventImpl 템플릿 클래스 추가
class ATL_NO_VTABLE CTest : . . . public IDispEventImpl<IDC_CIRCLECTRL1, CTest> . . . |
- 사용자 컨트롤 클래스에 이벤트 싱크 맵
BEGIN_SINK_MAP(CTest) //Make sure the Event Handlers have __stdcall calling convention SINK_ENTRY(IDC_CIRCLECTRL1, 0x1, OnCircleClickInCirclectrl1) END_SINK_MAP() |
- 이벤트 핸들러 구현 코드
VOID __stdcall OnCircleClickInCirclectrl1(INT x, INT y) { // TODO : Add Code for event handler. } |
IDispEventImpl
- ATL COM 개체에 커넥션 포인트 기능을 제공
- 대화상자에 포함된 ActiveX 컨트롤에 대해 각각 하나의 IDispEventImpl 클래스 필요
class ATL_NO_VTABLE CTest : . . . public IDispEventImpl<IDC_CIRCLECTRL1, CTest> . . . IDC_CIRCLECTRL1 // 대화상자에포함된ActiveX 컨트롤의리소스ID CTest // 복합컨트롤사용자클래스명 |
- 이벤트 싱크 맵
BEGIN_SINK_MAP(CTest) SINK_ENTRY(IDC_CIRCLECTRL1, 0x1, OnCircleClickInCirclectrl1) END_SINK_MAP()
IDC_CIRCLECTRL1 // ActiveX 컨트롤의리소스ID 0x1 // 이벤트의DISPID OnCircleClickInCirclectrl1 // 이벤트핸들러명 |
- 복합컨트롤이 완전히 활성화되기 전에 각각의 ActiveX 구성 컨트롤은 이벤트 인터페이스를 요청한다.
- 이벤트 인터페이스가 발견되면 커넥션이 성립되고 이벤트 인터페이스가 컨트롤에서 이벤트를 처리하는데 사용됨
'Programming > COM' 카테고리의 다른 글
[COM] Form View (0) | 2015.05.11 |
---|---|
[COM] ActiveX Control 배포 (0) | 2015.05.11 |
[COM] ATL ActiveX (0) | 2015.05.11 |
[COM] ActiveX Control(Graph) (0) | 2015.05.11 |
[COM] ATL / COM (0) | 2015.05.11 |