Strg + V im CEdit Feld blocken
-
moin
ich hab nen dialog mit einem CEdit Feld ...
in diesem Feld möchte ich das einfügen blocken (strg+v)
kann ich das event irgendwie abfangen ?ich habs mit dem onchance versucht und das funktioniert auch zum großen teil, aber es gibt halt da doch noch eins was ich schlecht abfangen kann
daher hab ich überlegt ob man das einfügen von mehreren zeichen per strg+v grundsätzlich blocken kann (normale eingaben sollen aber weiterhin möglich sein, auch das löschen von mehreren zeichen)
mfg LT
-
Du musst das Edit control subclassen und eine eigene Klasse aufbauen.
Dann kannst Du für dieses Control Strg+V im WM_KEYDOWN Handler behandeln.Du solltest in dem Fall aber auch die WM_PASTE Nachricht behandeln.
Und Dir muss klar sein, dass es auch ein Kontextmenü gibt!
-
LordTerra schrieb:
in diesem Feld möchte ich das einfügen blocken (strg+v)
Benutzerfreundlichkeit wird sowieso überschätzt.
-
MFK schrieb:
LordTerra schrieb:
in diesem Feld möchte ich das einfügen blocken (strg+v)
Benutzerfreundlichkeit wird sowieso überschätzt.
tja was soll ich machen ... kunde will es so also programmiert man es halt so ...
Martin Richter schrieb:
Du musst das Edit control subclassen und eine eigene Klasse aufbauen.
Dann kannst Du für dieses Control Strg+V im WM_KEYDOWN Handler behandeln.Du solltest in dem Fall aber auch die WM_PASTE Nachricht behandeln.
Und Dir muss klar sein, dass es auch ein Kontextmenü gibt!wie subclasst man ne klasse ? bzw was verstehst du da drunter ... sorry kann mir da grad nix drunter vorstellen ...
-
bzw hab mich mit meinem kollegen unterhalten der hatt schonmal ne subclasse erstellt daher konnte er mir fix zeigen wie du das meinst ... und WM_KEYDOWN hab ich auch gefunden aber WM_PASTE gibts bei mir net als auswahlmöglichkeit
-
Dann musst Du halt WM_PASTE selbst in die Messagemap einttragen.
Kanst Du nur mit dem Wizard umgehen?zu Subclassing. Siehe MSDN Samples CYellowEdit (behandelt zwar refelection, ist aber ein subclass sample)
-
hab noch nie was in ne Messagemap eingetragen ... war aber auch net nötig ...
ich hab das keydown wie folgt überschrieben:
void CCustomCEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { if(nChar == 86){ if (GetAsyncKeyState(17)&0x8000){ m_paste=TRUE; } } CEdit::OnKeyDown(nChar, nRepCnt, nFlags); }
erst auf v überprüft und dann geguckt ob strg gedrückt is
und dann halt nen flag gesetzt auf welches ich in der onchange des dialoges in dem die cedit drin ist reagiere und das entsprechend abhandel ... so funktioniert dasalso thx war der richtige tip
-
Um WM_PASTE abzufangen musst Du aber in die Messagemap etwas manuell eintragen.
Ansonsten:
Ich kann GetAsyncKeyState langsam nicht mehr sehen.
http://blog.m-ri.de/index.php/2008/06/11/die-unsitte-getasynchkeystate-statt-geykeystate-zu-verwenden/
-
moin
ok das mit dem GetKeyState hab ich verstanden und geändert ...
das mit dem Messagemap noch nicht ...
was muss ich da machen (vielleicht in einzelnen schritten mal beschreiben) benutze vs 2010
-
Wie bei jeder normalen Funktion erstmal:
Deklaration in den Header
Definition in den Codeund für Nachrichten eben noch:
ON_MESSAGE (oder anderen) Handler in die Map.