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.
Sende ein Kommentar, Frage, Korrekturen, Beschimpfungen...
doxapp c++ Zur Übersicht home