Page 2 of 2

Re: Dialogos dentro de una ventana

Posted: Mon Dec 22, 2025 1:57 pm
by alvaro533

Buenas tardes,

He actualizado recientemente a FWH2512 64 bits desde FWH2310 64 bits y funciona todo perfectamente salvo esto,

Code: Select all | Expand

ACTIVATE DIALOG oDlg AS MDICHILD

Antes se podía crear una mdichild a partir de un dialog en .rc, como decía Mr. Rao más arriba en este hilo. Pero parece que ya no. ¿es así?

Un saludo
Alvaro


Re: Dialogos dentro de una ventana

Posted: Tue Dec 23, 2025 6:16 am
by Antonio Linares

Estimado Alvaro,

Acabo de probar el ejemplo samples\ui\dialogs\mdidlg.prg (ojo que mdidlg.rc está en una carpeta equivocada y hay que moverlo a la misma de mdidlg.prg) y ha funcionado correctamente en 32 y 64 bits.

Por favor pruébalo, gracias


Re: Dialogos dentro de una ventana

Posted: Wed Dec 24, 2025 9:22 am
by alvaro533

Buenos días Antonio,

Efectivamente el ejemplo que mencionas funciona. Ya he encontrado lo que pasaba. Como sabes estoy modificando las clases para que el programa funcione bien con "DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2" y no se vea borroso en monitores 4k donde se ha activado el escalado de windows. En la clase mdichild.prg:

Code: Select all | Expand

METHOD New( nTop, nLeft, nBottom, nRight, cTitle, nStyle, oMenu, oWnd,;
      oIcon, lVScroll, nClrFore, nClrBack, oCursor, oBrush,;
      lPixel, lHScroll, nHelpId, cBorder, lSysMenu, lCaption,;
      lMin, lMax, nMenuInfo, lUnicode ) CLASS TMdiChild

   local lMaximize   := .f.

   DEFAULT oWnd     := GetWndFrame(),;
      cTitle   := "MDI Child " + AllTrim( Str( Len( oWnd:oWndClient:aWnd ) + 1 ) ),;
      lVScroll := .f., lHScroll := .f.,;
      nClrFore := oWnd:oWndClient:nClrText,;
      nClrBack := oWnd:oWndClient:nClrPane,;
      nStyle   := 0,;
      cBorder  := "SINGLE", lSysMenu := .t., lCaption := .t.,;
      lMin     := .t., lMax := .t., lPixel := .f., ;
      lUnicode := FW_SetUnicode()

   ?nTop, nLeft, nBottom, nRight // DpiAwareness AQ ------

Cuando la ventana se crea por código llegan unos valores en pixeles reales para nTop, nLeft, nBottom y nRight, que yo trato para escalarlos. Sin embargo cuando la ventana se crea a partir de un diálogo con "ACTIVATE DIALOG oDlg AS MDICHILD", los valores que llegan de nTop y nLeft son muy altos, 2147483648, que lógicamente se salen de la pantalla, por lo que la ventana no se muestra.

Ya lo he corregido y funciona. Muchas gracias.

Alvaro