ActiveX Control mit Button



  • Hallo Leute,

    ich habe mit Visual Studio ein ActiveX Control erzeugt.

    In diesem ActiveX Control möchte ich ein Button plazieren ohne das ActiveX selber als Buton zu definieren.

    Kann mir vielleicht jemand helfen und sagen wie das geht?

    Danke schon mal im vorraus.



  • Erzeuge doch den Button als Child-Fenster des ActiveX-Controls.

    Ich schreib mal in etwa wie ich das meine:

    Header:

    class CMyActiveX : public COleControl
    {
       // Mein ActiveXControl
    protected:
       CButton  m_wndMyButton;
    
    	//{{AFX_MSG(CMyActiveX)
    	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    	//}}AFX_MSG
    	DECLARE_MESSAGE_MAP()
    };
    

    CPP-Datei:

    BEGIN_MESSAGE_MAP(CMyActiveX, COleControl)
    	//{{AFX_MSG_MAP(CMyActiveX)
    	ON_WM_CREATE()
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    int CMy\1::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    	if (COleControl::OnCreate(lpCreateStruct) == -1)
    		return -1;
    
    	if ( !m_wndMyButton.Create( _T("Mein Button"), WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, CRect(0,0,0,0), this, 1000 ) )
    		return -1;
    
    	return 0;
    }
    

    Die Größe des Buttons kannst du z.B. in OnSize dem ActiveX-Control anpassen.



  • Danke für Deine Antwort.

    Ich habe das ganze mal eingebaut und bin mit dem Debugger darüber gelaufen.

    Also der Debugger läuft sauber darüber, aber im ActiveX wird mir leider kein Button angezeigt.

    Muss ich diesen noch sichtbar machen oder etwas ähnliches?



  • Danke für das Beispiel.

    Hat funktioniert.

    Wie kann ich mich mit dem ActiveX am Button anmelden um ein OnClick Ereigniss zu bekommen?

    Wäre es denkbar ein vorhandenes Fenster so auch im ActiveX als Child darzustellen oder zu erzeugen?



  • Die Nachrichten des Buttons werden genauso bearbeitet wie z.B. bei einem Button im Dialog. Du kannst also die BN_CLICKED - Botschaft wie folgt im ActiveX-Control abfangen:

    class CMyActiveX : public COleControl
    {
       // Mein ActiveXControl
    protected:
       CButton  m_wndMyButton;
    
        //{{AFX_MSG(CMyActiveX)
        afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    	  afx_msg void OnButton1();
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
    };
    
    BEGIN_MESSAGE_MAP(CMyActiveX, COleControl)
    	// ...
    	ON_BN_CLICKED(1000, OnButton1)
    	// ...
    END_MESSAGE_MAP()
    
    // Die 1000 sollte besser durch ein Define ersetzt werden 
    
    void CMy\1::OnButton1() 
    {
    	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
    
    }
    

    Das sieht also genauso aus wie der ClassWizzard - Code aus einem Dialog. Ich lasse die Behandlungsroutine vom Wizzard bei einem Testdialog erzeugen und kopiere dann die entsprechenden Stellen einfach in meien CMyActiveX - Klasse.

    Es lässt sich natürlich jedes beliebige Fenster als Child-Fenster in das ActiveX-Control aufnehmen (Das als Child-Fenster geeignet ist). Die Erzeugung erfolgt ähnlich wie beim Erstellen des Buttons.



  • Vielen Dank für Deine ausführliche Hilfe.

    Du hast mir echt weitergeholfen.

    Bis denne


Anmelden zum Antworten