共用方式為


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);
}

這段程式碼會宣告內嵌函式呼叫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處理常式。

若要使用加入事件精靈加入訊息處理常式

  1. 載入控制項專案。

  2. 在 [類別檢視中,選取您的 ActiveX 控制項類別。

  3. 在 [屬性] 視窗中,按一下 [訊息] 按鈕。

    [屬性] 視窗會顯示一份由 ActiveX 控制項,可以處理的訊息。 郵件已經以粗體顯示後指派給它的處理函式。

  4. 從 [屬性] 視窗中,選取您想要處理的訊息。 這個範例中,選取 [ WM_LBUTTONDOWN

  5. 從右邊下拉式清單方塊中選取 <Add> OnLButtonDown

  6. 連按兩下以跳至訊息處理常式程式碼,在實作中的 [類別檢視] 中的新處理函式 (。CPP) 檔案中有您 ActiveX 的控制項。

下列程式碼範例呼叫 InCircle 函式每次在控制項視窗中按下滑鼠左鍵。 這個範例可以在中找到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 事件,藉由呼叫其引發函式。

下列程序中新增自訂的 Click 事件。

若要加入自訂事件時使用的內建事件名稱

  1. 載入控制項專案。

  2. 在 [類別檢視在您的 ActiveX 控制項類別,以開啟快顯功能表上按一下滑鼠右鍵。

  3. 從快速鍵功能表中,按一下 [ 新增 ,然後按一下 [ 加入事件

    如此會開啟 [加入事件精靈。

  4. 事件名稱下拉式清單中,選取內建事件名稱。 這個範例中,選取 [ 按一下

  5. 對於事件型別,請選取 自訂

  6. 按一下 [ 完成建立的事件。

  7. 呼叫FireClick在程式碼中的適當位置。

請參閱

參考

COleControl 類別

概念

MFC ActiveX 控制項

MFC ActiveX 控制項: 方法