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:
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