이제 추가 됩니다는 ClickIn 및 ClickOut 이벤트를 ATL 컨트롤. 화재 것은 ClickIn 이벤트 다각형 및 화재 내에서 사용자가 클릭 하는 경우 ClickOut 바깥쪽을 클릭할 경우。
지원 연결점 체크 box.nbsp; 선택 2 단계에서에서 모든 컨트롤을 만든 경우 만든이 IPolyCtlEvents .idl 파일에 인터페이스.? 참고 인터페이스 이름 밑줄로 시작 합니다. 이 인터페이스는 내부 인터페이스를 나타내는 규칙입니다. 따라서, COM 개체를 찾아볼 수 있는 프로그램은 사용자 인터페이스를 표시 하지 않기로 선택할 수 있습니다. 또한 통지.idl 파일에서 지원 연결점 추가 선을 나타내는 IPolyCtlEvents 기본 소스 인터페이스입니다. Source 특성 그래서 컨테이너에서이 인터페이스를 호출 하는 컨트롤에서 알림 소스 임을 나타냅니다(&N).
ClickIn 및 ClickOut 메서드를 추가 해야 하는 이제는 IPolyCtlEvents 인터페이스:
IPolyCtlEvents ClassView 및 팝업 메뉴에서 선택 추가...。void。ClickIn 메서드 이름 상자에。[in] long x, [in] long y 매개 변수 상자에。
보고 코드를 메서드로 추가 된.idl 파일을 확인 합니다 IPolyCtlEvents dispinterface.nbsp; 다음 동일한 절차를 사용 하 여 정의 하는 ClickOut 메서드와 동일한 매개 변수 및 반환 형식.? IPolyCtlEvents dispinterface를.idl 파일에는 이제이 같은 모양이(&N):
dispinterface _IPolyCtlEvents
{
속성:
방법:
[id(1), helpstring ("방법 ClickIn")] ClickIn 무효 ([에] 롱 [에서] 긴 y x);
[id(2), helpstring ("ClickOut 메서드")] ClickOut 무효 ([에] 롱 [에서] 긴 y x);
}
ClickIn및 ClickOut 메서드는 x 및 y 매개 변수로 클릭 한 지점의 좌표。
이제 형식 라이브러리를 생성 합니다. 이렇게 하려면 프로젝트를 다시 작성 또는 FileView .idl 파일을 마우스 오른쪽 단추로 클릭 하 여 컴파일 Polygon.idl를 클릭 합니다. 이 형식 라이브러리는 Polygon.tlb 파일을 만들 것입니다.
그런 다음 연결 지점 인터페이스 및 컨트롤의 연결 지점 컨테이너 인터페이스를 구현 합니다. (COM 이벤트 연결 지점 메커니즘을 통해 구현 됩니다. COM 개체에서 이벤트를 수신 하는 컨테이너는 COM 개체를 구현 하는 연결 지점에 자문 연결을 설정 합니다. COM 개체에는 여러 연결 지점을 가질 수 있습니다, 이후 COM 개체는 연결 지점 컨테이너 인터페이스를 구현 합니다. 이 인터페이스를 통해 컨테이너를 결정할 수 있는 연결 지점이 지원 됩니다.) 연결 지점을 구현 하는 인터페이스는 IConnectionPoint 를 호출 하 고 연결 지점 컨테이너를 구현 하는 인터페이스 IConnectionPointContainer 라고 합니다.
IConnectionPoint를 구현 하려면 ClassView 를 사용 하 여 연결 지점 마법사를 액세스 합니다. 이 마법사는 형식 라이브러리를 읽고 해 고 될 수 있는 각 이벤트에 대 한 함수를 구현 하 여 IConnectionPoint 인터페이스를 생성。
마법사를 실행 하려면 다음이 단계를 수행:

그것이 라는 클래스를 참조 하 FileView에서 생성 된 PolygonCP.h 파일을 보면 CProxy_PolyCtlEvents IConnectionPointImpl에서 파생 된. Polygoncp.h는 또한 두 개의 메서드를 정의 Fire_ClickIn 및 Fire_ClickOut , 어떤 두 개의 좌표 매개 변수. 이들은 귀하의 컨트롤에서 이벤트가 발생 하려고 할 때 호출 하는 방법。
마법사에도 추가 CProxy_PolyEvents 및 IConnectionPointContainerImpl 컨트롤의 다중 상속 list.nbsp; 마법사도 노출 IConnectionPointContainer 에 대 한 COM 지도에 적절 한 항목을 추가 하 여(&N)。
구현 하는 이벤트를 지원 하기 위해 코드가 완료 됩니다. 이제 적절 한 순간에는 이벤트를 발생 하는 경우에 코드를 추가 합니다. 기억, 화재 하려고 하는 ClickIn 또는 ClickOut 이벤트는 컨트롤에서 마우스 왼쪽된 단추를 클릭할 때. 확인 단추를 클릭할 때, 먼저 WM_LBUTTONDOWN 메시지에 대 한 처리기를 추가 합니다. ClassView에서 CPolyCtl 클래스를 마우스 오른쪽 단추로 클릭 하 고 바로 가기 menu.nbsp;에서 Windows 메시지 처리기 추가... 를 선택합니다 그런 다음 왼쪽에 있는 목록에서 WM_LBUTTONDOWN 를 선택 하 고 처리기 추가 단추를 클릭 합니다. 확인 을 클릭(&N)。
그런 다음 새 코드를 추가 (마법사에 의해 배치 하는 모든 코드를 삭제 하는) Polyctl.h의 OnLButtonDown 함수 OnLButtonDown 이제 다음과 같이 되도록:
LRESULT CPolyCtl::OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOLamp; bHandled)
{
HRGN hRgn;
WORD xPos = LOWORD(lParam);? / / 가로 커서의 위치
WORD yPos = HIWORD(lParam);? / / 수직 커서의 위치
CalcPoints(m_rcPos);
/ / 포인트의 우리의 목록에서 영역을 만듭니다
hRgn = CreatePolygonRgn (& m_arrPoint [0], m_nSides, 굴곡);
/ / 클릭 한 점은 우리의 다각형에는 ClickIn 다음 발생 합니다.
/ / 그렇지 않으면 우리가 이벤트가 ClickOut 이벤트
경우 (PtInRegion (hRgn, xPos, yPos))
Fire_ClickIn (xPos, yPos);
다른
Fire_ClickOut (xPos, yPos);
/ / 우리가 만든 영역 삭제
DeleteObject(hRgn);
0; 반환
}
때문에 다각형의 포인트를 이미 계산 합니다 OnDraw 함수, 그들을 사용 하 여 OnLButtonDown 영역을 만들. 그런 다음 PtInRegion API 함수를 사용 하 여 또는 다각형 안에 클릭된 포인트 인지 확인。
해당 uMsg 매개 변수는 처리 중인 Windows 메시지의 ID입니다. 이 통해 다양 한 메시지를 처리 하는 기능을 하나의 수 있습니다. wParam와 lParam 는 처리 되는 메시지에 대 한 표준 값입니다. 매개 변수 bHandled 함수 또는 메시지 처리 여부를 지정할 수 있습니다. 기본적으로 값은 TRUE 로 설정 나타내지만 메시지를 처리 하는 기능을 설정할 수 있습니다 FALSE. 이렇게 하면 메시지를 다른 메시지 처리기 함수에 대 한 보고를 계속 하는 ATL。
이제 귀하의 이벤트가 밖으로 보십시오. 컨트롤을 빌드하고 ActiveX 컨트롤 테스트 컨테이너 를 다시 시작 합니다. 이 시간 보기 이벤트 로그 window.nbsp; 출력 창에 이벤트를 라우팅할 옵션 메뉴에서 로깅을 선택 하 고 출력 창에는 로그를 선택 합니다. 이제 컨트롤을 삽입 하 고 창에서 클릭 하십시오. ClickIn채워진된 다각형 안에 클릭 하는 경우 발생 하는 및 ClickOut 그것의 외부를 클릭할 때 발생 하는(&N)。
다음 속성 페이지 추가。