ActiveX Event aus Hilfsklasse auslösen



  • Hallo zusammen,

    ich würde gerne aus einer Hilfsklasse ein Event des ActiveX Steuerelements auslösen.

    Ich habe in meinem Projekt über den Wizzard ein Event hinzugefügt worauf im Header folgendes erzeugt wurde:

    void FireFehlerText(LPCTSTR strFehlerTxt)
    {
        FireEvent(eventidFireFehlerText, EVENT_PARAM(VTS_BSTR), strFehlerTxt);
    }
    

    Das Event kann ich in der Hauptklasse ganz normal aufrufen:

    FireFehlerText("Fehlerbeschreibung");
    

    Jetzt möchte ich das Event aber nicht in der Hauptplasse, sondern in einer Hilfsklasse auslösen.

    In C# würde ich in der Hilfsklasse ein eigenes Event erstellen und dieses in der Hauptklasse aboonieren und auf das Event des Steuerelements weiterleiten.

    Ich habe hier nur keine Möglichkeit gefunden in der Hilfsklasse ein Event zu implementieren.

    Ich kann bei erstellen der Klasse zwischen "C++ Class" und "MFC Class" wählen, und auch eine "Base Class" angeben. Aber egal was ich wähle, Visual Studio bietet mir keine Events an...

    Habe ich was übersehen, odes ist es vieleicht über diesen Weg garnicht möglich?

    Gruß
    Stefan



  • Hallo,

    also wenn ich das richtig verstehe möchtest Du das Event in der Fensterklasse
    empfangen die das ActiveX Eingebetter hat ?

    Wen dem so ist kannst du dort Das Event mit dem Klassenassistenten integrieren,oder dies selber eintragen:

    BEGIN_EVENTSINK_MAP(CWaferViewTestDlg, CDialog)
    	ON_EVENT(CWaferViewTestDlg, 0 , 2, OnFireClick, VTS_R4 VTS_R4)
    END_EVENTSINK_MAP()
    
    void CWaferViewTestDlg::OnFireClick(FLOAT x, FLOAT y)
    {
    	CString title;
    	title.Format("FireEvent X(%0.1f) Y(%0.1f)",x,y);
    	SetWindowText(title);
    }
    

    Das Auslösen des Events kannst du auf der Control seite des ActiveX selber erreichen, das ist eine Methode von COleControl

    Pseudocode:

    void CCam3DViewCtrl::OnLButtonDown(UINT nFlags, CPoint point)
    {
    	CString str; 	
    	str.Format("%0.0f",m_3dpos.x);
    	m_xedit.SetWindowTextA(str);
    
    	str.Format("%0.0f",m_3dpos.y);
    	m_yedit.SetWindowTextA(str);
    
    	FireEvent(dispidDoClick,EVENT_PARAM(VTS_R4 VTS_R4), m_3dpos.x,m_3dpos.y);
    
    	COleControl::OnLButtonDown(nFlags, point);
    }
    

    Du benötigst also mindestens einen Zeiger auf das gültige

    //COleControl *pOleCtrl((COleControl 😉 MyOleWnd);

    Und dann kannst Du via pOleCtrl->FireEvent(...) forfahren.
    Klar das dies nur mit gültigen Zeigern klappt, also prüfen.



  • Nach ein paar Versuchen funktioniert es nun.

    Wenn ich das Event allerdings aus einer Statischen Methode heraus abfeuern möchte bekomme ich einen Linker Fehler: LNK2001 unresolved external symbol

    EDIT: Habs jetzt.

    Danke für die Hilfe 😃


Anmelden zum Antworten