MFC ActiveX 컨트롤: 사용자 지정 메서드 추가
사용자 지정 방법은 아직 에 의해 COleControl
구현되지 않았다는 점에서 주식 방법과 다릅니다. 컨트롤에 추가하는 각 사용자 지정 메서드에 대한 구현을 제공해야 합니다.
Important
ActiveX는 새로운 개발에 사용하지 않아야 하는 레거시 기술입니다. ActiveX를 대체하는 최신 기술에 관한 자세한 내용은 ActiveX 컨트롤을 참조하세요.
ActiveX 컨트롤 사용자는 언제든지 사용자 지정 메서드를 호출하여 컨트롤 관련 작업을 수행할 수 있습니다. 사용자 지정 메서드에 대한 디스패치 맵 항목은 DISP_FUNCTION 양식입니다.
메서드 추가 마법사를 사용하여 사용자 지정 메서드 추가
다음 절차에서는 ActiveX 컨트롤의 기본 코드에 사용자 지정 메서드 PtInCircle을 추가하는 방법을 보여 줍니다. PtInCircle은 컨트롤에 전달된 좌표가 원 내부 또는 외부에 있는지 여부를 결정합니다. 이 동일한 프로시저를 사용하여 다른 사용자 지정 메서드를 추가할 수도 있습니다. 사용자 지정 메서드 이름과 해당 매개 변수를 PtInCircle 메서드 이름 및 매개 변수로 대체합니다.
참고 항목
이 예제에서는 이벤트 아티클의 함수를 사용합니다 InCircle
. 이 함수에 대한 자세한 내용은 MFC ActiveX 컨트롤: ActiveX 컨트롤에 사용자 지정 이벤트 추가 문서를 참조하세요.
메서드 추가 마법사를 사용하여 PtInCircle 사용자 지정 메서드를 추가하려면
컨트롤의 프로젝트를 로드합니다.
클래스 뷰에서 컨트롤의 라이브러리 노드를 확장합니다.
컨트롤의 인터페이스 노드(라이브러리 노드의 두 번째 노드)를 마우스 오른쪽 단추로 클릭하여 바로 가기 메뉴를 엽니다.
바로 가기 메뉴에서 추가를 클릭한 다음, 메서드 추가를 클릭합니다.
그러면 메서드 추가 마법사가 열립니다.
메서드 이름 상자에 PtInCircle을 입력합니다.
내부 이름 상자에 메서드의 내부 함수 이름을 입력하거나 기본값(이 경우 PtInCircle)을 사용합니다.
반환 형식 상자에서 메서드의 반환 형식에 대한 VARIANT_BOOL 클릭합니다.
매개 변수 형식 및 매개 변수 이름 컨트롤을 사용하여 xCoord(OLE_XPOS_PIXELS 형식)라는 매개 변수를 추가합니다.
매개 변수 형식 및 매개 변수 이름 컨트롤을 사용하여 yCoord(OLE_YPOS_PIXELS 형식)라는 매개 변수를 추가합니다.
Finish를 클릭합니다.
사용자 지정 메서드에 대한 메서드 추가 마법사 변경 내용
사용자 지정 메서드를 추가하면 메서드 추가 마법사가 컨트롤 클래스 헤더()를 약간 변경합니다. H) 및 구현(. CPP) 파일. 다음 줄은 컨트롤 클래스 헤더()의 디스패치 맵 선언에 추가됩니다. H) 파일:
VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);
이 코드는 디스패치 메서드 처리기를 선언 PtInCircle
합니다. 이 함수는 외부 이름을 PtInCircle
사용하여 컨트롤 사용자가 호출할 수 있습니다.
다음 줄이 컨트롤의 .IDL 파일에 추가됩니다.
[id(1), helpstring("method PtInCircle")] VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);
이 줄은 메서드에 PtInCircle
특정 ID 번호, 메서드 추가 마법사 메서드 및 속성 목록에서 메서드의 위치를 할당합니다. 메서드 추가 마법사를 사용하여 사용자 지정 메서드를 추가했기 때문에 해당 항목이 프로젝트의 항목에 자동으로 추가되었습니다. IDL 파일입니다.
또한 구현에 있는 다음 줄(. 컨트롤 클래스의 CPP) 파일이 컨트롤의 디스패치 맵에 추가됩니다.
DISP_FUNCTION_ID(CMyAxUICtrl, "PtInCircle", dispidPtInCircle, PtInCircle, VT_BOOL, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
DISP_FUNCTION 매크로는 메서드 PtInCircle
를 컨트롤의 처리기 함수에 매핑하고, PtInCircle
반환 형식을 VARIANT_BOOL 선언하고, 전달될 형식 VTS_XPOS_PIXELS 및 VTS_YPOSPIXELS 두 개의 매개 변수를 PtInCircle
선언합니다.
마지막으로 메서드 추가 마법사는 컨트롤 구현()의 맨 아래에 스텁 함수 CSampleCtrl::PtInCircle
를 추가합니다. CPP) 파일입니다. PtInCircle
앞에서 설명한 대로 작동하려면 다음과 같이 수정해야 합니다.
VARIANT_BOOL CMyAxUICtrl::PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CPoint point(xCoord, yCoord);
return InCircle(point);
}