Dialog wird beim Anklicken einer Checkbox geschlossen



  • Hi,

    ich habe mir in einem (modalen) Dialog auf folgende Weise eine Checkbox erzeugt:

    BOOL CTestDialog::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    
    	CString temp;
    	temp.LoadStringA(106); // Laden einer Stringressource
    	m_TestButton.Create(temp, WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,	CRect(10, 10, 200, 60), this, 1);
    
    	return TRUE;
    }
    

    Dabei ist m_TestButton eine CButton-Membervariable der Dialogklasse.

    Der Dialog erscheint, die Checkbox ist vorhanden, aber wenn ich sie anklicke (und eigentlich erwarte, dass sie ihren Zustand ändert: Häkchen gesetzt), wird der Dialog geschlossen.
    Kann mir jemand erklären, woran das liegt?
    (Ich komme auch mit dem Debuggen nicht ganz klar. Ich dachte, ich setze einmal einen Breakpoint in den Destruktor der Dialogklasse und schau mir den Callstack an, aber dort taucht zwischen Erzeugung des Dialogs und dessen Zerstörung auch nichts auf. Mache ich auch hier etwas falsch?)

    Danke schonmal im Voraus!


  • Mod

    Wundert mich nicht. Die ID dieser Checkbox ist 1. D.h. IDOK und ein Klick auf eine Checkbox wie auf einen Button hat letzten Endes die gleiche Wirkung. WM_COMMAND mit IDOK schließt den Dialog!



  • Das ging aber fix, vielen Dank!
    Nach welchen Kriterien ich die ID auswählen sollte, war/ist mir tatsächlich nicht ganz klar und ich habe den Wert einfach aus einem Beispiel aus der MSDN-Library übernommen 😞

    Allerdings habe ich jetzt gleich zwei weitere Fragen:
    Wie kann ich denn herausfinden, welche IDs bereits vergeben sind (abgesehen von denen, die ich selbst erzeugt habe)? Welche sind tabu? (Visual Studio 2005)
    Gibt es Empfehlungen, wie man die Vergabe der IDs einigermaßen strukturiert vornimmt, oder muss man sich da selbst etwas einfallen lassen?


  • Mod

    Reserviert sind an sich IDOK=1 und IDCANCEL=2. Es gibt noch mehr wie IDYES, IDNO, IDABORT etc.
    Als Faustregel könnte man sagen alles über 100 ist frei. So macht es jedenfalls der Ressource-Editor bei der Vergabe von IDs.


Anmelden zum Antworten