CBitmapButton mit IDOK verknüpft?!



  • Hallo zusammen,

    ich bin dabei eine grafische Benutzeroberfläche für Winamp zu schreiben und hab da folgendes Problem:

    Die BitmapButtons die ich erstellt habe hängen irgendwie mit dem standard OK-Button zusammen, allerdings nur wenn ich mit Tab oder den Pfeiltasten durch den Dialog navigiere. In diesem Fall ist der OK-Button immer auch dan markierte wenn ich mich auf den BitmapButtons bewege, wenn ich dann Enter drücke, wird das Fenster geschlossen.

    Ich habe die Buttons mit der Create Methode erstellt und nicht über den Resourcen-Editor. Habe den OK-Button auch schon gelöscht, das Verhalten der BitmapButtons hat sich dadurch aber nicht geändert. Hab allerdings vor wie nach dem löschen keine Implementierung des OK- oder Cancel-Buttons gefunden.

    Hier mein Code:

    class CNowPlaying : public CDialog
    {
    (...)
    private:
    CBitmapButton m_BtnStop;
    }

    BOOL CNowPlaying::OnInitDialog()
    {
    CDialog::OnInitDialog();

    m_BtnStop.Create("Stop", BS_BITMAP | WS_VISIBLE | BS_OWNERDRAW | WS_TABSTOP, CRect(0,0,80,80), this, IDC_STOP);
    m_BtnStop.LoadBitmaps(IDB_BTN_STOP_DEF, IDB_BTN_STOP_FOC, IDB_BTN_STOP_SEL, IDB_BTN_STOP_DIS);

    return TRUE;
    }

    Hat irgendwer eine Idee wie ich die Buttons selbständig machen kann?

    Danke

    MrFlow


  • Mod

    Ownerdraw Buttons können den Stil BS_DEFPUSHBUTTON nicht haben. Du müsstest Deinem Dialog selbst per DM_SETDEFID mitteilen, was Dein Default Schalter sein soll. Ansonsten wird dennoch IDOK beim Drücken von VK_ENTER ausgelöst.
    Ein OnOK Handler an dieser Stelle, der nichts tut kann also nicht schaden. Aber wie schon gesagt: Einfach die ID angeben, des Buttons, der bei VK_ENTER der Default sein soll, oder Deinem eigenen Schalter IDOK als ID mitgeben.



  • Hi Martin,

    danke für die antwort. Ich glaub aber du hast mich nicht ganz richtig verstanden, aber du hast mich auf den richtigen weg geführt und ich hab das Problem gelöst. Wollte keine Default-Button(s) erzeugen, sondern nur normale BitmapButtons, die ich über die Tastatur auswählen und auslösen kann.
    Jedenfalls hab ich jetzt rausgefunden, dass ich die Buttons einfach mit Space auslösen kann, anstatt mit Enter, ohne das OK mit ausgelöst wird und ohne jegliche Änderung im Code.

    Danke und Gruß

    MrFlow


Anmelden zum Antworten