Häkchen bei CDateTimeCtrl ist gesetzt, aber das "merkt" das Prog nicht - wieso?
-
Hallo!
Ich habe ein CDateTimeCtrl, bei dem man per Häkchen wählen kann, ob es gilt oder nicht.
Nun setze ich dieses Häkchen, aber meine Funktion ist stur der Meinung, dass es nicht gesetzt ist. Was läuft da falsch?inline bool CKundenSet::SetKundeGebdatum(CDateTimeCtrl& f_dtpKundeGebdatum) { COleDateTime tmGebdat; if (f_dtpKundeGebdatum.GetTime(tmGebdat) == GDT_NONE) { SetFieldNull(&m_tmKundeGebdatum, TRUE); } else { m_tmKundeGebdatum = tmGebdat; } return true; }
Hier der Vollständigkeit halber der Aufruf.
fOkay &= f_Set.SetKundeGebdatum(m_dtpKndGebdat);
Die Variable wurde per Klassenassistent erstellt und funktioniert ansonsten wunderbar...
Hat jemand eine Idee?
-
Du mußt ein DX vornehmen.
UpdateData(FALSE);
Gruß Christian
-
Das hilft nicht.
Abgesehen davon, dass ich nicht verstehe, warum ich das machen soll. Sorry, ich möchte immer verstehen, was ich mache.Mein Gedankengang:
Ich habe eine Controlvariable, DX muss dann nicht gemacht werden.
UpdateData(FALSE) schreibt die Werte aus den Variablen ins Control - ich will aber auslesen.
UpdateData(TRUE) steht schon weiter oben, das kann es auch nicht sein.Wo hab ich was falsch verstanden?
-
Das mal gelesen:
The return value DWORD in the second and third versions, above, indicates whether or not the date and time picker control is set to the "no date" status, as indicated in the NMDATETIMECHANGE structure member dwFlags. If the value returned equals GDT_NONE, the control is set to "no date" status, and uses the DTS_SHOWNONE style. If the value returned equals GDT_VALID, the system time is successfully stored in the destination location.
-
Das habe ich gelesen. Deswegen ja die if in der Funktion...
Aber da ich eventuell mit Englich auf Kriegsfuß stehe, schreibe ich mal, was ich daraus verstehe:
Der Rückgabewert sagt mir, ob in dem Control ein gültiger Wert steht oder nicht.
Wenn ich GDT_NONE zurückbekomme, ist das Häkchen nicht gesetzt.
Wenn ich GDT_VALID bekomme, ist das Datum okay.(Der Debugger sagt 1, das ist GDT_NONE. Und das, wo ich wirklich das Häkchen gesetzt habe.
)
-
Hallo,
du hast dich in der Auswahl der Funktion geirrt, oder die MSDN-Doku zu dieser Funktion nicht genau genug gelesen, es gibt ja diese drei:
BOOL GetTime( COleDateTime& timeDest ) const;
DWORD GetTime( CTime& timeDest ) const;
DWORD GetTime( LPSYSTEMTIME pTimeDest ) const;
und der Compiler greift sich die erstere, da du ein COleDateTime-Objekt verwenden willst, und da bekommst du nur ein BOOL zurück, sicher nicht das, was du wolltest, denn nur bei den anderen Überladungen von GetTime bekommt man im DWORD auch GDT_NONE bzw. GDT_VALID zurück (und das Phänomen, das du beschrieben hast, läßt sich leicht erklären, wenn man weiß, daß GetTime TRUE = 1 == GDT_NONE zurückliefert, wenn das Häkchen gesetzt ist, übrigens auch dann, wenn das Häkchen nicht gesetzt ist, weswegen diese Überladung sich überhaupt nicht eignet, die Zustände GDT_NONE bzw. GDT_VALID zu unterscheiden).
MfG
-
Achsoooo!
Okay, dann muss ich das extra testen, weil mit CTime kann ich nix anfangen.
Vielen Dank, du warst mal wieder Retter in der Not.