SGS
es un "problema"(?) de window por las transparencias cuando el AERO esta activado, la funcion SaveToBmp toma el DC del control que lo llama y lo convierte en Bitmap, cuando el AERO esta activado el mensajes de pintado para los controles funcionan distinto pues usan otras tecnicas de pintado para lograr transparencias, con AERO desactivado, las transparencias son "simuladas" ya que se pintan sobre el DC de la ventana los controles que estan sobre ellas ( que no son CHILD ) y asi evitar los parpadeos, puedes ver esta situacion colocando el dialogo fuera del area de la ventana prinicpal y usa SaveToBmp().
En el api de window despues se hizo la funcion PrintWindow para trabajar de forma igual con cada thema, te dejo una funcion un ejemplo que lo
veas funcionando y trabaja igual en cada caso
- Code: Select all Expand view
#include "FiveWin.ch"
static oWnd, oMenu, oDlg
//----------------------------------------------------------------------------//
function main()
DEFINE WINDOW oWnd from 1,1 TO 30,60 TITLE "Testing SaveToBmp/PrintWindow";
MENU bldMenu()
SET MESSAGE of oWnd to "DIALOG from HELL!!"
ACTIVATE WINDOW oWnd
return NIL
//----------------------------------------------------------------------------//
function bldMenu()
local oMenu
MENU oMenu
MENUITEM "Start dialog box" ;
ACTION startDia()
MENUITEM "&Exit" ;
ACTION oWnd:end()
ENDMENU
return oMenu
//----------------------------------------------------------------------------//
function startDia()
local i,cVar:="lalalalala",cVar1:="hoplalalalala"
DEFINE DIALOG oDlg FROM 1,10 TO 24,60 OF oWnd
for i := 1 to 20
@i,1 SAY "This is a line of text" OF oDlg
next
@ 1, 12 BUTTON "SaveToBmp" OF oDlg ACTION oWnd:SaveToBmp( "SaveToBmp.bmp" )
@ 3, 12 BUTTON "Print window" OF oDlg ACTION SaveToBmp2( oWnd, "PrintWnd.bmp" )
ACTIVATE DIALOG oDlg
return NIL
//----------------------------------------------------------------------------//
Function SaveToBmp2( oWnd, cBmpFile )
local hDeskDC := GetDC( GetDesktopWindow() )
local hDC := CreateCompatibleDC( hDeskDC )
local hOldBmp
local hDib
local hBmp
local arect := GetWndRect( oWnd:hWnd )
hBmp = CreateCompatibleBitmap( hDeskDC, arect[ 4 ] - arect[ 2 ], arect[ 3 ] - arect[ 1 ] )
hOldBmp = SelectObject( hDC, hBmp )
PrintWindow( oWnd:hWnd, hDC )
SelectObject( hDC, hOldBmp )
DeleteDC( hDC )
hDib = DibFromBitmap( hBmp )
DibWrite( cBmpFile, hDib )
GloBalFree( hDib )
DeleteObject( hBmp )
return ( File( cBmpFile ) )