Una pregunta Leandro.
La ventana a desplegar (aquella que quieres saber si se queda fuera de pantalla), de qué tipo es ?
Lo pregunto porque, dependiendo del tipo de ventana o dialogo, se quedara dentro de su dialogo o ventana contenedor. ¿no?
Se puede calcular, casi lo he conseguido, la posición relativa dentro de la aplicación :
GetSysMetrics(1) devuelve la resolución vertical del monitor
Sabiendo la posición donde se encuentra el dialogo, su MDICHILD contenedor y luego su MDIFRAME, se puede calcular si cabe o no.
Solo me falla una cosa. Saber donde se está ejecutando la aplicación. Si el MDIFRAME esta maximizado es fácil, pero cuando no lo esta, el ::nTop devuelve 0 (cero), con lo que el calcula relativo a la resolución vertical no vale. Para el resto de casos si.
Por ejemplo. Quiero desplegar un xBrowse dentro de un dialogo (oDlg), que está dentro de una ventana (oMDI), que esta dentro de una ventana principal (oWnd)
GetSysMetrics(1), devuelve una resolución vertical de 768 puntos
oWnd, que es la ventana principal de la aplicación (TMDIFRAME), está en ::nTop -8 y ::nBottom +736
oMdi, ventana hija, esta en ::nTop 100 y ::nBottom 600
Por tanto, si quiere colocar otra ventana o dialogo (oNuevoObjeto) en la posición vertical 300 del oMdi, estaré en 100+300 (oMdi:nTop+oNuevoObjeto:nTop)
Si hay mas ventanas contenedoras, puedes anidar el cálculo de la posición relativa, hasta que llegas al TMDIFRAME
El resultado que obtienes, sería la posición ::nTop relativa del nuevo objeto (oNuevoObjeto)
Si este resultado + la altura del objeto (oNuevoObjeto:nHeight) es mayor que GetSysMetrics(1), entonces se queda fuera de la pantalla.
Esto funciona si el TMDIFRAME está maximizado.
Tal vez alguno de los SABIOS podría decirnos como saber la posición relativa dentro del monitor de la ventana principal y de esa manera calcularlo para todos _
Nota : Luego _ el punto de la derecha con los mismos cálculos pero utilizando GetSysMetrics(0) para la resolución horizontal de la pantalla y ::nLeft, ::nRight de las ventanas o diálogos.
Nota 2 : Igual me he explicado fatal.