Sdílet prostřednictvím


MFC – ovládací prvky ActiveX: Přidání vlastních událostí

Vlastní události se liší od skladových událostí v tom, že se automaticky neaktivují podle třídy COleControl. Vlastní událost rozpozná určitou akci určenou vývojářem ovládacího prvku jako událost. Položky mapy událostí pro vlastní události jsou reprezentovány EVENT_CUSTOM makrem. Následující část implementuje vlastní událost pro technologie ActiveX řídicí projekt, který byl vytvořen pomocí průvodce technologie ActiveX ovládací prvek.

Přidání vlastní události pomocí Průvodce přidáním události

Následující postup přidá konkrétní vlastní událost ClickIn. Tento postup můžete použít k přidání dalších vlastních událostí. Nahraďte název vlastní události a její parametry názvem a parametry události ClickIn.

Přidání vlastní události ClickIn pomocí Průvodce přidáním události

  1. Načtěte projekt ovládacího prvku.

  2. V zobrazení třídy klikněte pravým tlačítkem na třídu ovládacího prvku technologie ActiveX a otevřete místní nabídku.

  3. V místní nabídce klepněte na tlačítko Přidat a potom klepněte na tlačítko Přidat událost.

    Tím se otevře Průvodce přidáním události.

  4. V poli Název události nejprve vyberte libovolnou existující událost a potom klikněte na přepínač Vlastní a zadejte ClickIn.

  5. Do pole Interní název zadejte název funkce aktivace události. V tomto příkladu použijte výchozí hodnotu, kterou poskytuje Průvodce přidáním události (FireClickIn).

  6. Přidejte parametr s názvem xCoord (typ OLE_XPOS_PIXELS), pomocí ovládacích prvků Název parametru a Typ parametru.

  7. Přidejte druhý parametr s názvem yCoord (typ OLE_YPOS_PIXELS).

  8. Kliknutím na Tlačítko Dokončit vytvořte událost.

Přidání změn Průvodce událostmi pro vlastní události

Když přidáte vlastní událost, Průvodce přidáním události provede změny třídy ovládacího prvku . H. CPP a . Soubory IDL. Následující ukázky kódu jsou specifické pro událost ClickIn.

Následující řádky se přidají do záhlaví (. H) soubor vaší třídy control:

void FireClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord)
{
   FireEvent(eventidClickIn, EVENT_PARAM(VTS_XPOS_PIXELS VTS_YPOS_PIXELS), xCoord, yCoord);
}

Tento kód deklaruje vloženou funkci, která volá FireClickInCOleControl::FireEvent s událostí ClickIn a parametry, které jste definovali pomocí Průvodce přidáním události.

Kromě toho je následující řádek přidán do mapy událostí pro ovládací prvek, který se nachází v implementaci (. CPP) soubor vaší třídy control:

EVENT_CUSTOM_ID("ClickIn", eventidClickIn, FireClickIn, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
EVENT_CUSTOM_ID("ClickIn", eventidClickIn, FireClickIn, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)

Tento kód mapuje událost ClickIn na vloženou funkci FireClickIna předává parametry, které jste definovali pomocí Průvodce přidáním události.

Nakonec se do řídicího prvku přidá následující řádek . IDL soubor:

[id(1)] void ClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);

Tento řádek přiřadí události ClickIn konkrétní číslo ID převzaté z pozice události v seznamu událostí Přidat průvodce událostí. Položka v seznamu událostí umožňuje kontejneru předvídat událost. Může například poskytnout kód obslužné rutiny, který se má spustit při spuštění události.

Volání FireClickIn

Teď, když jste přidali vlastní událost ClickIn pomocí Průvodce přidáním události, musíte se rozhodnout, kdy se má tato událost aktivovat. Provedete to voláním FireClickIn , když dojde k příslušné akci. Pro tuto diskuzi ovládací prvek používá InCircle funkci uvnitř WM_LBUTTONDOWN obslužné rutiny zprávy k vyvolání události ClickIn, když uživatel klikne uvnitř kruhové nebo eliptické oblasti. Následující postup přidá obslužnou rutinu WM_LBUTTONDOWN .

Přidání obslužné rutiny zprávy pomocí Průvodce přidáním události

  1. Načtěte projekt ovládacího prvku.

  2. V zobrazení třídy vyberte třídu ovládacího prvku technologie ActiveX.

  3. V okně Vlastnosti se zobrazí seznam zpráv, které může ovládací prvek technologie ActiveX zpracovat. Každá zpráva zobrazená tučně už má přiřazenou funkci obslužné rutiny.

  4. Vyberte zprávu, kterou chcete zpracovat. V tomto příkladu vyberte WM_LBUTTONDOWN.

  5. V rozevíracím seznamu vpravo vyberte <Přidat> OnLButtonDown.

  6. Poklikáním na novou funkci obslužné rutiny v zobrazení třídy přejděte do kódu obslužné rutiny zprávy v implementaci (. CPP) souboru vašeho technologie ActiveX ovládacího prvku.

Následující vzorový kód volá InCircle funkci při každém kliknutí levým tlačítkem myši v ovládacím okně. Tuto ukázku najdete ve WM_LBUTTONDOWN funkci OnLButtonDownobslužné rutiny v abstrakci vzorku Circ.

void CMyAxUICtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
   if (InCircle(point))
      FireClickIn(point.x, point.y);

   COleControl::OnLButtonDown(nFlags, point);
}

Poznámka

Když Průvodce přidáním události vytvoří obslužné rutiny zpráv pro akce tlačítka myši, volání stejné obslužné rutiny zprávy základní třídy se automaticky přidá. Tento hovor neodstraňujte. Pokud váš ovládací prvek používá některou z uložených zpráv myši, musí být volána obslužné rutiny zpráv v základní třídě, aby se zajistilo správné zpracování zachycení myši.

V následujícím příkladu se událost aktivuje pouze v případě, že dojde k kliknutí uvnitř kruhové nebo eliptické oblasti v rámci ovládacího prvku. K dosažení tohoto chování můžete funkci umístit InCircle do implementace ovládacího prvku (. CPP) soubor:

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

Do hlavičky ovládacího prvku budete také muset přidat následující deklaraci InCircle funkce (. H) soubor:

VARIANT_BOOL InCircle(CPoint& point);

Vlastní události s názvy akcií

Můžete vytvořit vlastní události se stejným názvem jako události akcií, ale nemůžete implementovat oba ve stejném ovládacím prvku. Můžete například chtít vytvořit vlastní událost s názvem Kliknutí, která se neaktivuje, když se událost na skladě obvykle aktivuje. Událost Click pak můžete kdykoliv aktivovat zavoláním její funkce spuštění.

Následující postup přidá vlastní událost kliknutí.

Přidání vlastní události, která používá název akciové události

  1. Načtěte projekt ovládacího prvku.

  2. V zobrazení třídy klikněte pravým tlačítkem na třídu ovládacího prvku technologie ActiveX a otevřete místní nabídku.

  3. V místní nabídce klepněte na tlačítko Přidat a potom klepněte na tlačítko Přidat událost.

    Tím se otevře Průvodce přidáním události.

  4. V rozevíracím seznamu Název události vyberte název akciové události. V tomto příkladu vyberte Kliknout.

  5. Jako typ události vyberte Vlastní.

  6. Kliknutím na Tlačítko Dokončit vytvořte událost.

  7. Volejte FireClick na příslušných místech v kódu.

Viz také

MFC – ovládací prvky ActiveX
MFC – ovládací prvky ActiveX: Metody
COleControl – třída