Моя цель - создать собственный класс 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);
}