ERLEDIGT
NEIN
NEIN
ANTWORTEN
8
8
ZUGRIFFE
1192
1192
EMPFEHLEN
-
Hallo,
ich habe eine gut gefüllte Combo Box und möchte beim schreiben in das Edit Feld der Box den nächst passenden Eintrag selektieren.
Soweit sogut.
Ich habe allerdings das Problem, das ich - wenn ich z.b. Backspace drücke die Markierung gelöscht bekomme und diese gleichzeitig wieder gefüllt wird -- also nichts passiert. mit GetEditSel greife ich irgendwie immer ins leere, desshalb frage ich euch mal wie ich das abfangen kann.
Danke schonmal.
Hier mein Code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
void CMonitorDlg::OnEditchangeVarNamen() { CString edit; mc_var_Name.GetWindowText(edit); int length=0; if((length = edit.GetLength())>0){ if( mc_var_Name.SelectString(-1, edit) == CB_ERR){ mc_var_Name.SetWindowText(edit); mc_var_Name.SetEditSel(length,-1); } else{ CString selectetVar; mc_var_Name.GetWindowText(selectetVar); int length2 = selectetVar.GetLength(); mc_var_Name.SetEditSel(length,length2); } } }
-
Es würde ja reichen die zu letzt eingegebene Taste abzufangen. Also wenn backspace oder Entfernen gedrückt wurde dann halt nicht Find() aufrufen.
Wie komme ich denn an die letzte Tastatureingabe?
-
Die Message WM_KEYDOWN geht ja irgendwie nur für den gesamten Dialog und nicht das Combofeld.
Ich habe die OnKeyDown() Methode mit dem Wizard eingefügt, die wird aber irgendwie nicht aufgerufen!?
Gibt es keine Methode des Combofeldes mit der ich die Tastatureingabe auslesen kann oder eine Funktion die ich in der OnEditChange aufrufen kann und die mir die letzte Eingabe zurückgibt?
-
26.09.05 16:18 #4
- Registriert seit
- Jun 2005
- Ort
- Bad Arolsen (Hessen)
- Beiträge
- 556
In den direkten Funktionen für die ComboBox gibts da wohl nichts. Ich würde mal in der Dialogklasse die Funktion PreTranslateMessage überschreiben, die WM_KEYDOWN-Message abfangen und da auf den Tasten-Code Backspace usw. prüfen. Vielleicht gehts so.
Mfg
langer
-
26.09.05 20:48 #5
- Registriert seit
- Jun 2005
- Ort
- Bad Arolsen (Hessen)
- Beiträge
- 556
Vielleicht wäre es auch besser, einen eigene Klasse von CComboBox abzuleiten und da die Funktion OnKeyDown zu überschreiben. Dann wäre man sicher, nur die Meldungen zu erhalten, die wirklich die Combobox betreffen.
langer
-
ok, ich habe nun die PreTranslateMessage.
Wie kann ich testen ob die Message für mein Combo bestimmt ist?
ich habs so versucht:
if(pMsg->hwnd == mc_var_Name.m_hWnd ) ...
geht nich!Geändert von anmae (27.09.05 um 13:45 Uhr)
-
Ich glaube, pMsg->hwnd enthält immer nur den Fensterhandle für den Dialog.
Du könntest aber abprüfen, ob deine Combobox den Eingabefokus hat:
Code :1 2 3 4 5 6 7
if( pMsg->message == WM_KEYDOWN ) { if( ::GetDlgCtrlID(::GetFocus()->m_hWnd) == IDC_MYCOMBOBOX ) { //... } }"The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
--- Larry Wall
-
Danke erstmal,
Bei deiner Variante bekomme ich den Fehler:
m_hWnd' : Ist kein Element von 'HWND__'
desshalb hab ich es so versucht:
Code :1 2
CWnd* wnd = this->GetFocus(); if( ::GetDlgCtrlID(wnd->m_hWnd) == IDC_COMBO_VARNAME )
Der Test klappt aber nie.
-
Sorry, der "::"-Scope bei GetFocus() war natürlich falsch und das pMsg->hwnd nur den Fensterhandle für den Dialog enthält stimmt auch nicht
.
Das Problem liegt darin, dass das Edit-Feld ein eigenes Control darstellt, mit eigener ID und eigenem Fensterhandle. Diese ID ist zum Glück immer dieselbe, so dass folgende Abfrage funktionieren sollte;
Code :1 2 3 4
if( pMsg->hwnd == mc_var_Name.GetDlgItem(1001)->GetSafeHwnd() ) { //... }"The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
--- Larry Wall
Ähnliche Themen
-
Combo-Box Icon
Von Sneakers im Forum JavaAntworten: 1Letzter Beitrag: 25.11.07, 00:21 -
Combo box
Von Fr3dd1 im Forum Visual Basic 6.0Antworten: 21Letzter Beitrag: 09.06.06, 20:28 -
Combo Box
Von WIldi im Forum VisualStudio & MFCAntworten: 3Letzter Beitrag: 20.09.04, 12:43 -
Combo-Box
Von Stephan Boettcher im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 28.06.04, 19:03 -
Combo box****?
Von Devil im Forum Flash PlattformAntworten: 3Letzter Beitrag: 08.10.01, 21:09





Zitieren
Login






