다음을 통해 공유


MFC ActiveX 컨트롤: 사용자 지정 이벤트 추가

사용자 지정 이벤트는 클래스 COleControl에 의해 자동으로 발생하지 않는다는 점에서 주식 이벤트와 다릅니다. 사용자 지정 이벤트는 컨트롤 개발자가 결정한 특정 작업을 이벤트로 인식합니다. 사용자 지정 이벤트에 대한 이벤트 맵 항목은 EVENT_CUSTOM 매크로로 표시됩니다. 다음 섹션에서는 ActiveX 컨트롤 마법사를 사용하여 만든 ActiveX 컨트롤 프로젝트에 대한 사용자 지정 이벤트를 구현합니다.

이벤트 추가 마법사를 사용하여 사용자 지정 이벤트 추가

다음 절차에서는 특정 사용자 지정 이벤트인 ClickIn을 추가합니다. 이 절차를 사용하여 다른 사용자 지정 이벤트를 추가할 수 있습니다. 사용자 지정 이벤트 이름과 해당 매개 변수를 ClickIn 이벤트 이름 및 매개 변수로 대체합니다.

이벤트 추가 마법사를 사용하여 ClickIn 사용자 지정 이벤트를 추가하려면

  1. 컨트롤의 프로젝트를 로드합니다.

  2. 클래스 뷰에서 ActiveX 컨트롤 클래스를 마우스 오른쪽 단추로 클릭하여 바로 가기 메뉴를 엽니다.

  3. 바로 가기 메뉴에서 추가를 클릭한 다음, 이벤트 추가를 클릭합니다.

    그러면 이벤트 추가 마법사가 열립니다.

  4. 이벤트 이름 상자에서 먼저 기존 이벤트를 선택한 다음 사용자 지정 라디오 단추를 클릭한 다음 ClickIn을 입력합니다.

  5. 내부 이름 상자에 이벤트 발생 함수의 이름을 입력합니다. 이 예제에서는 이벤트 추가 마법사(FireClickIn)에서 제공하는 기본값을 사용합니다.

  6. 매개 변수 이름 및 매개 변수 형식 컨트롤을 사용하여 xCoord(OLE_XPOS_PIXELS 형식)라는 매개 변수를 추가합니다.

  7. yCoord(OLE_YPOS_PIXELS 형식)라는 두 번째 매개 변수를 추가합니다.

  8. 마침을 클릭하여 이벤트를 만듭니다.

사용자 지정 이벤트에 대한 이벤트 마법사 변경 내용 추가

사용자 지정 이벤트를 추가하면 이벤트 추가 마법사가 컨트롤 클래스를 변경합니다. 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);
}

이 코드는 이벤트 추가 마법사를 사용하여 정의한 ClickIn 이벤트 및 매개 변수를 사용하여 COleControl::FireEvent를 호출하는 인 FireClickIn 라인 함수를 선언합니다.

또한 다음 줄은 구현()에 있는 컨트롤의 이벤트 맵에 추가됩니다. 컨트롤 클래스의 CPP) 파일:

EVENT_CUSTOM_ID("ClickIn", eventidClickIn, FireClickIn, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
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);

이 줄은 이벤트 추가 마법사 이벤트 목록의 이벤트 위치에서 가져온 특정 ID 번호를 ClickIn 이벤트에 할당합니다. 이벤트 목록의 항목을 사용하면 컨테이너가 이벤트를 예상할 수 있습니다. 예를 들어 이벤트가 발생할 때 실행할 처리기 코드를 제공할 수 있습니다.

FireClickIn 호출

이벤트 추가 마법사를 사용하여 ClickIn 사용자 지정 이벤트를 추가했으므로 이 이벤트를 발생시키는 시기를 결정해야 합니다. 적절한 작업이 발생할 때 호출 FireClickIn 하여 이 작업을 수행합니다. 이 설명을 위해 컨트롤은 메시지 처리기 내 WM_LBUTTONDOWNInCircle 함수를 사용하여 사용자가 원형 또는 타원형 영역 내부를 클릭할 때 ClickIn 이벤트를 실행합니다. 다음 절차에서는 처리기를 추가합니다 WM_LBUTTONDOWN .

이벤트 추가 마법사를 사용하여 메시지 처리기를 추가하려면

  1. 컨트롤의 프로젝트를 로드합니다.

  2. 클래스 뷰에서 ActiveX 컨트롤 클래스를 선택합니다.

  3. 속성 창에 ActiveX 컨트롤에서 처리할 수 있는 메시지 목록이 표시됩니다. 굵게 표시된 모든 메시지에는 이미 처리기 함수가 할당되어 있습니다.

  4. 처리할 메시지를 선택합니다. 이 예제에서는 .를 선택합니다 WM_LBUTTONDOWN.

  5. 오른쪽의 드롭다운 목록 상자에서 OnLButtonDown 추가>를 선택합니다<.

  6. 클래스 뷰에서 새 처리기 함수를 두 번 클릭하여 구현의 메시지 처리기 코드로 이동합니다(.) ActiveX 컨트롤의 CPP) 파일입니다.

다음 코드 샘플에서는 컨트롤 창 내에서 마우스 왼쪽 단추를 클릭할 때마다 함수를 호출 InCircle 합니다. 이 샘플은 Circ 샘플 추상의 처리기 함수OnLButtonDown에서 찾을 WM_LBUTTONDOWN 수 있습니다.

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 이벤트를 실행할 수 있습니다.

다음 절차에서는 사용자 지정 Click 이벤트를 추가합니다.

스톡 이벤트 이름을 사용하는 사용자 지정 이벤트를 추가하려면

  1. 컨트롤의 프로젝트를 로드합니다.

  2. 클래스 뷰에서 ActiveX 컨트롤 클래스를 마우스 오른쪽 단추로 클릭하여 바로 가기 메뉴를 엽니다.

  3. 바로 가기 메뉴에서 추가를 클릭한 다음, 이벤트 추가를 클릭합니다.

    그러면 이벤트 추가 마법사가 열립니다.

  4. 이벤트 이름 드롭다운 목록에서 스톡 이벤트 이름을 선택합니다. 이 예제에서는 클릭을 선택합니다.

  5. 이벤트 유형에 대해 사용자 지정을 선택합니다.

  6. 마침을 클릭하여 이벤트를 만듭니다.

  7. 코드의 적절한 위치에서 호출 FireClick 합니다.

참고 항목

MFC ActiveX 컨트롤
MFC ActiveX 컨트롤: 메서드
COleControl 클래스