009
04.05.2004, 16:01 Uhr
Tommix
|
Ich hatte da mal was gebastelt. Das Eingabefeld bekommt eine Variable vom Typ CString und sei im Dialog CEditDialog. ReFormat ersetzt Komma durch Punkt, setzt auf defaultVal, wenn die Eingabe keine Zahl war und begrenzt auf min/max.
C++: |
// EditDialog.h: #include <float.h>
class CEditDialog : public CDialog { //... private: void ReFormat(CString& value, double defaultVal = 0.0, double min = -DBL_MAX, double max = DBL_MAX, int digits = 3) const; };
// EditDialog.cpp:
void CEditDialog::ReFormat(CString& value, double defaultVal, double min, double max, int digits) const { double val; { value.Replace(',', '.'); /*CLocale locale(CLocale::international);*/ if (1 == sscanf(value, "%lf", &val)) { if (val < min) val = min; else if (val > max) val = max; } else { val = defaultVal; } } CString format; ASSERT((digits >= 0) && (digits <= 9));
format.Format("%%.%df", digits); value.Format(format, val); }
|
Für die Eingabefelder überlädt man dann OnKillFocus, also z.B.
C++: |
void CEditDialog::OnKillfocusEditX() { UpdateData(); ReFormat(m_x, default_x, -999.999, 999.999); UpdateData(FALSE); }
|
An den Wert kommst Du dann mit
C++: |
double val; sscanf(m_x, "%lf", &val)
|
Eventuell ist das ganze etwas überpowert aber ich hatte es, wie gesagt, so in der Schublade.
Gruss, Tommix
Bearbeitung: |
CLocale hatten wir vor ein paar Tagen mal, brauchst Du aber nicht.
|
Dieser Post wurde am 04.05.2004 um 16:03 Uhr von Tommix editiert. |