Text in einem Editcontrol markieren
-
Hallo.
Ich habe einen Dialog mit dem Ressourceneditor erstellt. Dieser enthält 3 Editcontrol-Eingabefelder. Rufe ich den Dialog werden die Controls mit Vorgabewerten gefüllt. Dann möchte ich, dass das erste Editcontrol den Fokus erhält, der Cursor am Ende des darin stehenden Strings steht und der String vollständig markiert ist.
Bisher kann ich dem Dialogfeld nur den Fokus in der OnDraw() mit GetDlgItem(IDC_Edit_irgendwas)->SetFocus() geben. Irgendwie sollte das doch mit SetSel gehen, aber wie macht man das? Geht das überhaupt mit einer Dialogfeldressource oder muss ich die Editcontrols mit Create() laden? Dann sollte ich ja direkt über die Klassenmember drauf zugreifen können.
In den FAQ hab ich zumindest bsiher nichts brauchbares gefunden obwohl das sicher ein ziemlich banales Problem ist....
-
Zeig mal deinen Versuch. SetSel ist schon korrekt. Vorher muss man aber imho SetFocus machen.
-
ähm die OnDraw is da eher ungeeignet für, schau mal lieber in der OnInit-Methode.
SetFocus ist schon richtig
-
vll hast du auch ein UpdateData() vergessen, dann zeichnet er die markierung nicht
-
Wenn ich das richtig verstanden habe liefert GetDlgItem(IDC_Edit_irgendwas) ein Handle zurück, mit dem ich auf das Editcontrol zugreifen kann. Allerdings steht dann SetSel nicht in der Parameter- und Funktionsliste drin.
Hatte ich OnDraw() geschrieben? Meinte natürlich OnInitDialog(), sonst macht das ganze nicht wirklich Sinn.
SetFocus() kann ich komischerweise aufrufen und das wollte ich auch vor der Selektierung tun.
-
Du musst das noch in ein CEdit* casten.
-
estartu_de schrieb:
Du musst das noch in ein CEdit* casten.
Wunderbar. Vielen Dank, genau das ist es.
Funktioniert nun prima, habs so gelöst:
BOOL CLoginDlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: hier zusätzliche Initialisierung hinzufügen. CEdit* pEdit; pEdit=(CEdit*)GetDlgItem(IDC_BENUTZERNAME_LOGIN); pEdit->SetFocus(); pEdit->SetSel(0,m_csBenutzername.GetLength(),0); return FALSE; // return TRUE unless you set the focus to a control // AUSNAHME: OCX-Eigenschaftenseite muss FALSE zurückgeben. }