Mostrar un menú desplegable de calendario personalizado con una clase DateTimePicker derivada

Mi objetivo es crear una clase personalizada DateTimePicker en .NET 2.0, que muestra un menú desplegable de calendario personalizado en lugar de la ventana emergente de calendario predeterminada de Windows.

Al observar los mensajes de Windows (ver código adjunto), puedo encontrar y ocultar / cerrar la ventana del calendario después de la creación.

Sin embargo, sigue habiendo un problema: después de cerrar la ventana del calendario, algo sigue bloqueando la entrada del mouse. Por ejemplo, si intenta maximizar la forma de propietario del control DateTimePicker personalizado después de que el menú desplegable del calendario se haya cerrado mediante programación (código adjunto), el botón Maximizar no responde. Sólo el siguiente clic funciona. Curiosamente, el "clic no funcional" activa la notificación DTN_CLOSEUP, por lo que parece que WM_CLOSE no cerró correctamente el calendario.

Cualquier consejo sobre cómo llevar a cabo mi tarea es muy apreciado :)

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta