<b class="rk">Standardbutton</b> ändern<p class="rk">Automatische Rechtschreibkorrektur wurde aktiv.</p>



  • Hi,

    wie kann ich während der Laufzeit des Programm die **Standardschaltfäche (die mit ENTER aktiviert wird) ändern lassen?

    Thx

    Automatische Rechtschreibkorrektur wurde aktiv.

    **



  • was meinst du mit ändern?

    du kannst glaub ich mit GetDialogItem(ID_OK) auf den Button zugreifen



  • Man kann doch in den Eigenschaften eines Buttons ihn als Standardschaltfläsche verwenden, sodass dieser beim Start des Programmes den Fokus hat (und somit per ENTER taste aktiviert werden kann). Normalerweise ist das der OK Button der von Anfang an da ist. Diesen Fokus möchte ich ändern lassen.



  • Fokus ändern geht mit SetFocus() wenn du das meinst 😉



  • ENTER schickt die Nachricht immer an das Fenster und nicht an den Button. Wenn ein Button den Fokus hat dann kann man ihn mit SPACE auslösen!
    Also verstehe ich nicht so ganz was du für ein Standardbutton meinst...
    Formuliere deine Frage am besten nochmal neu, dann können wir dir auch helfen;)

    Achja: das wegen den Rechtschreibfehlern in der Überschrift...das war doch Absich oder?;) Loggy muss sich da echt mal ransetzen;)



  • Die Standardschaltfläche wird mit der Message BM_SETDEFID (WM_USER+1)festgelegt. wparam: ID des Buttons



  • ja ok, dann wird der button eben mit SPACE ausgelöst.
    Wie geht das mit SetFocus()? Bei

    GetDlgItem(IDC_ADD)->SetFocus()
    

    passiert gar nix. Wenn ich das über ne Membervariable mache passiert ebenfalls nichts.
    Aber danke schonma für die zahlreichen antworten.

    P.S. Mit der Rechtschreibung war wohl ein Gedankenfehler von mir, ich würd ma sagen zu lange Ferien gehabt 😃



  • hallo, leuts ihr habt schon um einiges kompliziertere Sachen gelöst, ich frag doch nur nach einer Erklärung der Funktion SetFocus(). Weiß da niemand was drüber?



  • Hallo !

    Ich habe mir jetzt mal ein Testprojekt mit 3 Buttons und einem Editfeld angelegt. Funktioniert einwandfrei. Die Buttons 1 und 2 wechseln bei Betätigung den Focus und bei Button 3 erhält das Eingabefeld den Focus. Keine Probleme...

    void CSetFocusDlg::OnButton1() 
    {
        GetDlgItem(IDC_BUTTON2)->SetFocus();
    }
    
    void CSetFocusDlg::OnButton2() 
    {
        GetDlgItem(IDC_BUTTON1)->SetFocus();
    }
    
    void CSetFocusDlg::OnButton3() 
    {
        GetDlgItem(IDC_EDIT1)->SetFocus();
    }
    

    Tschüss

    [Edit]
    ...oder probier mal das hier aus:

    ((CButton*)GetDlgItem(IDC_BUTTON2))->SetFocus();
    

    ...oder das...

    ((CButton*)GetDlgItem(IDC_BUTTON1))->SetFocus();
    ((CButton*)GetDlgItem(IDC_BUTTON1))->RedrawWindow();
    

    [/Edit]

    [ Dieser Beitrag wurde am 08.08.2002 um 15:47 Uhr von isabeau editiert. ]



  • Die FUnktion SetDefID ist aber wohl eher das, was du willst ... Damit wird nämlich der Standardbutton (der mit Enter aktiviert wird und nen schwarzen Rand hat) gesetzt.
    Nemesyzz hat nur die WinAPI-Variante gepostet und wurde wohl deswegen überlesen ...



  • Alles klar, vielen Dank für die Antworten



  • Gilt SetDefId() auch in nicht dialogfeldbasierten Anwendungen?

    A=jage


Anmelden zum Antworten