Visualizzare una bitmat su oWnd:oWndClient

Moderator: Enrico Maria Giordano

Visualizzare una bitmat su oWnd:oWndClient

Postby Marco Turco » Wed Jun 06, 2007 7:29 am

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
User avatar
Marco Turco
 
Posts: 858
Joined: Fri Oct 07, 2005 12:00 pm
Location: London

Postby pymsoft » Wed Jun 06, 2007 8:37 am

A me funziona in questo modo:


Code: Select all  Expand view

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
Pedro Gonzalez
User avatar
pymsoft
 
Posts: 383
Joined: Tue Oct 11, 2005 1:01 pm
Location: Savona - Italia

Postby Marco Turco » Wed Jun 06, 2007 9:03 am

Si, anche a me funziona così però vorrei visualizzare la bitmap senza creare un oggetto.

Marco
User avatar
Marco Turco
 
Posts: 858
Joined: Fri Oct 07, 2005 12:00 pm
Location: London

Re: Visualizzare una bitmat su oWnd:oWndClient

Postby Enrico Maria Giordano » Wed Jun 06, 2007 10:29 am

Code: Select all  Expand view
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
User avatar
Enrico Maria Giordano
 
Posts: 8367
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Postby Marco Turco » Fri Jun 08, 2007 6:37 am

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
User avatar
Marco Turco
 
Posts: 858
Joined: Fri Oct 07, 2005 12:00 pm
Location: London

Postby Enrico Maria Giordano » Fri Jun 08, 2007 7:09 am

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
User avatar
Enrico Maria Giordano
 
Posts: 8367
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Postby Marco Turco » Fri Jun 08, 2007 7:43 am

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
User avatar
Marco Turco
 
Posts: 858
Joined: Fri Oct 07, 2005 12:00 pm
Location: London


Return to All products support

Who is online

Users browsing this forum: No registered users and 13 guests