Tengo una ventana que maneja los mensajes WM_NCLBUTTONUP, para manejar los clics en los botones personalizados en la barra de título. Esto funciona muy bien cuando la ventana está maximizada, pero cuando no lo es, ¡el mensaje WM_NCLBUTTONUP nunca llega! Sin embargo, recibo un mensaje WM_NCLBUTTONDOWN. Extrañamente WM_NCLBUTTONUP llega si hago clic a la derecha de la barra de menú, pero en cualquier lugar a lo largo de la barra de título/marco de ventana, el mensaje nunca llega.El curioso problema del mensaje WM_NCLBUTTONUP que falta cuando una ventana no está maximizada
Después de un tiempo de depuración descubrí que si establecía un punto de interrupción en CMainFrame :: OnNcLButtonDown(), hacía clic en la barra de título, pero mantenía presionado el botón del mouse, dejaba que el depurador interrumpa la función, pulsa F5 para continuar depuración, luego suelte el botón del mouse - ¡mágicamente se envía WM_NCLBUTTONUP!
Mi pregunta es doble, (1) ¿Qué demonios está pasando? (2) ¿cómo puedo solucionar este "problema"?
También observo que hay muchas otras personas en Internet que tienen el mismo problema (un Google rápido revela muchas otras personas con el mismo problema, pero no tiene solución).
Editar
Gracias por las dos primeras respuestas, he intentado llamar ReleaseCapture en NCLButtonDown, pero no tiene ningún efecto (de hecho, devuelve NULL, lo que indica una captura no está en su lugar). Solo puedo suponer que la funcionalidad de la clase base (def window proc) puede establecer una captura. Voy a investigar el lunes ...