CButton zur Laufzeit



  • Hi,

    ich steh bei einer wohl total einfachen Sache gerade voll
    aufm Schlauch 🙂

    wie kann ich zur Laufzeit Buttons erzeugen? Aus der MSDN habe ich folgendes:

    CButton Button1;
    	Button1.Create("My button", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(10,10,300,60), this, 6000);
    

    hab das in 'ner einfachen Dialog-Anwendung. Kompiliert prima, es entsteht beim ausführen aber kein sichtbarer Button 😞

    Wieso nicht? Laut MSDN ruft die Create-Methode schon alles nötige auf um das Fenster neu zu zeichnen. Also ShowWindow(SW_SHOW) und Invalidate() bringen auch nix.

    kann mir da wer helfen?

    mfg
    tobi



  • Wenn der Code genauso in Deinem Prog steht, wie er hier abgetippt ist, dann kann es nicht funktionieren. Der Schalter ist lokal zur Funktion, und wenn die funktion verlassen wird, wird auch der Schalter zerstört (auch das zugrundeliegende Fenster).

    Definiere den Schalter innerhalb der Klasse:

    class MyDlg : public CDialog
    {
        ...
        CButton m_ctrlButton1;
        ...
        BOOL OnInitDialog();
    };
    
    BOOL CMyDlg::OnInitDialog()
    {
        ...
        m_ctrlButton1.Create("My button", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(10,10,300,60), this, 6000);
        ...
    }
    

    Gruß,

    Andreas



  • Genau, oder erstelle das CButton Objekt mit new.

    Grüße Rapha



  • 😮 AUTSCH..

    [%&§"/§"§($"=!] 😃

    So ein Mist, da bin ich gestern und vorgestern doch schon genau auf den selbern Fehler bei meiner AsyncSocket-Klasse 2mal reingefallen und heute schon wieder. Diese blöden Scopes *ggg*

    thx :p



  • okay, soweit - sogut 🙂

    aber wenn ich nun das klicken abfangen will muss ich die Nachrichtenschleife
    anzapfen, richtig?

    weil son button ohne aktion ist ja auch doof 😉



  • Hi,

    entweder du überschreibst die PreTranslateMessage, oder du schaust dir das ON_COMMAND_RANGE Macro an.

    Grüße Rapha


Anmelden zum Antworten