Dialogos dentro de una ventana

alvaro533
Posts: 231
Joined: Sat Apr 19, 2008 10:28 pm
Location: Madrid, España

Re: Dialogos dentro de una ventana

Post 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

User avatar
Antonio Linares
Site Admin
Posts: 44515
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Dialogos dentro de una ventana

Post 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

regards, saludos

Antonio Linares
www.fivetechsoft.com
alvaro533
Posts: 231
Joined: Sat Apr 19, 2008 10:28 pm
Location: Madrid, España

Re: Dialogos dentro de una ventana

Post 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

Post Reply