OnOK im Modalen Dialog

C++ und WTL

Das voreingestellte Verhalten von modalen Dialogen ist bei Drücken der Enter Taste den Dialog zu beenden. Oft ist dies aber unerwünscht z.B. in ProperteySheets, in denen der Benutzer mehrere Daten eingibt und aus Gewohnheit jede Tastureingabe mit Enter bestätigt. In diesem Fall wäre vielleicht ein Wechsel zur nächsten Eingabe erwünscht.
Eine einfach Möglichkeit dieses Verhalten zu realisieren ist das Überschreiben des OnOK Handlers und dort abzufragen welches Dialog Element den Focus hat und entsprechend darauf zu reagieren.

LRESULT CMyDlg::OnOK(WORD , WORD wID, HWND , BOOL & bHandled )
{
	int resourceID = ::GetDlgCtrlID(GetFocus());
	switch (resourceID){
	case IDCANCEL:
		PreCancel(); // do something before cancel
		EndDialog(*this, wID);
		bHandled = FALSE;
		return 0;
	case IDOK:
		PreOk(); // do something before ok
		EndDialog(*this, wID);
		bHandled = FALSE;
		return 0;
	default:
		NextDlgCtrl(); // set focus to the next control
	}
	bHandled = TRUE;
	return 1;
}

Das zweite Argument von EndDialog wird von DoModal an die Funktion zurückgegeben, die den Dialog aufegrufen hat und kann bei Bedarf an dieser Stelle angepasst werden.

Diskussion

Sende ein Kommentar, Frage, Korrekturen, Beschimpfungen...

Name:

Nachricht:


doxapp c++
Zur Übersicht
home