MFC 컨트롤을 ActiveX: 사용자 지정 이벤트를 추가합니다.
사용자 지정 이벤트 클래스에서 자동으로 발생 되는 스톡 이벤트와 다 COleControl.사용자 지정 이벤트는 이벤트는 컨트롤 개발자에 의해 결정 된 특정 동작만 인식 합니다.이벤트 맵 항목 사용자 지정 이벤트에 의해 표시 됩니다 있는 EVENT_CUSTOM 매크로.다음 절에서는 ActiveX 컨트롤 마법사를 사용 하 여 만든는 ActiveX 컨트롤 프로젝트에 대 한 사용자 지정 이벤트를 구현 합니다.
사용자 지정 이벤트를 추가 하 여 이벤트 추가 마법사
특정 사용자 정의 이벤트가 ClickIn 다음 프로시저를 추가합니다.다른 사용자 지정 이벤트를 추가 하려면이 절차를 사용할 수 있습니다.사용자 지정 이벤트 이름 및 해당 매개 변수 ClickIn 이벤트 이름 및 매개 변수를 대체 합니다.
사용자 이벤트 추가 마법사를 사용 하 여 지정 ClickIn 이벤트를 추가 하려면
컨트롤의 프로젝트를 로드 합니다.
클래스 뷰 바로 가기 메뉴를 열려면 ActiveX 컨트롤 클래스를 마우스 오른쪽 단추로 클릭 합니다.
바로 가기 메뉴에서 클릭 추가 누른 다음 추가 이벤트.
이 이벤트 추가 마법사가 열립니다.
에 이벤트 이름 상자, 먼저 모든 기존 이벤트를 선택 하 고 클릭은 사용자 지정 라디오 버튼을 입력 하 고 ClickIn.
에 내부 이름 상자에 이벤트의 발생 함수 이름을 입력 합니다.이 예제에 대 한 이벤트 추가 마법사에서 제공한 기본값을 사용 (FireClickIn).
호출 매개 변수를 추가 합니다. xCoord (형식 OLE_XPOS_PIXELS) 사용 하 여는 매개 변수 이름 및 매개 변수 형식 컨트롤.
라는 두 번째 매개 변수를 추가 합니다. yCoord (형식 OLE_YPOS_PIXELS).
클릭 완료 이벤트를 만들 수 있습니다.
이벤트 마법사의 변경 사항에 대 한 사용자 지정 이벤트 추가
사용자 지정 이벤트를 추가 하면 이벤트 추가 마법사는 컨트롤 클래스를 변경 합니다.H입니다.CPP를 하 고 있습니다.IDL 파일입니다.다음 코드 샘플은 ClickIn 이벤트에 따라 다릅니다.
다음 줄을 헤더에 추가 됩니다 (.H) 컨트롤 클래스 파일:
void FireClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord)
{
FireEvent(eventidClickIn, EVENT_PARAM(VTS_XPOS_PIXELS VTS_YPOS_PIXELS), xCoord, yCoord);
}
이 코드를 호출 하는 인라인 함수 선언 FireClickIn 를 호출 하는 COleControl::FireEvent ClickIn 이벤트 및 매개 변수와 이벤트 추가 마법사를 사용 하 여 정의 합니다.
또한, 이벤트 맵 컨트롤 구현 파일에 다음 줄 추가 됩니다 (.컨트롤 클래스의 CPP) 파일:
EVENT_CUSTOM_ID("ClickIn", eventidClickIn, FireClickIn, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
ClickIn 이벤트이 코드를 인라인 함수에 매핑합니다 FireClickIn, 정의 이벤트 추가 마법사를 사용 하 여 매개 변수를 전달 합니다.
마지막으로 다음 줄에는 컨트롤의 추가 됩니다.IDL 파일:
[id(1)] void ClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);
이 줄은 ClickIn 이벤트 이벤트 추가 마법사 이벤트 목록에서 이벤트의 위치에서 가져온 특정 ID 번호를 할당 합니다.이벤트 목록에서 이벤트를 예상 하는 컨테이너를 사용할 수 있습니다.예를 들어,이 이벤트가 발생 하면 실행 되는 처리기 코드를 제공할 수 있습니다.
Fireclickin를 호출합니다.
사용자 이벤트 추가 마법사를 사용 하 여 지정 ClickIn 이벤트를 추가한 다음에이 이벤트가 발생 하는 시기를 결정 해야 합니다.이 작업을 호출 하 여 수행할 FireClickIn 때 적절 한 동작을 발생 합니다.이 토론에 대 한 컨트롤을 사용 하는 InCircle 내부 작동는 WM_LBUTTONDOWN 메시지 처리기 ClickIn 이벤트 원형 또는 타원형 영역 내부를 클릭할 때 발생 합니다.추가 다음 절차는 WM_LBUTTONDOWN 처리기입니다.
이벤트 추가 마법사에 메시지 처리기를 추가 합니다.
컨트롤의 프로젝트를 로드 합니다.
클래스 뷰에서 컨트롤 클래스 ActiveX를 선택 합니다.
속성 창에서 메시지 단추를 클릭합니다.
속성 창에 ActiveX 컨트롤에서 처리할 수 있는 메시지 목록이 표시 됩니다.이미 굵게 표시 된 메시지 처리기 함수에 할당 했습니다.
속성 창에서 처리할 메시지를 선택 합니다.이 예제에서는 선택 WM_LBUTTONDOWN.
오른쪽에 있는 드롭다운 목록 상자에서 선택한 <Add> OnLButtonDown.
메시지 처리기 코드로 구현에서 점프 클래스 뷰에서 새 처리기 함수를 두 번 클릭 (.ActiveX 컨트롤의 CPP) 파일입니다.
다음 호출 샘플 코드는 파일 컨트롤 창 내에서 마우스 왼쪽된 단추를 클릭할 때마다 작동 합니다.이 샘플에서 찾을 수 있습니다는 WM_LBUTTONDOWN 처리기 함수를 OnLButtonDown에 Circ 샘플 추상입니다.
void CMyAxUICtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
if (InCircle(point))
FireClickIn(point.x, point.y);
COleControl::OnLButtonDown(nFlags, point);
}
[!참고]
이벤트 추가 마법사 마우스 단추 동작에 대 한 메시지 처리기를 만들면 동일한 기본 클래스의 메시지 처리기를 호출 자동으로 추가 됩니다.이 호출은 제거 하지 마십시오.컨트롤이 스톡 마우스 메시지를 사용 하는 경우 마우스 캡처가 올바르게 처리 될 수 있도록 기본 클래스의 메시지 처리기를 호출 해야 합니다.
다음 예제에서는 이벤트만 때 클릭 컨트롤 내의 원형 또는 타원형 영역 안에서 발생 합니다.이 동작을 얻으려면 하면 배치할 수 있는 InCircle 함수를 구현 하 여 컨트롤의 (.Cpp).
VARIANT_BOOL CMyAxUICtrl::InCircle(CPoint& point)
{
CRect rc;
GetClientRect(rc);
// Determine radii
double a = (rc.right - rc.left) / 2;
double b = (rc.bottom - rc.top) / 2;
// Determine x, y
double x = point.x - (rc.left + rc.right) / 2;
double y = point.y - (rc.top + rc.bottom) / 2;
// Apply ellipse formula
return ((x * x) / (a * a) + (y * y) / (b * b) <= 1);
}
다음의 선언을 추가 해야 합니다는 InCircle 함수에서 컨트롤의 머리글에 (.H) 파일:
VARIANT_BOOL InCircle(CPoint& point);
스톡 이름 가진 사용자 지정 이벤트
모두 같은 컨트롤을 구현할 수 있지만 스톡 이벤트와 같은 이름을 가진 사용자 지정 이벤트를 만들 수 있습니다.예를 들어, Click 스톡 이벤트 클릭 정상적으로 발생 될 경우에 발생 하지 않습니다 이라는 사용자 지정 이벤트를 만들 않을 수 있습니다.다음 해당 발생 함수를 호출 하 여 언제 든 지 Click 이벤트를 실행 하지 못했습니다.
다음 절차는 사용자 지정 Click 추가 이벤트.
스톡 이벤트 이름을 사용 하는 사용자 지정 이벤트를 추가 하려면
컨트롤의 프로젝트를 로드 합니다.
클래스 뷰 바로 가기 메뉴를 열려면 ActiveX 컨트롤 클래스를 마우스 오른쪽 단추로 클릭 합니다.
바로 가기 메뉴에서 클릭 추가 누른 다음 추가 이벤트.
이 이벤트 추가 마법사가 열립니다.
에 이벤트 이름 드롭 다운 목록에서 스톡 이벤트 이름을 선택 합니다.이 예제에서는 선택 클릭.
에 대 한 이벤트 형식을 , 사용자 지정.
클릭 완료 이벤트를 만들 수 있습니다.
호출 FireClick 코드에서 적절 한 위치에 있습니다.