001
17.01.2006, 16:56 Uhr
mmc20
puss in boots
|
hi da musst du dir selbst was basteln... ist aber nicht sooo schwer.
1. eigenes CEdit erstellen ( neue klasse von CEdit ableiten ) nennen wir es "XEdit"... 2. virtuelle funktion "PreTranslateMsg" hinzufügen 3. nachricht =EN_KILLFOCUS hinzufügen
in "PreTranslateMsg" reagierst du auf die tastendrücke/mausaktionen und in "OnKillFocus" bearbeitest du deinen string.
ich hab das mal für nen zahlenfeld gebraucht, wo zb. doppelte minus gefiltert und kommas in punkte umgewandelt wurden.
C++: |
///////////////////////////////////////////////////////////////////////////// // Behandlungsroutinen für Nachrichten XEdit
BOOL XEdit::PreTranslateMessage(MSG* pMsg) { if ( pMsg->message == WM_KEYDOWN ){ switch ( pMsg->wParam ) { case VK_RETURN: case VK_DOWN: ((CDialog*)GetParent())->NextDlgCtrl(); break; case VK_UP: ((CDialog*)GetParent())->PrevDlgCtrl(); break; } } return CEdit::PreTranslateMessage(pMsg); }
void XEdit::OnKillfocus() { CString tmp = ""; GetLine( 0, tmp.GetBuffer(16), 15); tmp.ReleaseBuffer();
if ( tmp.IsEmpty() ) return;
tmp.Replace(",","."); for ( int i = 0; i < tmp.GetLength(); i++ ) { if ( !IsDigit(tmp.GetAt(i)) ) { tmp.Delete( i, 1); i--; } } if ( tmp.Find( "-", 0) > 0 ) { tmp.Delete( tmp.Find( "-", 0), 1); tmp.Insert( 0, "-"); } this->SetWindowText( tmp ); }
BOOL XEdit::IsDigit(char c) { const CString digits = "0123456789.-"; return (digits.Find( c, 0) >= 0); }
|
|