합성 컨트롤에 필요한 컨트롤을 삽입 한 후 다음 단계에서는 새로운 기능을 추가 합니다. 이 새로운 기능은 일반적으로 두 가지 범주로 떨어지는:
목적 및 범위가 문서의이 섹션의 나머지 부분 전적에 초점을 맞추고 이벤트 처리。
이벤트를 처리 하는 포함 된 각 컨트롤에 대 한에서 파생 하 여 이벤트 디스패치 인터페이스를 구현 해야 합니다는 IDispEventImpl 템플릿 클래스. 이 파생 합성 컨트롤의 선언에서 이루어집니다과 두 개의 매개 변수 구성
IDispEventImpl 인터페이스 컨트롤을 선언 하는 기본 클래스 선언에 다음 예제 코드 줄 ( IDC_CIRCCTRL1 ), 합성 컨트롤 클래스에 대 한 ( CMyCompositeCtrl )。
공용 IDispEventImpllt, IDC_CIRCCTL1, CMyCompositeCtrl & gt;
디스패치에 포함 된 각 컨트롤에 대 한 이벤트 클래스를 선언 후 합성 컨트롤 개체에 이벤트 싱크 맵을 추가 해야 합니다. 이 지도 두 가지를 달성:
여러 가지 미리 정의 된 매크로 사용 하 여 이벤트 싱크 맵을 구현합니다:
BEGIN_SINK_MAP(CtrlName)
CtrlName 합성 컨트롤에 대 한 이벤트 싱크 맵 시작 선언。
SINK_ENTRY(CtrlID, DispIID, dispID, EventHandler)
CtrlID 식별 된 컨트롤에 대 한 디스패치 인터페이스 DispIID의 (dispID), 지정 된 이벤트 처리기 함수 (EventHandler) 선언。
CtrlName 합성 컨트롤에 대 한 이벤트 싱크 맵 끝을 선언。
다음 코드 예제에서는 (에 위치 합니다.합성 컨트롤의 CPP 파일)에 대 한 이벤트 싱크 맵을 선언 합니다 CMyCompositeCtrl 개체. 그것은 두 개의 포함 된 컨트롤에 대 한 두 명의 이벤트 처리기를 선언 ( IDC_CIRCCTL1 및 IDC_CIRCCTL2 ). 두 컨트롤의 Click 이벤트에 의해 처리 되는 OnClick_CircCtrl1 및 OnClick_CircCtrl2 함수。
BEGIN_SINK_MAP(CMyCompositeCtrl)
nbsp; SINK_ENTRY (IDC_CIRCCTL1, DISPID_CLICK, OnClick_CircCtrl1)
? SINK_ENTRY (IDC_CIRCCTL2, DISPID_CLICK, OnClick_CircCtrl2)
END_SINK_MAP()(&N)
합성 컨트롤에 대 한 이벤트 처리기를 구현 하려면 이벤트 싱크 맵을 선언 된 후 진행。
이벤트 싱크 맵을 단계 선언에 포함된 된 두 개의 Circ 컨트롤에 대 한 두 명의 이벤트 처리기를 선언 하는 새로운 지도 추가 했습니다. 이제 이러한 처리기를 구현 하는 시간 이다입니다. 형식은 다음과 같습니다.:
retVal __stdcall EventHandler (args)
{
nbsp; //handle 이벤트를 적절 하 게 발생
}(&N)
어디 retVal 이벤트 처리기의 반환 값은 EventHandler 함수 처리기 이름입니다 및 args 이벤트에 대 한 인수의 선택적 목록입니다. 이 이름은 이벤트 처리기에서 합성 컨트롤의 이벤트 싱크 맵을 선언 중 하나를 일치 해야 합니다.
다음 코드 예제에서는 이벤트 처리기 (Click 이벤트)로 식별 하는 포함 된 컨트롤에 대 한 정의IDC_CIRCCTRL1:
이번 주 __stdcall void OnClick_CircCtrl1)
{
nbsp; MessageBox ("click 해!", "CircCtl1", MB_OK);
}(&N)
나머지 항목에 대 한 이벤트 처리기는 이벤트 싱크 합성 컨트롤의 지도 추가。
합성 컨트롤 완전히 활성화 되기 전에 포함 된 각 컨트롤의 이벤트를 처리 하는 이벤트 디스패치 인터페이스와 같은 나가는 인터페이스에 대 한 쿼리 됩니다. 모든 인터페이스를 발견 하는 경우 연결을 설정 하 고 나가는 인터페이스에 대 한 참조를 컨트롤에서 이벤트를 처리 하는 데. 이 절차를 "컨트롤 자문" 이라고 하 고 합성 컨트롤의 초기화 이벤트 싱크 맵을 사용 하 여 합성 컨트롤 개체에 의해 자동으로 이루어집니다.
사용자가 대화 상자를 기 각, 후 모든 저장된 참조 보내는 인터페이스 포함 된 컨트롤에서 정리 됩니다. 이 "컨트롤 unadvising" 이라고 하 고 복합 컨트롤에 의해 자동으로 수행도。