Zugreifen auf das eingebettete Monatskalender-Steuerelement

Auf das eingebettete Monatskalender-Steuerelementobjekt kann über das CDateTimeCtrl Objekt mit einem Aufruf der Memberfunktion "GetMonthCalCtrl " zugegriffen werden.

Hinweis

Das eingebettete Monatskalendersteuerelement wird nur verwendet, wenn das Datums- und Uhrzeitauswahl-Steuerelement nicht über den DTS_UPDOWN Formatvorlagensatz verfügt.

Dies ist nützlich, wenn Sie bestimmte Attribute ändern möchten, bevor das eingebettete Steuerelement angezeigt wird. Behandeln Sie dazu die DTN_DROPDOWN Benachrichtigung, rufen Sie das Monatskalendersteuerelement (mit CDateTimeCtrl::GetMonthCalCtrl) ab, und nehmen Sie Ihre Änderungen vor. Leider ist das Monatskalendersteuerelement nicht dauerhaft.

Anders ausgedrückt: Wenn der Benutzer die Anzeige des Monatskalendersteuerelements anfordert, wird ein neues Monatskalendersteuerelement erstellt (vor der DTN_DROPDOWN-Benachrichtigung ). Das Steuerelement wird zerstört (nach der DTN_CLOSEUP-Benachrichtigung ), wenn es vom Benutzer geschlossen wird. Dies bedeutet, dass alle Attribute, die Sie ändern, bevor das eingebettete Steuerelement angezeigt wird, verloren gehen, wenn das eingebettete Steuerelement geschlossen wird.

Im folgenden Beispiel wird dieses Verfahren mithilfe eines Handlers für die DTN_DROPDOWN-Benachrichtigung veranschaulicht. Der Code ändert die Hintergrundfarbe des Monatskalendersteuerelements mit einem Aufruf von SetMonthCalColor in Grau. Der Code lautet wie folgt:

void CMyDialog::OnDtnDropdownDatetimepicker1(NMHDR *pNMHDR, LRESULT *pResult)
{
   UNREFERENCED_PARAMETER(pNMHDR);

   //set the background color of the month to gray
   COLORREF clr = RGB(100, 100, 100);

   m_DateTimeCtrl.SetMonthCalColor(MCSC_MONTHBK, clr);

   *pResult = 0;
}

Wie bereits erwähnt, gehen alle Änderungen an Eigenschaften des Monatskalendersteuerelements verloren, mit zwei Ausnahmen, wenn das eingebettete Steuerelement geschlossen wird. Die erste Ausnahme, die Farben des Monatskalendersteuerelements, wurden bereits diskutiert. Die zweite Ausnahme ist die Schriftart, die vom Monatskalendersteuerelement verwendet wird. Sie können die Standardschriftart ändern, indem Sie CDateTimeCtrl::SetMonthCalFont aufrufen und das Handle einer vorhandenen Schriftart übergeben. Im folgenden Beispiel (dabei m_dtPicker handelt es sich um das Datums- und Uhrzeitsteuerelementobjekt) wird eine mögliche Methode veranschaulicht:


//create and initialize the font to be used
LOGFONT logFont = {0};
logFont.lfHeight = -12;
logFont.lfWeight = FW_NORMAL;
logFont.lfCharSet = DEFAULT_CHARSET;
_tcscpy_s(logFont.lfFaceName, _countof(logFont.lfFaceName),
          _T("Verdana"));

m_MonthCalFont.CreateFontIndirect(&logFont);
m_DateTimeCtrl.SetMonthCalFont(m_MonthCalFont);

Nachdem die Schriftart geändert wurde, wird mit einem Aufruf der CDateTimeCtrl::SetMonthCalFontneuen Schriftart gespeichert und beim nächsten Anzeigen eines Monatskalenders verwendet.

Siehe auch

Verwenden von CDateTimeCtrl
Steuerelemente