Microsoft Foundation Classes (Desktop)

Mein erster Versuch mit „CMFCMaskedEdit“

Ich habe gerade ein kleines Projekt bei dem ich mich endlich mal ausgiebig mit den neuen MFC Klassen des Visual C++ 2008 Feature Pack beschäftigen kann.
Unter anderem brauche ich die Möglichkeit einer Versionsnummerneingabe. Dazu wollte ich das "CMFCMaskedEdit" Control verwenden.
Im Prinzip ist es ein normales EDIT Control bei dem man einen Eingabefilter setzen kann um ein bestimmtes Format zu erhalten. Wer es sich mal anschauen möchte findet im "NewControls" Sample des Feature Pack Beispielscodes ein Projekt bei dem es in unterschiedlichen Varianten verwendet wird.
Bei den Versionsnummern handel es sich um vier einstellige Dezimalzahlen die jeweils mit einem "." getrennt sind. Beispielsweise"1.2.3.4". So etwas wie "1.2.3.99" gib es also nicht.
In der jeweiligen Dialogfeldklasse muss man dann jeweils eine Membervariable für das Steuerelement erstellen. Leider geht das nicht über den Assistenten, dieser bietet uns nur CEdit an. Das nehmen wir dann aber einfach und nachdem der Assistent fertig ist überschreiben wir in der Header Datei einfach das CEdit mit CMFCMaskedEdit.
Dann müssen wir das Format definieren.
 

m_edtMinVersion.EnableMask("D D D D","_._._._");

Der erste Parameter gib die Maske an welche Zeichen an welcher Position erlaubt sind. "D" steht für Zahlen.

Der zweite Parameter gibt das Format der Eingabe an. Die "_" stehen dabei als Platzhalter für die einzugebenen Daten.

Faul wie man als Entwickler nun mal häufig ist habe ich erst gar nicht die MSDN Dokumentation gelesen sondern mich einfach an das "NewControls" Sample gehalten.

Dort wird noch die Funktion "SetValidChars" aufgerufen. Ich habe meinen Code noch um den Aufruf ergänzt und schon mal per SetWindowText einen Default Wert angegeben.

Der Code war dann also wie folgt:

m_edtMinVersion.EnableMask(

"D D D D","_._._._");

m_edtMinVersion.SetValidChars(

"123456789");

m_edtMinVersion.SetWindowText(

"3.0.6.3");

Und siehe da: Nichts geht. Der Text wird nicht vorbelegt und die Eingabe funktioniert auch nicht richtig.

Kurz den Code überflogen und habe mir dann überlegt das ich evtl. noch den "." und das "_" als erlaubtes Zeichen setzen müsste, das hat aber auch nichts gebracht.

Da aber auch ein blindes Huhn mal ein Korn findet ist mir dann doch noch aufgefallen das eigentlich auch eine "0" erlaubt werden müsste. Siehe da, schon klappte es.

Beim weiteren rumspielen ist mir dann noch aufgefallen das ich auf die "SetValidChars" Funktion auch hätte komplett verzichten können, das die Maske des Controls das auch schon automatisch regelt. Ein "D" steht auch wirklich nur für eine Zahl, das bedeutet mehr kann man auch wirklich nicht eingeben.

Das ganze hat mich zwar nur ein paar Minuten gekostet, aber beim nächsten Control lese ich erst wieder die Dokumentation.

 

– Patrick

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s