Erstellen eines Monatskalendersteuerelements
In diesem Thema wird veranschaulicht, wie Sie mithilfe der CreateWindowEx-Funktion dynamisch ein Monatskalendersteuerelement erstellen.
Wichtige Informationen
Technologien
Voraussetzungen
- C/C++
- Programmierung der Windows-Benutzeroberfläche
Anweisungen
Um ein Monatskalendersteuerelement zu erstellen, verwenden Sie die CreateWindowEx-Funktion , und geben Sie MONTHCAL_CLASS als Fensterklasse an. Sie müssen zuerst die Fensterklasse registrieren, indem Sie die InitCommonControlsEx-Funktion aufrufen und das ICC_DATE_CLASSES Bit in der begleitenden INITCOMMONCONTROLSEX-Struktur angeben.
Im folgenden Beispiel wird veranschaulicht, wie Sie ein Monatskalendersteuerelement in einem vorhandenen dialogfeld ohne Modus erstellen. Beachten Sie, dass die an CreateWindowEx übergebenen Größenwerte alle Nullen sind. Da die erforderliche Mindestgröße von der Schriftart abhängt, die das Steuerelement verwendet, verwendet das Beispiel das MonthCal_GetMinReqRect Makros, um Größeninformationen anzufordern, und ändert dann die Größe des Steuerelements, indem SetWindowPos aufgerufen wird. Wenn Sie die Schriftart anschließend mit WM_SETFONT ändern, ändern sich die Abmessungen des Steuerelements nicht. Sie müssen MonthCal_GetMinReqRect erneut aufrufen und die Größe des Steuerelements an die neue Schriftart ändern.
// Child window identifier of the month calendar.
#define IDC_MONTHCAL 101
// Symbols used by SetWindowPos function (arbitrary values).
#define LEFT 35
#define TOP 40
// Description:
// Creates a month calendar control in a dialog box.
// Parameters:
// hwndOwner - handle of the owner window.
// Nonlocal variables:
// MonthCalDlgProc - window procedure of the dialog box that
// contains the month calendar.
// g_hInst - global instance handle.
//
HRESULT CreateMonthCalDialog(HWND hwndOwner)
{
RECT rc;
INITCOMMONCONTROLSEX icex;
HWND hwndDlg = NULL;
HWND hwndMonthCal = NULL;
// Return an error code if the owner handle is invalid.
if (hwndOwner == NULL)
return E_INVALIDARG;
// Load the window class.
icex.dwSize = sizeof(icex);
icex.dwICC = ICC_DATE_CLASSES;
InitCommonControlsEx(&icex);
// Create a modeless dialog box to hold the control.
hwndDlg = CreateDialog(g_hInst,
MAKEINTRESOURCE(IDD_DATE_PICKER),
hwndOwner,
MonthCalDlgProc);
// Return if creating the dialog box failed.
if (hwndDlg == NULL)
return HRESULT_FROM_WIN32(GetLastError());
// Create the month calendar.
hwndMonthCal = CreateWindowEx(0,
MONTHCAL_CLASS,
L"",
WS_BORDER | WS_CHILD | WS_VISIBLE | MCS_DAYSTATE,
0,0,0,0, // resize it later
hwndDlg,
(HMENU) IDC_MONTHCAL,
g_hInst,
NULL);
// Return if creating the month calendar failed.
if (hwndMonthCal == NULL)
return HRESULT_FROM_WIN32(GetLastError());
// Get the size required to show an entire month.
MonthCal_GetMinReqRect(hwndMonthCal, &rc);
// Resize the control now that the size values have been obtained.
SetWindowPos(hwndMonthCal, NULL, LEFT, TOP,
rc.right, rc.bottom, SWP_NOZORDER);
// Set the calendar to the annual view.
MonthCal_SetCurrentView(hwndMonthCal, MCMV_YEAR);
// Make the window visible.
ShowWindow(hwndDlg, SW_SHOW);
return S_OK;
}
Zugehörige Themen