Показать пользовательский раскрывающийся список календаря с производным классом DateTimePicker

Моя цель - создать собственный класс DateTimePicker в .NET 2.0, в котором вместо всплывающего календаря Windows по умолчанию отображается настраиваемый раскрывающийся список.

Наблюдая за сообщениями Windows (см. Прилагаемый код), я могу найти и скрыть / закрыть окно календаря после создания.

Однако проблема остается: после закрытия окна календаря что-то блокирует ввод мыши. Например, если вы попытаетесь максимизировать форму владельца настраиваемого элемента управления DateTimePicker после того, как раскрывающийся список календаря был закрыт программным способом (прикрепленный код), кнопка «Развернуть» не отвечает. Только следующий клик работает. Интересно, что «нефункциональный щелчок» запускает уведомление DTN_CLOSEUP, поэтому кажется, что WM_CLOSE неправильно закрыл календарь.

Любые советы о том, как выполнить мою задачу, очень ценятся :)

protected override void WndProc(ref System.Windows.Forms.Message m)
{
    if (m.Msg == (int)SYSMSG.WM_REFLECT + (int)SYSMSG.WM_NOTIFY)
    {
        NMHDR nmhdr = (NMHDR)m.GetLParam(typeof(NMHDR));
        switch (nmhdr.code)
        {
            case DTN_DROPDOWN:
                // Hide window
                IntPtr calHandle = FindWindow("SysMonthCal32", null);
                SendMessage(calHandle, (int)SYSMSG.WM_SIZE, 0, SP.Convert.MakeLong(0, 0));

                this.BeginInvoke((MethodInvoker)delegate()
                {
                    SendMessage(calHandle, (int)SYSMSG.WM_CLOSE, 0, 0);
                });
                break;
        }

    }

    base.WndProc(ref m);
}

Ответы на вопрос(2)

Ваш ответ на вопрос