diálogos siempre-en-frente
-
09-09-2019 - |
Pregunta
¿Hay una manera de crear un modal cuadro de diálogo en C ++ MFC que siempre permanece encima de las demás ventanas de la aplicación? Estoy pensando en algo así como el diálogo Buscar en Visual Studio 2005 -. Donde permanece en la parte superior, pero todavía se puede editar el texto subyacente
(Si hace alguna diferencia, no es MDI, es una aplicación basada en diálogos)
Solución
Nish :
La fabricación de su estancia en la parte superior de diálogo
¿No has visto programas que tienen una opción "siempre-stay-on-top"? Bien lo increíble es que se puede hacer que su estancia en la parte superior de diálogo con sólo una línea de código. En pocas palabras el siguiente línea en la clase de diálogo de OnInitDialog () función.
SetWindowPos(&this->wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
Básicamente lo que estamos haciendo es utilizar los SetWindowPos función para cambiar el orden Z de la ventana de diálogo. Nosotros hacer que nuestra estancia de diálogo por encima de todo otras ventanas moviendo a la cima de la Z-orden. Ahora bien, aun cuando activar alguna otra ventana, la ventana se quedará en la parte superior. Pero te aconsejo para asegurarse de que sabe exactamente lo que están haciendo cuando se hace esto, porque podría molestar a la gente si no pueden conseguir la ventana fuera del camino cuando querer hacer eso.
Como se ha mencionado en los comentarios, por encima de la línea hace que la ventana se sientan en la parte superior de cada aplicación. Tendrá que hacer
SetWindowPos(&this->wndTop,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
Para hacer una ventana de sentarse en la parte superior de la única aplicación.
-Adán
Otros consejos
La respuesta aceptada falla para Windows 7 o superior. (O tal vez soy yo) Sin embargo, hacer el diálogo no modal como emergente en lugar de niño lo resuelve. Ahora se posiciona ventana de diálogo principal WRT pero se puede escribir código para limitar cualquier lugar. Usando el borde o sin barra superior hace que sea una simple ventana.