次の方法で共有


月カレンダー コントロールを作成する方法

このトピックでは、CreateWindowEx 関数を使用して 1 か月カレンダー コントロールを動的に作成する方法について説明します。

知っておくべきこと

テクノロジ

前提条件

  • C/C++
  • Windows ユーザー インターフェイス プログラミング

手順

1 か月カレンダー コントロールを作成するには、ウィンドウ クラスとして MONTHCAL_CLASS を指定して CreateWindowEx 関数を使用します。 まず、付随する INITCOMMONCONTROLSEX 構造体で ICC_DATE_CLASSES ビットを指定して InitCommonControlsEx 関数を呼び出すことにより、ウィンドウ クラスを登録します。

次の例では、既存のモードレス ダイアログ ボックスで 1 か月カレンダー コントロールを作成する方法を示します。 CreateWindowEx に渡されるサイズ値はすべてゼロであることに注意してください。 必要な最小サイズは、コントロールで使用するフォントによって異なるため、この例では MonthCal_GetMinReqRect マクロを使用してサイズ情報を要求し、その後で SetWindowPos を呼び出してコントロールのサイズを変更します。 それ以降に WM_SETFONT を使用してフォントを変更する場合は、コントロールの寸法は変更されません。 MonthCal_GetMinReqRect をもう一度呼び出して、新しいフォントに合うようにコントロールのサイズを変更する必要があります。

// 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;
}

月カレンダー コントロール リファレンス

月カレンダー コントロールについて

月カレンダー コントロールの使用