Mostrar um menu suspenso de calendário personalizado com uma classe DateTimePicker derivada

Meu objetivo é criar uma classe DateTimePicker personalizada no .NET 2.0, que mostra uma lista suspensa de calendário personalizada em vez do pop-up de calendário padrão do Windows.

Observando as mensagens do Windows (consulte o código em anexo), sou capaz de encontrar e ocultar / fechar a janela do calendário após a criação.

No entanto, um problema permanece: depois que a janela do calendário é fechada, algo ainda está bloqueando a entrada do mouse. Por exemplo, se você tentar maximizar o formulário do proprietário do controle DateTimePicker personalizado depois que o menu suspenso for fechado programaticamente (código anexado), o botão maximizar não responderá. Somente o próximo clique funciona. Curiosamente, o "clique não funcional" dispara a notificação DTN_CLOSEUP, portanto parece que o WM_CLOSE não fechou corretamente o calendário.

Todas as dicas sobre como realizar minha tarefa são muito apreciadas :)

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

questionAnswers(2)

yourAnswerToTheQuestion