ActiveX Events



  • Hai,

    im VS2020 fand ich über den MFC Wizzard auch das einfügen von Ol'e Objekten, wunderbar leider werden die
    vereinbarten ActiveX Events auch als Wrapperklasse separat im MFC-Wizzard dargeboten.

    Danach hat man zwei Klassen einmal das ActiveX(Das vom Assistenten immer eine ungültige ID bekommt)
    Sowie eine weitere Classe CCEvent die genau wie der wrapper für das Control aufgebaut ist, mit Create.

    Ich erinnere mich an VC6 wo man ein Event -Callback dann einfach mit dem Assistenten generierte.
    Diese Events die in der Wrappervorlage definiert sind, werden nie angesprungen, auch wenn man das abstruse zweite Create
    durchführt nicht, andere Apps empfangen die Events aber korrekt.

    Frage: Wie erhält man dann ein Event nachdem alle ActiveX Klassen vorliegen ?

    Danke für Hinweise
    Karsten aus Berlin


  • Mod

    Am einfachsten ist das über ATL zu machen und die ganze MFC Integration zu vergessen.
    So zumindest mache ich es seit Jahren.


  • Mod

    Also es geht auch noch in VS-2022 ist aber etwas versteckt.

    1. Class View anzeigen.
    2. Im Projekt einen Unterordner (Source Files) auswählen.
    3. Contextmenü Add -> New Item (Ctrl+Shift+A)
    4. Bei Bedarf Show all Templates auswählen
    5. Im Suchfenster MFC Class From ActiveX Control auswählen
    6. Namen angeben.
    7. Add
    8. Typelib oder DLL auswählen
    9. Interfaces wählen


  • @Martin-Richter sagte in ActiveX Events:

    Suchfenster MFC Class From ActiveX Control auswählen

    Hi Martin,

    schade das es das vc Forum nicht mehr gibt ^^ Da stand alles..

    Ja das war in der Tat schwer zu finden, noch schlimmer war es nun ein Eventhandler über diesen Assistenten zu erlangen.
    Das ging nicht . Stattdessen erzeugt der Assistent eine Event Klasse, außerdem verwendet er unterschiedliche UIID's
    Musste man manuell korrigieren gibt 2 Definitionen nur eine der UIID's war nutzbar für create-class.

    Ich konnte aber meine Events aus alten Sourcen *.DSW (Nicht mehr ladbar) einsehen .

    
    DECLARE_EVENTSINK_MAP()
    void NewFrameHand(){};
    void NewRecogHand(){};
    
    BEGIN_EVENTSINK_MAP(CPatConnectTestDlg, CDialogEx)
    	ON_EVENT(CPatConnectTestDlg, 4711, 1, NewFrameHand, VTS_NONE)
    	ON_EVENT(CPatConnectTestDlg, 4711, 2, NewRecogHand, VTS_NONE)
    END_EVENTSINK_MAP()
    
    if (!m_PatConnect.Create(0, 0, WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, CRect(0, 0, lpCreateStruct->cx, lpCreateStruct->cy), this, 4711))
    		 AfxMessageBox("ActiveX Control uncreateable, use regsvr32 Patconnect.ocx");
    
    

    Ja Atl.. also ich mache alles mit MFC ehe ich nun COM verwende kann ich gleich zu Java wechseln ^^

    Also läuft wieder,

    Viele Grüße
    Karsten Schulz


Anmelden zum Antworten