上記のchaからの返信は正しい解決策です。コントロールがSetMonthCalFont呼び出しに従うようにするには、ビジュアルテーマを無効にする必要があります。ただし、いくつかのトリックが関係しています。
1)CDateTimeCtrlオブジェクトでSetWindowThemeを呼び出すことはできません。これは、呼び出しが子ウィンドウではなく、その直接のウィンドウにのみ適用されるためです。月のドロップダウンは子ウィンドウであるため、影響を受けません。したがって、代わりに、コントロールのDTN_DROPDOWN通知を処理し、そこで子の月のコントロールを取得して、そこからビジュアルテーマを削除する必要があります。
2)DTN_DROPDOWN通知が送信される前に、子コントロールのサイズ/位置が決定されます。したがって、上記の#1を実行しても、適切なサイズになりません。したがって、サイズを更新する必要があります。
3)どうやら、MSDNのドキュメントに示されているように見えますが、実際には1つのスペースを持つ文字列ではなく空の文字列を渡すことが目的です。
4)以下のコードは、カレンダーのドロップダウンコントロールが画面の端に近い場合を考慮していません。これが発生した場合、コードを修正して、コードが表示されるように位置をシフトする必要がある可能性があります。
上記の情報は、問題を解決し、カスタムフォントでコントロールを正しく表示する以下のコードとともに、MicrosoftサポートのDaveAndersonによって提供されました。
したがって、ダイアログInitInstance()のCDateTimeCtrlオブジェクトでSetMonthCalFont()を呼び出し、次のコードを使用してDTN_DROPDOWN通知も処理します。
Daveは、「このアプローチは、将来変更される可能性があり、以下のコードが破損する可能性があるDate andTimePickerコントロールの実装の詳細に依存している」という警告を提供したことに注意してください。
void DSomeDialog::OnDtnDropdownMyDateTimeCtrl(NMHDR *pNMHDR, LRESULT *pResult)
{
HWND hWndDateTime = (HWND)pNMHDR->hwndFrom;
HWND hWndMonthCal = DateTime_GetMonthCal(hWndDateTime);
HWND hWndDropDown = ::GetParent(hWndMonthCal);
DWORD dwWidth;
WINDOWINFO wi;
if (hWndMonthCal && hWndDropDown)
{
RECT rcIdeal;
//
// Remove the window theme from the month calendar
// control
SetWindowTheme(hWndMonthCal, L"", L"");
//
// Get the ideal size of the month calendar control
ZeroMemory(&rcIdeal, sizeof(rcIdeal));
MonthCal_GetMinReqRect(hWndMonthCal, &rcIdeal);
dwWidth = MonthCal_GetMaxTodayWidth(hWndMonthCal);
if (dwWidth > (DWORD)rcIdeal.right)
{
rcIdeal.right = dwWidth;
}
//
// Add some padding
InflateRect(&rcIdeal, 3, 3);
//
// Determine the new size of the drop down window such
// that the client area of the window is large enough
// to display the month calendar control
ZeroMemory(&wi, sizeof(wi));
wi.cbSize = sizeof(WINDOWINFO);
::GetWindowInfo(hWndDropDown, &wi);
AdjustWindowRectEx(&rcIdeal, wi.dwStyle, FALSE, wi.dwExStyle);
//
// Update the size of the drop down window
::SetWindowPos(hWndDropDown,
NULL,
0,
0,
rcIdeal.right - rcIdeal.left,
rcIdeal.bottom - rcIdeal.top,
SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOOWNERZORDER);
}
*pResult = 0;
}