Page 1 of 1
Visualizzare una bitmat su oWnd:oWndClient
Posted: Wed Jun 06, 2007 7:29 am
by Marco Turco
Salve,
ho qualche problema a visualizzare una bitmap su una finestra MDI.
Sbaglio forse qualcosa nell'utilizzare la funzione drawbitmap ?
Grazie
Marco
----
#include "FiveWin.ch"
#define SRCPAINT 15597702 // 0xEE0086
#define SRCAND 8913094
static oWnd
//----------------------------------------------------------------------------//
function Main()
DEFINE WINDOW oWnd TITLE "Testing bitmaps";
MDI
@ 2, 2 BUTTON "&Display bitmap" SIZE 120, 25 ACTION SHOWBMP(OWND) OF OWND:OWNDCLIENT
ACTIVATE WINDOW oWnd
return nil
//----------------------------------------------------------------------------//
function ShowBmp( oDlg )
local oBmp1
DEFINE BITMAP oBmp1 FILENAME "..\bitmaps\Cartoon.bmp"
DrawBitmap( oWnd:oWndClient, oBmp1:hBitmap, 0, 0, 0, 0, SRCPAINT )
oBmp1:End()
return nil
Posted: Wed Jun 06, 2007 8:37 am
by pymsoft
A me funziona in questo modo:
Code: Select all
STATIC oBitmap, MainWnd
********
FUNCTION Main()
********
DEFINE WINDOW MainWnd FROM 0,0 to 28,80 ;
TITLE "";
ICON oIcon;
COLOR CLR_WHITE, oV:nRGBSfondo;
MENU oMenu;
MENUINFO 5;
MDI // Finestra MDI
@MainWnd:nBottom,MainWnd:nRight BITMAP oBitMap NAME "LOGO2_WP50" OF MainWnd:oWndClient PIXEL
ACTIVATE WINDOW MainWnd MAXIMIZED ;
ON RESIZE ( Muevo(), oBitMap:refresh() )
RETURN NIL
*
** eof Main
***************
STATIC FUNCTION Muevo()
***************
local aRect := MainWnd:GetCliRect()
local oRect := TRect():New( aRect:nTop, aRect:nLeft, aRect:nBottom,;
aRect:nRight )
oRect:nTop := Max( 0, Int( ( aRect:nBottom - oBitMap:nHeight * 2 - 10 ) ) )
oRect:nBottom := oRect:nTop + oBitMap:nHeight - 1
oRect:nLeft := Max( 0, Int( ( aRect:nRight - oBitMap:nWidth - 10 ) ) )
oRect:nRight := oRect:nLeft + oBitmap:nWidth - 1
oBitMap:SetCoors( oRect )
return nil
*
** eof Muevo()
ciao
Posted: Wed Jun 06, 2007 9:03 am
by Marco Turco
Si, anche a me funziona così però vorrei visualizzare la bitmap senza creare un oggetto.
Marco
Re: Visualizzare una bitmat su oWnd:oWndClient
Posted: Wed Jun 06, 2007 10:29 am
by Enrico Maria Giordano
Code: Select all
function ShowBmp( oDlg )
local oBmp1
DEFINE BITMAP oBmp1 FILENAME "\fwharbour\bitmaps\Cartoon.bmp"
DrawBitmap( oWnd:oWndClient:GetDC(), oBmp1:hBitmap, 0, 0, 0, 0, SRCPAINT )
oWnd:oWndClient:ReleaseDC()
oBmp1:End()
return nil
EMG
Posted: Fri Jun 08, 2007 6:37 am
by Marco Turco
Si, è quello che volevo. Grazie.
Un chiarimento però:
considerato che devo visualizzare diverse bitmap, inserisco oWnd:oWndClient:GetDC() in una variabile, lo utilizzo per tutte le bitmap richieste e quindi faccio un ReleaseDC alla fine. E' corretto o agendo così creo perdite di risorse ?
Esempio:
function ShowBmp( oDlg )
local oBmp1,oDc
oDc:=oWnd:oWndClient:GetDC()
DEFINE BITMAP oBmp1 RESOURCE "IMAGE1"
DrawBitmap( oDC, oBmp1:hBitmap, 0, 0, 0, 0, SRCPAINT )
oBmp1:End()
DEFINE BITMAP oBmp1 RESOURCE "IMAGE2"
DrawBitmap( oDC, oBmp1:hBitmap, 0, 0, 0, 0, SRCPAINT )
oBmp1:End()
DEFINE BITMAP oBmp1 RESOURCE "IMAGE3"
DrawBitmap( oDC, oBmp1:hBitmap, 0, 0, 0, 0, SRCPAINT )
oBmp1:End()
oWnd:oWndClient:ReleaseDC()
return nil
Posted: Fri Jun 08, 2007 7:09 am
by Enrico Maria Giordano
Corretto. Hai considerato però che con questa tecnica i bitmap spariscono se la finestra viene coperta e poi scoperta? Per evitare questo devi mettere il disegno nell'evento ON PAINT.
EMG
Posted: Fri Jun 08, 2007 7:43 am
by Marco Turco
Ok. Si naturalmente ad ogni evento ON PAINT faccio un refresh delle bitmap.
Avevo la necessità di questa soluzione perché in alcuni casi ho la necessità di lasciare lo sfondo senza bitmap. Gestendo le bitmap come oggetto verrebbero ridisegnate automaticamente.
Grazie
Marco