* src/rtl/run.c
* src/rtl/hbrunfun.c
* experimental: use hb_processRun() on all win targets
(was wince targets) instead of system() from C RTL.
QUESTION: do the same for all platforms?
* contrib/hbwin/win_prn1.c
* contrib/hbwin/hbwin.ch
* contrib/hbwin/hbwin.hbx
+ WIN_ENUMFONTS() modified to work also when no HDC is passed.
+ WIN_ENUMFONTFAMILIES( [ <nCharset> ][, <cName> ] ) -> <aFonts>
* contrib/gtwvg/wvgcuig.c
* contrib/gtwvg/wvgcore.c
! fixed possible GPF in some functions if font name was not passed
3173 lines
96 KiB
C
3173 lines
96 KiB
C
/*
|
|
* $Id$
|
|
*/
|
|
|
|
/*
|
|
* Harbour Project source code:
|
|
*
|
|
* Copyright 2007 Pritpal Bedi <pritpal@vouchcac.com>
|
|
* Based on:
|
|
*
|
|
* Video subsystem for Windows using GUI windows instead of Console
|
|
* Copyright 2003 Peter Rees <peter@rees.co.nz>
|
|
* Rees Software & Systems Ltd
|
|
* based on
|
|
* Bcc ConIO Video subsystem by
|
|
* Copyright 2002 Marek Paliwoda <paliwoda@inteia.pl>
|
|
* Copyright 2002 Przemyslaw Czerpak <druzus@polbox.com>
|
|
* Video subsystem for Windows compilers
|
|
* Copyright 1999-2000 Paul Tucker <ptucker@sympatico.ca>
|
|
* Copyright 2002 Przemyslaw Czerpak <druzus@polbox.com>
|
|
*
|
|
* See COPYING for licensing terms.
|
|
*
|
|
* www - http://harbour-project.org
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2, or (at your option )
|
|
* any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this software; see the file COPYING. If not, write to
|
|
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
|
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/ ).
|
|
*
|
|
* As a special exception, the Harbour Project gives permission for
|
|
* additional uses of the text contained in its release of Harbour.
|
|
*
|
|
* The exception is that, if you link the Harbour libraries with other
|
|
* files to produce an executable, this does not by itself cause the
|
|
* resulting executable to be covered by the GNU General Public License.
|
|
* Your use of that executable is in no way restricted on account of
|
|
* linking the Harbour library code into it.
|
|
*
|
|
* This exception does not however invalidate any other reasons why
|
|
* the executable file might be covered by the GNU General Public License.
|
|
*
|
|
* This exception applies only to the code released by the Harbour
|
|
* Project under the name Harbour. If you copy code from other
|
|
* Harbour Project or Free Software Foundation releases into a copy of
|
|
* Harbour, as the General Public License permits, the exception does
|
|
* not apply to the code that you add in this way. To avoid misleading
|
|
* anyone as to the status of such modified files, you must delete
|
|
* this exception notice from them.
|
|
*
|
|
* If you write modifications of your own for Harbour, it is your choice
|
|
* whether to permit this exception to apply to your modifications.
|
|
* If you do not wish that, delete this exception notice.
|
|
*
|
|
*/
|
|
/*----------------------------------------------------------------------*/
|
|
/*----------------------------------------------------------------------*/
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* GUI Drawing Functions
|
|
* Pritpal Bedi <pritpal@vouchcac.com>
|
|
*/
|
|
/*----------------------------------------------------------------------*/
|
|
/*----------------------------------------------------------------------*/
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
#include "hbwinole.h"
|
|
#include "gtwvg.h"
|
|
|
|
#define __SETGUI__
|
|
|
|
static void hb_wvt_DrawBoxRaised( HDC hdc, int iTop, int iLeft, int iBottom, int iRight );
|
|
static void hb_wvt_DrawBoxRecessed( HDC hdc, int iTop, int iLeft, int iBottom, int iRight );
|
|
static void hb_wvt_DrawOutline( HDC hdc, int iTop, int iLeft, int iBottom, int iRight );
|
|
static void hb_wvt_DrawBoxGet( HDC hdc, int iTop, int iLeft, int iBottom, int iRight );
|
|
static void hb_wvt_DrawBoxGroup( HDC hdc, int iTop, int iLeft, int iBottom, int iRight );
|
|
static void hb_wvt_DrawBoxGroupRaised( HDC hdc, int iTop, int iLeft, int iBottom, int iRight );
|
|
static void hb_wvt_DrawToolButtonFlat( HDC hdc, int iTop, int iLeft, int iBottom, int iRight );
|
|
static void hb_wvt_DrawToolButtonUp( HDC hdc, int iTop, int iLeft, int iBottom, int iRight );
|
|
static void hb_wvt_DrawToolButtonDown( HDC hdc, int iTop, int iLeft, int iBottom, int iRight );
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
HB_FUNC( WVT_CORE )
|
|
{
|
|
/* Retained for legacy code. */
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
void hb_wvt_GetStringAttrib( int top, int left, int bottom, int right, HB_BYTE * sBuffer, HB_BYTE * sAttrib )
|
|
{
|
|
int irow, icol, j;
|
|
|
|
HB_TRACE( HB_TR_DEBUG, ( "hb_wvt_GetStringAttrib( %d, %d, %d, %d, %p, %p )", top, left, bottom, right, sBuffer, sAttrib ) );
|
|
|
|
for( j = 0, irow = top; irow <= bottom; irow++ )
|
|
{
|
|
for( icol = left; icol <= right; icol++ )
|
|
{
|
|
int iColor;
|
|
HB_BYTE bAttr;
|
|
HB_USHORT usChar;
|
|
|
|
if( hb_gtGetScrChar( irow, icol, &iColor, &bAttr, &usChar ) == HB_FAILURE )
|
|
break;
|
|
|
|
sBuffer[ j ] = ( HB_BYTE ) usChar;
|
|
sAttrib[ j ] = ( HB_BYTE ) iColor;
|
|
j++;
|
|
}
|
|
}
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
void hb_wvt_PutStringAttrib( int top, int left, int bottom, int right, HB_BYTE * sBuffer, HB_BYTE * sAttrib )
|
|
{
|
|
int irow, icol, j;
|
|
|
|
HB_TRACE( HB_TR_DEBUG, ( "hb_wvt_PutStringAttrib( %d, %d, %d, %d, %p, %p )", top, left, bottom, right, sBuffer, sAttrib ) );
|
|
|
|
hb_gtBeginWrite();
|
|
for( j = 0, irow = top; irow <= bottom; irow++ )
|
|
{
|
|
for( icol = left; icol <= right; icol++ )
|
|
{
|
|
if( hb_gtPutScrChar( irow, icol, sAttrib[ j ], 0, sBuffer[ j ] ) == HB_FAILURE )
|
|
break;
|
|
j++;
|
|
}
|
|
}
|
|
hb_gtEndWrite();
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Courtesy - Augusto Infante - Thanks
|
|
*/
|
|
#if ! defined( HB_OS_WIN_CE )
|
|
IPicture * hb_wvt_gtLoadPictureFromResource( LPCTSTR resource, LPCTSTR section )
|
|
{
|
|
HRSRC res = 0;
|
|
LPVOID iPicture = NULL;
|
|
HANDLE hInstance;
|
|
|
|
if( hb_winmainArgGet( &hInstance, NULL, NULL ) )
|
|
res = FindResource( ( HINSTANCE ) hInstance, resource, section );
|
|
|
|
if( res )
|
|
{
|
|
IStream * iStream = NULL;
|
|
HGLOBAL mem = LoadResource( GetModuleHandle( NULL ), res );
|
|
void * data = LockResource( mem );
|
|
LONG nFileSize = ( LONG ) SizeofResource( GetModuleHandle( NULL ), res );
|
|
HGLOBAL hGlobal = GlobalAlloc( GMEM_MOVEABLE, nFileSize );
|
|
LPVOID pvData = GlobalLock( hGlobal );
|
|
|
|
memcpy( pvData, data, nFileSize );
|
|
|
|
GlobalUnlock( hGlobal );
|
|
|
|
CreateStreamOnHGlobal( hGlobal, TRUE, &iStream );
|
|
|
|
OleLoadPicture( iStream, nFileSize, TRUE, HB_ID_REF( IID_IPicture ), &iPicture );
|
|
|
|
FreeResource( mem );
|
|
}
|
|
|
|
return ( IPicture * ) iPicture;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------*/
|
|
|
|
IPicture * hb_wvt_gtLoadPicture( LPCTSTR image )
|
|
{
|
|
IStream * iStream;
|
|
LPVOID iPicture = NULL;
|
|
HGLOBAL hGlobal;
|
|
HANDLE hFile;
|
|
DWORD nFileSize;
|
|
DWORD nReadByte;
|
|
|
|
hFile = CreateFile( image, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
|
|
if( hFile != INVALID_HANDLE_VALUE )
|
|
{
|
|
nFileSize = GetFileSize( hFile, NULL );
|
|
|
|
if( nFileSize != INVALID_FILE_SIZE )
|
|
{
|
|
hGlobal = GlobalAlloc( GPTR, nFileSize );
|
|
|
|
if( hGlobal )
|
|
{
|
|
if( ReadFile( hFile, hGlobal, nFileSize, &nReadByte, NULL ) )
|
|
{
|
|
CreateStreamOnHGlobal( hGlobal, TRUE, &iStream );
|
|
OleLoadPicture( iStream, nFileSize, TRUE, HB_ID_REF( IID_IPicture ), &iPicture );
|
|
}
|
|
GlobalFree( hGlobal );
|
|
}
|
|
}
|
|
CloseHandle( hFile );
|
|
}
|
|
|
|
return ( IPicture * ) iPicture;
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
HB_BOOL hb_wvt_gtRenderPicture( int x1, int y1, int wd, int ht, IPicture * iPicture )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
LONG lWidth, lHeight;
|
|
int x, y, xe, ye;
|
|
int c = x1;
|
|
int r = y1;
|
|
int dc = wd;
|
|
int dr = ht;
|
|
int tor = 0;
|
|
int toc = 0;
|
|
HRGN hrgn1;
|
|
POINT lpp;
|
|
HB_BOOL bResult = HB_FALSE;
|
|
|
|
if( iPicture )
|
|
{
|
|
HB_VTBL( iPicture )->get_Width( HB_THIS_( iPicture ) & lWidth );
|
|
HB_VTBL( iPicture )->get_Height( HB_THIS_( iPicture ) & lHeight );
|
|
|
|
if( dc == 0 )
|
|
{
|
|
dc = ( int ) ( ( float ) dr * lWidth / lHeight );
|
|
}
|
|
if( dr == 0 )
|
|
{
|
|
dr = ( int ) ( ( float ) dc * lHeight / lWidth );
|
|
}
|
|
if( tor == 0 )
|
|
{
|
|
tor = dr;
|
|
}
|
|
if( toc == 0 )
|
|
{
|
|
toc = dc;
|
|
}
|
|
x = c;
|
|
y = r;
|
|
xe = c + toc - 1;
|
|
ye = r + tor - 1;
|
|
|
|
GetViewportOrgEx( _s->hdc, &lpp );
|
|
|
|
hrgn1 = CreateRectRgn( c + lpp.x, r + lpp.y, xe + lpp.x, ye + lpp.y );
|
|
SelectClipRgn( _s->hdc, hrgn1 );
|
|
|
|
while( x < xe )
|
|
{
|
|
while( y < ye )
|
|
{
|
|
HB_VTBL( iPicture )->Render( HB_THIS_( iPicture ) _s->hdc, x, y, dc, dr, 0, lHeight, lWidth, -lHeight, NULL );
|
|
y += dr;
|
|
}
|
|
y = r;
|
|
x += dc;
|
|
}
|
|
|
|
SelectClipRgn( _s->hdc, NULL );
|
|
DeleteObject( hrgn1 );
|
|
|
|
if( _s->bGui )
|
|
{
|
|
x = c;
|
|
y = r;
|
|
xe = c + toc - 1;
|
|
ye = r + tor - 1;
|
|
|
|
GetViewportOrgEx( _s->hGuiDC, &lpp );
|
|
|
|
hrgn1 = CreateRectRgn( c + lpp.x, r + lpp.y, xe + lpp.x, ye + lpp.y );
|
|
SelectClipRgn( _s->hGuiDC, hrgn1 );
|
|
|
|
while( x < xe )
|
|
{
|
|
while( y < ye )
|
|
{
|
|
HB_VTBL( iPicture )->Render( HB_THIS_( iPicture ) _s->hGuiDC, x, y, dc, dr, 0, lHeight, lWidth, -lHeight, NULL );
|
|
y += dr;
|
|
}
|
|
y = r;
|
|
x += dc;
|
|
}
|
|
|
|
SelectClipRgn( _s->hGuiDC, NULL );
|
|
DeleteObject( hrgn1 );
|
|
}
|
|
|
|
bResult = HB_TRUE;
|
|
}
|
|
|
|
return bResult;
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
HB_BOOL hb_wvt_gtDestroyPicture( IPicture * iPicture )
|
|
{
|
|
HB_BOOL bResult = HB_FALSE;
|
|
|
|
if( iPicture )
|
|
{
|
|
HB_VTBL( iPicture )->Release( HB_THIS( iPicture ) );
|
|
bResult = HB_TRUE;
|
|
}
|
|
|
|
return bResult;
|
|
}
|
|
#endif /* #if ! defined( HB_OS_WIN_CE ) */
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
POINT hb_wvt_gtGetXYFromColRow( int col, int row )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
POINT xy;
|
|
|
|
xy.x = col * _s->PTEXTSIZE.x;
|
|
xy.y = row * _s->PTEXTSIZE.y;
|
|
|
|
return xy;
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Modeless Dialogs Implementation
|
|
*/
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
BOOL CALLBACK hb_wvt_gtDlgProcMLess( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iIndex, iType;
|
|
long int lReturn = 0;
|
|
PHB_ITEM pFunc = NULL;
|
|
|
|
iType = 0;
|
|
|
|
for( iIndex = 0; iIndex < WVT_DLGML_MAX; iIndex++ )
|
|
{
|
|
if( ( _s->hDlgModeless[ iIndex ] != NULL ) && ( _s->hDlgModeless[ iIndex ] == hDlg ) )
|
|
{
|
|
if( _s->pFunc[ iIndex ] != NULL )
|
|
{
|
|
pFunc = _s->pFunc[ iIndex ];
|
|
iType = _s->iType[ iIndex ];
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
if( pFunc )
|
|
{
|
|
switch( iType )
|
|
{
|
|
case 1: /* Function Name */
|
|
if( hb_vmRequestReenter() )
|
|
{
|
|
hb_vmPushDynSym( ( PHB_DYNS ) pFunc );
|
|
hb_vmPushNil();
|
|
hb_vmPushNumInt( ( HB_MAXINT ) ( HB_PTRDIFF ) hDlg );
|
|
hb_vmPushNumInt( message );
|
|
hb_vmPushNumInt( wParam );
|
|
hb_vmPushNumInt( lParam );
|
|
hb_vmDo( 4 );
|
|
lReturn = hb_parnl( -1 );
|
|
hb_vmRequestRestore();
|
|
}
|
|
break;
|
|
|
|
case 2: /* Block */
|
|
/* eval the codeblock */
|
|
if( HB_IS_BLOCK( pFunc ) )
|
|
{
|
|
if( hb_vmRequestReenter() )
|
|
{
|
|
hb_vmPushEvalSym();
|
|
hb_vmPush( _s->pFunc[ iIndex ] );
|
|
hb_vmPushNumInt( ( HB_MAXINT ) ( HB_PTRDIFF ) hDlg );
|
|
hb_vmPushNumInt( message );
|
|
hb_vmPushNumInt( wParam );
|
|
hb_vmPushNumInt( lParam );
|
|
hb_vmSend( 4 );
|
|
lReturn = hb_parnl( -1 );
|
|
hb_vmRequestRestore();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
/* TODO: internal error: missing codeblock */
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
switch( message )
|
|
{
|
|
case WM_COMMAND:
|
|
switch( LOWORD( wParam ) )
|
|
{
|
|
case IDOK:
|
|
DestroyWindow( hDlg );
|
|
lReturn = 1;
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
DestroyWindow( hDlg );
|
|
lReturn = 0;
|
|
break;
|
|
}
|
|
break;
|
|
|
|
#if ! defined( HB_OS_WIN_CE )
|
|
case WM_NCDESTROY:
|
|
#else
|
|
case WM_DESTROY:
|
|
#endif
|
|
if( _s->pFunc[ iIndex ] != NULL && _s->iType[ iIndex ] == 2 )
|
|
{
|
|
hb_itemRelease( ( PHB_ITEM ) _s->pFunc[ iIndex ] );
|
|
}
|
|
_s->hDlgModeless[ iIndex ] = NULL;
|
|
_s->pFunc[ iIndex ] = NULL;
|
|
_s->iType[ iIndex ] = 0;
|
|
lReturn = 0;
|
|
break;
|
|
}
|
|
|
|
return lReturn;
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
BOOL CALLBACK hb_wvt_gtDlgProcModal( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iIndex, iType;
|
|
long int lReturn = 0;
|
|
PHB_ITEM pFunc = NULL;
|
|
int iFirst = ( int ) lParam;
|
|
|
|
if( iFirst > 0 && iFirst <= WVT_DLGMD_MAX )
|
|
{
|
|
_s->hDlgModal[ iFirst - 1 ] = hDlg;
|
|
SendMessage( hDlg, WM_INITDIALOG, 0, 0 );
|
|
return lReturn;
|
|
}
|
|
|
|
iType = 0;
|
|
|
|
for( iIndex = 0; iIndex < WVT_DLGMD_MAX; iIndex++ )
|
|
{
|
|
if( ( _s->hDlgModal[ iIndex ] != NULL ) && ( _s->hDlgModal[ iIndex ] == hDlg ) )
|
|
{
|
|
if( _s->pFuncModal[ iIndex ] != NULL )
|
|
{
|
|
pFunc = _s->pFuncModal[ iIndex ];
|
|
iType = _s->iTypeModal[ iIndex ];
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
if( pFunc )
|
|
{
|
|
switch( iType )
|
|
{
|
|
case 1: /* Function Name */
|
|
if( hb_vmRequestReenter() )
|
|
{
|
|
hb_vmPushDynSym( ( PHB_DYNS ) pFunc );
|
|
hb_vmPushNil();
|
|
hb_vmPushNumInt( ( HB_MAXINT ) ( HB_PTRDIFF ) hDlg );
|
|
hb_vmPushNumInt( message );
|
|
hb_vmPushNumInt( wParam );
|
|
hb_vmPushNumInt( lParam );
|
|
hb_vmDo( 4 );
|
|
lReturn = hb_parnl( -1 );
|
|
hb_vmRequestRestore();
|
|
}
|
|
break;
|
|
|
|
case 2: /* Block */
|
|
/* eval the codeblock */
|
|
if( HB_IS_BLOCK( pFunc ) )
|
|
{
|
|
if( hb_vmRequestReenter() )
|
|
{
|
|
hb_vmPushEvalSym();
|
|
hb_vmPush( pFunc );
|
|
hb_vmPushNumInt( ( HB_MAXINT ) ( HB_PTRDIFF ) hDlg );
|
|
hb_vmPushNumInt( message );
|
|
hb_vmPushNumInt( wParam );
|
|
hb_vmPushNumInt( lParam );
|
|
hb_vmSend( 4 );
|
|
lReturn = hb_parnl( -1 );
|
|
hb_vmRequestRestore();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
/* TODO: internal error: missing codeblock */
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
switch( message )
|
|
{
|
|
case WM_COMMAND:
|
|
switch( LOWORD( wParam ) )
|
|
{
|
|
case IDOK:
|
|
EndDialog( hDlg, IDOK );
|
|
lReturn = 0;
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
EndDialog( hDlg, IDCANCEL );
|
|
lReturn = 0;
|
|
break;
|
|
}
|
|
break;
|
|
|
|
#if ! defined( HB_OS_WIN_CE )
|
|
case WM_NCDESTROY:
|
|
#else
|
|
case WM_DESTROY:
|
|
#endif
|
|
if( _s->pFuncModal[ iIndex ] != NULL && _s->iTypeModal[ iIndex ] == 2 )
|
|
{
|
|
hb_itemRelease( ( PHB_ITEM ) _s->pFuncModal[ iIndex ] );
|
|
}
|
|
_s->hDlgModal[ iIndex ] = NULL;
|
|
_s->pFuncModal[ iIndex ] = NULL;
|
|
_s->iTypeModal[ iIndex ] = 0;
|
|
lReturn = 0;
|
|
break;
|
|
}
|
|
|
|
return lReturn;
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
HB_BOOL hb_wvt_DrawImage( HDC hdc, int x1, int y1, int wd, int ht, LPCTSTR lpImage )
|
|
{
|
|
#if ! defined( HB_OS_WIN_CE )
|
|
HGLOBAL hGlobal;
|
|
HANDLE hFile;
|
|
DWORD nFileSize;
|
|
DWORD nReadByte;
|
|
LONG lWidth, lHeight;
|
|
int x, y, xe, ye;
|
|
int c = x1;
|
|
int r = y1;
|
|
int dc = wd;
|
|
int dr = ht;
|
|
int tor = 0;
|
|
int toc = 0;
|
|
HRGN hrgn1;
|
|
POINT lpp = { 0, 0 };
|
|
HB_BOOL bResult = HB_FALSE;
|
|
|
|
hFile = CreateFile( lpImage, GENERIC_READ, 0, NULL, OPEN_EXISTING,
|
|
FILE_ATTRIBUTE_NORMAL, NULL );
|
|
|
|
if( hFile != INVALID_HANDLE_VALUE )
|
|
{
|
|
nFileSize = GetFileSize( hFile, NULL );
|
|
|
|
if( nFileSize != INVALID_FILE_SIZE )
|
|
{
|
|
hGlobal = GlobalAlloc( GPTR, nFileSize );
|
|
|
|
if( hGlobal )
|
|
{
|
|
if( ReadFile( hFile, hGlobal, nFileSize, &nReadByte, NULL ) )
|
|
{
|
|
IStream * iStream;
|
|
IPicture * iPicture;
|
|
IPicture ** iPictureRef = &iPicture;
|
|
|
|
CreateStreamOnHGlobal( hGlobal, TRUE, &iStream );
|
|
OleLoadPicture( iStream, nFileSize, TRUE, HB_ID_REF( IID_IPicture ), ( LPVOID * ) iPictureRef );
|
|
|
|
if( iPicture )
|
|
{
|
|
HB_VTBL( iPicture )->get_Width( HB_THIS_( iPicture ) & lWidth );
|
|
HB_VTBL( iPicture )->get_Height( HB_THIS_( iPicture ) & lHeight );
|
|
|
|
if( dc == 0 )
|
|
{
|
|
dc = ( int ) ( ( float ) dr * lWidth / lHeight );
|
|
}
|
|
if( dr == 0 )
|
|
{
|
|
dr = ( int ) ( ( float ) dc * lHeight / lWidth );
|
|
}
|
|
if( tor == 0 )
|
|
{
|
|
tor = dr;
|
|
}
|
|
if( toc == 0 )
|
|
{
|
|
toc = dc;
|
|
}
|
|
x = c;
|
|
y = r;
|
|
xe = c + toc - 1;
|
|
ye = r + tor - 1;
|
|
|
|
GetViewportOrgEx( hdc, &lpp );
|
|
|
|
hrgn1 = CreateRectRgn( c + lpp.x, r + lpp.y, xe + lpp.x, ye + lpp.y );
|
|
SelectClipRgn( hdc, hrgn1 );
|
|
|
|
while( x < xe )
|
|
{
|
|
while( y < ye )
|
|
{
|
|
HB_VTBL( iPicture )->Render( HB_THIS_( iPicture ) hdc, x, y, dc, dr, 0,
|
|
lHeight, lWidth, -lHeight, NULL );
|
|
y += dr;
|
|
}
|
|
y = r;
|
|
x += dc;
|
|
}
|
|
|
|
SelectClipRgn( hdc, NULL );
|
|
DeleteObject( hrgn1 );
|
|
|
|
HB_VTBL( iPicture )->Release( HB_THIS( iPicture ) );
|
|
bResult = HB_TRUE;
|
|
}
|
|
}
|
|
GlobalFree( hGlobal );
|
|
}
|
|
}
|
|
CloseHandle( hFile );
|
|
}
|
|
return bResult;
|
|
#else
|
|
HB_SYMBOL_UNUSED( hdc );
|
|
HB_SYMBOL_UNUSED( x1 );
|
|
HB_SYMBOL_UNUSED( y1 );
|
|
HB_SYMBOL_UNUSED( wd );
|
|
HB_SYMBOL_UNUSED( ht );
|
|
HB_SYMBOL_UNUSED( image );
|
|
return HB_FALSE;
|
|
#endif
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
static void hb_wvt_DrawBoxRaised( HDC hdc, int iTop, int iLeft, int iBottom, int iRight )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
SelectObject( hdc, _s->pGUI->penWhiteDim );
|
|
MoveToEx( hdc, iLeft, iTop, NULL ); /* Top Inner */
|
|
LineTo( hdc, iRight, iTop );
|
|
MoveToEx( hdc, iLeft, iTop, NULL ); /* Left Inner */
|
|
LineTo( hdc, iLeft, iBottom );
|
|
|
|
SelectObject( hdc, _s->pGUI->penWhite );
|
|
MoveToEx( hdc, iLeft - 1, iTop - 1, NULL ); /* Top Outer */
|
|
LineTo( hdc, iRight + 1, iTop - 1 );
|
|
MoveToEx( hdc, iLeft - 1, iTop - 1, NULL ); /* Left Outer */
|
|
LineTo( hdc, iLeft - 1, iBottom + 1 );
|
|
|
|
SelectObject( hdc, _s->pGUI->penDarkGray );
|
|
MoveToEx( hdc, iLeft, iBottom, NULL ); /* Bottom Inner */
|
|
LineTo( hdc, iRight, iBottom );
|
|
MoveToEx( hdc, iRight, iBottom, NULL ); /* Right Inner */
|
|
LineTo( hdc, iRight, iTop );
|
|
|
|
SelectObject( hdc, _s->pGUI->penBlack );
|
|
MoveToEx( hdc, iLeft - 1, iBottom + 1, NULL ); /* Bottom Outer */
|
|
LineTo( hdc, iRight + 1 + 1, iBottom + 1 );
|
|
MoveToEx( hdc, iRight + 1, iTop - 1, NULL ); /* Right Outer */
|
|
LineTo( hdc, iRight + 1, iBottom + 1 );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
static void hb_wvt_DrawBoxRecessed( HDC hdc, int iTop, int iLeft, int iBottom, int iRight )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
SelectObject( hdc, _s->pGUI->penWhiteDim );
|
|
MoveToEx( hdc, iRight, iTop, NULL ); /* Right Inner */
|
|
LineTo( hdc, iRight, iBottom );
|
|
MoveToEx( hdc, iLeft, iBottom, NULL ); /* Bottom Inner */
|
|
LineTo( hdc, iRight, iBottom );
|
|
|
|
SelectObject( hdc, _s->pGUI->penWhite );
|
|
MoveToEx( hdc, iRight + 1, iTop - 1, NULL ); /* Right Outer */
|
|
LineTo( hdc, iRight + 1, iBottom + 1 );
|
|
MoveToEx( hdc, iLeft - 1, iBottom + 1, NULL ); /* Bottom Outer */
|
|
LineTo( hdc, iRight + 2, iBottom + 1 );
|
|
|
|
SelectObject( hdc, _s->pGUI->penBlack );
|
|
MoveToEx( hdc, iLeft, iTop, NULL ); /* Left Inner */
|
|
LineTo( hdc, iLeft, iBottom );
|
|
MoveToEx( hdc, iLeft, iTop, NULL ); /* Top Inner */
|
|
LineTo( hdc, iRight, iTop );
|
|
|
|
SelectObject( hdc, _s->pGUI->penDarkGray );
|
|
MoveToEx( hdc, iLeft - 1, iTop - 1, NULL ); /* Left Outer */
|
|
LineTo( hdc, iLeft - 1, iBottom + 1 );
|
|
MoveToEx( hdc, iLeft - 1, iTop - 1, NULL ); /* Top Outer */
|
|
LineTo( hdc, iRight + 1, iTop - 1 );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
static void hb_wvt_DrawOutline( HDC hdc, int iTop, int iLeft, int iBottom, int iRight )
|
|
{
|
|
MoveToEx( hdc, iLeft, iTop, NULL ); /* Top */
|
|
LineTo( hdc, iRight, iTop );
|
|
|
|
MoveToEx( hdc, iLeft, iTop, NULL ); /* Left */
|
|
LineTo( hdc, iLeft, iBottom );
|
|
|
|
MoveToEx( hdc, iLeft, iBottom, NULL ); /* Bottom */
|
|
LineTo( hdc, iRight, iBottom );
|
|
|
|
MoveToEx( hdc, iRight, iTop, NULL ); /* Right */
|
|
LineTo( hdc, iRight, iBottom + 1 );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
static void hb_wvt_DrawBoxGet( HDC hdc, int iTop, int iLeft, int iBottom, int iRight )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
SelectObject( hdc, _s->pGUI->penBlack );
|
|
MoveToEx( hdc, iLeft - 1, iTop - 1, NULL ); /* Top Inner */
|
|
LineTo( hdc, iRight - 1, iTop - 1 );
|
|
MoveToEx( hdc, iLeft - 1, iTop - 1, NULL ); /* Left Inner */
|
|
LineTo( hdc, iLeft - 1, iBottom - 1 );
|
|
|
|
SelectObject( hdc, _s->pGUI->penDarkGray );
|
|
MoveToEx( hdc, iLeft - 2, iTop - 2, NULL ); /* Top Outer */
|
|
LineTo( hdc, iRight, iTop - 2 );
|
|
MoveToEx( hdc, iLeft - 2, iTop - 2, NULL ); /* Left Outer */
|
|
LineTo( hdc, iLeft - 2, iBottom );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
static void hb_wvt_DrawBoxGroup( HDC hdc, int iTop, int iLeft, int iBottom, int iRight )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
SelectObject( hdc, _s->pGUI->penDarkGray );
|
|
|
|
MoveToEx( hdc, iRight, iTop, NULL ); /* Right Inner */
|
|
LineTo( hdc, iRight, iBottom );
|
|
|
|
MoveToEx( hdc, iLeft, iBottom, NULL ); /* Bottom Inner */
|
|
LineTo( hdc, iRight, iBottom );
|
|
|
|
MoveToEx( hdc, iLeft - 1, iTop - 1, NULL ); /* Left Outer */
|
|
LineTo( hdc, iLeft - 1, iBottom + 1 );
|
|
|
|
MoveToEx( hdc, iLeft - 1, iTop - 1, NULL ); /* Top Outer */
|
|
LineTo( hdc, iRight + 1, iTop - 1 );
|
|
|
|
|
|
SelectObject( hdc, _s->pGUI->penWhite );
|
|
|
|
MoveToEx( hdc, iRight + 1, iTop, NULL ); /* Right Outer */
|
|
LineTo( hdc, iRight + 1, iBottom + 1 );
|
|
|
|
MoveToEx( hdc, iLeft - 1, iBottom + 1, NULL ); /* Bottom Outer */
|
|
LineTo( hdc, iRight + 1 + 1, iBottom + 1 );
|
|
|
|
MoveToEx( hdc, iLeft, iTop, NULL ); /* Left Inner */
|
|
LineTo( hdc, iLeft, iBottom );
|
|
|
|
MoveToEx( hdc, iLeft, iTop, NULL ); /* Top Inner */
|
|
LineTo( hdc, iRight, iTop );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
static void hb_wvt_DrawBoxGroupRaised( HDC hdc, int iTop, int iLeft, int iBottom, int iRight )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
SelectObject( hdc, _s->pGUI->penWhite );
|
|
|
|
MoveToEx( hdc, iRight, iTop, NULL ); /* Right Inner */
|
|
LineTo( hdc, iRight, iBottom );
|
|
|
|
MoveToEx( hdc, iLeft, iBottom, NULL ); /* Bottom Inner */
|
|
LineTo( hdc, iRight, iBottom );
|
|
|
|
MoveToEx( hdc, iLeft - 1, iTop - 1, NULL ); /* Left Outer */
|
|
LineTo( hdc, iLeft - 1, iBottom + 1 );
|
|
|
|
MoveToEx( hdc, iLeft - 1, iTop - 1, NULL ); /* Top Outer */
|
|
LineTo( hdc, iRight + 1, iTop - 1 );
|
|
|
|
SelectObject( hdc, _s->pGUI->penDarkGray );
|
|
|
|
MoveToEx( hdc, iRight + 1, iTop, NULL ); /* Right Outer */
|
|
LineTo( hdc, iRight + 1, iBottom + 1 );
|
|
|
|
MoveToEx( hdc, iLeft - 1, iBottom + 1, NULL ); /* Bottom Outer */
|
|
LineTo( hdc, iRight + 1 + 1, iBottom + 1 );
|
|
|
|
MoveToEx( hdc, iLeft, iTop, NULL ); /* Left Inner */
|
|
LineTo( hdc, iLeft, iBottom );
|
|
|
|
MoveToEx( hdc, iLeft, iTop, NULL ); /* Top Inner */
|
|
LineTo( hdc, iRight, iTop );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
static void hb_wvt_DrawToolButtonFlat( HDC hdc, int iTop, int iLeft, int iBottom, int iRight )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
SelectObject( hdc, _s->pGUI->penGray );
|
|
|
|
MoveToEx( hdc, iRight, iTop, NULL ); /* Right */
|
|
LineTo( hdc, iRight, iBottom + 1 );
|
|
|
|
MoveToEx( hdc, iLeft, iBottom, NULL ); /* Bottom */
|
|
LineTo( hdc, iRight, iBottom );
|
|
|
|
MoveToEx( hdc, iLeft, iTop, NULL ); /* Left */
|
|
LineTo( hdc, iLeft, iBottom );
|
|
|
|
MoveToEx( hdc, iLeft, iTop, NULL ); /* Top */
|
|
LineTo( hdc, iRight, iTop );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
static void hb_wvt_DrawToolButtonUp( HDC hdc, int iTop, int iLeft, int iBottom, int iRight )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
SelectObject( hdc, _s->pGUI->penBlack );
|
|
|
|
MoveToEx( hdc, iRight, iTop, NULL ); /* Right */
|
|
LineTo( hdc, iRight, iBottom + 1 );
|
|
|
|
MoveToEx( hdc, iLeft, iBottom, NULL ); /* Bottom */
|
|
LineTo( hdc, iRight, iBottom );
|
|
|
|
SelectObject( hdc, _s->pGUI->penWhite );
|
|
|
|
MoveToEx( hdc, iLeft, iTop, NULL ); /* Left */
|
|
LineTo( hdc, iLeft, iBottom );
|
|
|
|
MoveToEx( hdc, iLeft, iTop, NULL ); /* Top */
|
|
LineTo( hdc, iRight, iTop );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
static void hb_wvt_DrawToolButtonDown( HDC hdc, int iTop, int iLeft, int iBottom, int iRight )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
SelectObject( hdc, _s->pGUI->penWhite );
|
|
|
|
MoveToEx( hdc, iRight, iTop, NULL ); /* Right */
|
|
LineTo( hdc, iRight, iBottom + 1 );
|
|
|
|
MoveToEx( hdc, iLeft, iBottom, NULL ); /* Bottom */
|
|
LineTo( hdc, iRight, iBottom );
|
|
|
|
SelectObject( hdc, _s->pGUI->penBlack );
|
|
|
|
MoveToEx( hdc, iLeft, iTop, NULL ); /* Left */
|
|
LineTo( hdc, iLeft, iBottom );
|
|
|
|
MoveToEx( hdc, iLeft, iTop, NULL ); /* Top */
|
|
LineTo( hdc, iRight, iTop );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
static COLORREF hb_wvt_BgColorParam( int iParam )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
COLORREF color;
|
|
|
|
if( HB_ISNUM( iParam ) )
|
|
color = ( COLORREF ) hb_parnl( iParam );
|
|
else
|
|
{
|
|
int iColor = HB_ISCHAR( iParam ) ? hb_gtColorToN( hb_parc( iParam ) ) : -1;
|
|
if( iColor == -1 )
|
|
iColor = hb_gtGetCurrColor();
|
|
color = _s->COLORS[ ( ( iColor >> 4 ) & 0x0f ) ];
|
|
}
|
|
|
|
return color;
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
static COLORREF hb_wvt_FgColorParam( int iParam )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
COLORREF color;
|
|
|
|
if( HB_ISNUM( iParam ) )
|
|
color = ( COLORREF ) hb_parnl( iParam );
|
|
else
|
|
{
|
|
int iColor = HB_ISCHAR( iParam ) ? hb_gtColorToN( hb_parc( iParam ) ) : -1;
|
|
if( iColor == -1 )
|
|
iColor = hb_gtGetCurrColor();
|
|
color = _s->COLORS[ ( ( iColor >> 4 ) & 0x0f ) ];
|
|
}
|
|
|
|
return color;
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_SetPen( nPenStyle, nWidth, nColor )
|
|
*/
|
|
HB_FUNC( WVT_SETPEN )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iPenWidth, iPenStyle;
|
|
COLORREF crColor;
|
|
HPEN hPen;
|
|
|
|
if( ! HB_ISNUM( 1 ) )
|
|
{
|
|
hb_retl( HB_FALSE );
|
|
}
|
|
|
|
iPenStyle = hb_parni( 1 );
|
|
iPenWidth = hb_parni( 2 );
|
|
crColor = ( COLORREF ) hb_parnldef( 3, RGB( 0, 0, 0 ) );
|
|
|
|
hPen = CreatePen( iPenStyle, iPenWidth, crColor );
|
|
|
|
if( hPen )
|
|
{
|
|
if( _s->currentPen )
|
|
{
|
|
DeleteObject( _s->currentPen );
|
|
}
|
|
_s->currentPen = hPen;
|
|
|
|
hb_retl( HB_TRUE );
|
|
}
|
|
else
|
|
{
|
|
hb_retl( HB_FALSE );
|
|
}
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_SetBrush( nStyle, nColor, [ nHatch ] )
|
|
*/
|
|
HB_FUNC( WVT_SETBRUSH )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
HBRUSH hBrush;
|
|
LOGBRUSH lb = { 0, 0, 0 };
|
|
|
|
if( ! HB_ISNUM( 1 ) )
|
|
{
|
|
hb_retl( HB_FALSE );
|
|
}
|
|
|
|
lb.lbStyle = hb_parnl( 1 );
|
|
lb.lbColor = ( COLORREF ) hb_parnldef( 2, RGB( 0, 0, 0 ) );
|
|
lb.lbHatch = hb_parnl( 3 );
|
|
#if ! defined( HB_OS_WIN_CE )
|
|
hBrush = CreateBrushIndirect( &lb );
|
|
#else
|
|
hBrush = CreateSolidBrush( lb.lbColor );
|
|
#endif
|
|
if( hBrush )
|
|
{
|
|
if( _s->currentBrush )
|
|
{
|
|
DeleteObject( _s->currentBrush );
|
|
}
|
|
_s->currentBrush = hBrush;
|
|
|
|
hb_retl( HB_TRUE );
|
|
}
|
|
else
|
|
{
|
|
hb_retl( HB_FALSE );
|
|
}
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_DrawBoxGet( nRow, nCol, nWidth )
|
|
*/
|
|
HB_FUNC( WVT_DRAWBOXGET )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
POINT xy = { 0, 0 };
|
|
POINT yz = { 0, 0 };
|
|
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parni( 2 ), hb_parni( 1 ) );
|
|
yz = hb_wvt_gtGetXYFromColRow( ( hb_parni( 2 ) + hb_parni( 3 ) ), hb_parni( 1 ) + 1 );
|
|
|
|
hb_wvt_DrawBoxGet( _s->hdc, xy.y, xy.x, yz.y, yz.x );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
hb_wvt_DrawBoxGet( _s->hGuiDC, xy.y, xy.x, yz.y, yz.x );
|
|
}
|
|
#endif
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_DrawBoxRaised( nTop, nLeft, nBottom, nRight, aPxlOff )
|
|
*/
|
|
HB_FUNC( WVT_DRAWBOXRAISED )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iTop = ( _s->PTEXTSIZE.y * hb_parni( 1 ) ) + hb_parvni( 5, 1 );
|
|
int iLeft = ( _s->PTEXTSIZE.x * hb_parni( 2 ) ) + hb_parvni( 5, 2 );
|
|
int iBottom = ( _s->PTEXTSIZE.y * ( hb_parni( 3 ) + 1 ) ) - 1 + hb_parvni( 5, 3 );
|
|
int iRight = ( _s->PTEXTSIZE.x * ( hb_parni( 4 ) + 1 ) ) - 1 + hb_parvni( 5, 4 );
|
|
|
|
hb_wvt_DrawBoxRaised( _s->hdc, iTop - 1, iLeft - 1, iBottom + 1, iRight + 1 );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
hb_wvt_DrawBoxRaised( _s->hGuiDC, iTop - 1, iLeft - 1, iBottom + 1, iRight + 1 );
|
|
}
|
|
#endif
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_DrawBoxRecessed( nTop, nLeft, nBottom, nRight, aPxlOff )
|
|
*/
|
|
HB_FUNC( WVT_DRAWBOXRECESSED )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iTop = ( _s->PTEXTSIZE.y * hb_parni( 1 ) ) + hb_parvni( 5, 1 );
|
|
int iLeft = ( _s->PTEXTSIZE.x * hb_parni( 2 ) ) + hb_parvni( 5, 2 );
|
|
int iBottom = ( _s->PTEXTSIZE.y * ( hb_parni( 3 ) + 1 ) ) - 1 + hb_parvni( 5, 3 );
|
|
int iRight = ( _s->PTEXTSIZE.x * ( hb_parni( 4 ) + 1 ) ) - 1 + hb_parvni( 5, 4 );
|
|
|
|
hb_wvt_DrawBoxRecessed( _s->hdc, iTop - 1, iLeft - 1, iBottom + 1, iRight + 1 );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
hb_wvt_DrawBoxRecessed( _s->hGuiDC, iTop - 1, iLeft - 1, iBottom + 1, iRight + 1 );
|
|
}
|
|
#endif
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_DrawBoxGroup( nTop, nLeft, nBottom, nRight, aPxlOff )
|
|
*/
|
|
HB_FUNC( WVT_DRAWBOXGROUP )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iTop = ( _s->PTEXTSIZE.y * hb_parni( 1 ) ) + hb_parvni( 5, 1 );
|
|
int iLeft = ( _s->PTEXTSIZE.x * hb_parni( 2 ) ) + hb_parvni( 5, 2 );
|
|
int iBottom = ( _s->PTEXTSIZE.y * ( hb_parni( 3 ) + 1 ) ) - 1 + hb_parvni( 5, 3 );
|
|
int iRight = ( _s->PTEXTSIZE.x * ( hb_parni( 4 ) + 1 ) ) - 1 + hb_parvni( 5, 4 );
|
|
|
|
hb_wvt_DrawBoxGroup( _s->hdc, iTop, iLeft, iBottom, iRight );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
hb_wvt_DrawBoxGroup( _s->hGuiDC, iTop, iLeft, iBottom, iRight );
|
|
}
|
|
#endif
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_DrawBoxRaised( nTop, nLeft, nBottom, nRight, aPxlOff )
|
|
*/
|
|
HB_FUNC( WVT_DRAWBOXGROUPRAISED )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iTop = ( _s->PTEXTSIZE.y * hb_parni( 1 ) ) + hb_parvni( 5, 1 );
|
|
int iLeft = ( _s->PTEXTSIZE.x * hb_parni( 2 ) ) + hb_parvni( 5, 2 );
|
|
int iBottom = ( _s->PTEXTSIZE.y * ( hb_parni( 3 ) + 1 ) ) - 1 + hb_parvni( 5, 3 );
|
|
int iRight = ( _s->PTEXTSIZE.x * ( hb_parni( 4 ) + 1 ) ) - 1 + hb_parvni( 5, 4 );
|
|
|
|
hb_wvt_DrawBoxGroupRaised( _s->hdc, iTop, iLeft, iBottom, iRight );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
hb_wvt_DrawBoxGroupRaised( _s->hGuiDC, iTop, iLeft, iBottom, iRight );
|
|
}
|
|
#endif
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_DrawImage( nTop, nLeft, nBottom, nRight, cImage/nPictureSlot, aPxlOff )
|
|
*/
|
|
HB_FUNC( WVT_DRAWIMAGE )
|
|
{
|
|
#if ! defined( HB_OS_WIN_CE )
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
POINT xy = { 0, 0 };
|
|
int iLeft, iTop, iRight, iBottom;
|
|
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parni( 2 ), hb_parni( 1 ) );
|
|
iTop = xy.y + hb_parvni( 6, 1 );
|
|
iLeft = xy.x + hb_parvni( 6, 2 );
|
|
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parni( 4 ) + 1, hb_parni( 3 ) + 1 );
|
|
iBottom = xy.y - 1 + hb_parvni( 6, 3 );
|
|
iRight = xy.x - 1 + hb_parvni( 6, 4 );
|
|
|
|
if( HB_ISNUM( 5 ) )
|
|
{
|
|
hb_wvt_gtRenderPicture( iLeft, iTop, ( iRight - iLeft ) + 1, ( iBottom - iTop ) + 1, _s->pGUI->iPicture[ hb_parni( 5 ) - 1 ] );
|
|
}
|
|
else
|
|
{
|
|
void * hImage;
|
|
hb_wvt_DrawImage( _s->hdc, iLeft, iTop, ( iRight - iLeft ) + 1, ( iBottom - iTop ) + 1, HB_PARSTR( 5, &hImage, NULL ) );
|
|
hb_strfree( hImage );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
hb_wvt_DrawImage( _s->hGuiDC, iLeft, iTop, ( iRight - iLeft ) + 1, ( iBottom - iTop ) + 1, HB_PARSTR( 5, &hImage, NULL ) );
|
|
hb_strfree( hImage );
|
|
}
|
|
#endif
|
|
}
|
|
|
|
hb_retl( HB_TRUE );
|
|
#else
|
|
hb_retl( HB_FALSE );
|
|
#endif
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* WVT_DRAWLABEL( nRow, nCol, cLabel, nAlign, nEscapement, nTextColor, nBkColor,;
|
|
* cFontFace, nFontHeight, nFontWidth, nFontWeight, nQuality, ;
|
|
* nCharSet, lItalics, lUnderline, lStrikeOut, aPxlOff )
|
|
*/
|
|
HB_FUNC( WVT_DRAWLABEL )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
POINT xy = { 0, 0 };
|
|
HFONT hFont, hOldFont, hOldFontGui;
|
|
LOGFONT logfont; /* = { 0 };*/
|
|
void * hText = NULL;
|
|
|
|
logfont.lfEscapement = hb_parni( 5 ) * 10;
|
|
logfont.lfOrientation = 0;
|
|
logfont.lfWeight = hb_parni( 11 );
|
|
logfont.lfItalic = ( BYTE ) hb_parl( 14 );
|
|
logfont.lfUnderline = ( BYTE ) hb_parl( 15 );
|
|
logfont.lfStrikeOut = ( BYTE ) hb_parl( 16 );
|
|
logfont.lfCharSet = ( BYTE ) hb_parnidef( 13, _s->CodePage );
|
|
logfont.lfOutPrecision = 0;
|
|
logfont.lfClipPrecision = 0;
|
|
logfont.lfQuality = ( BYTE ) hb_parnidef( 12, DEFAULT_QUALITY );
|
|
logfont.lfPitchAndFamily = FF_DONTCARE;
|
|
logfont.lfHeight = hb_parnidef( 9, _s->fontHeight );
|
|
logfont.lfWidth = hb_parnidef( 10, _s->fontWidth < 0 ? -_s->fontWidth : _s->fontWidth );
|
|
|
|
HB_STRNCPY( logfont.lfFaceName, ( HB_ISCHAR( 8 ) ? HB_PARSTR( 8, &hText, NULL ) : _s->fontFace ), HB_SIZEOFARRAY( logfont.lfFaceName ) - 1 );
|
|
hb_strfree( hText );
|
|
|
|
hFont = CreateFontIndirect( &logfont );
|
|
if( hFont )
|
|
{
|
|
void * hText;
|
|
LPCTSTR text = HB_PARSTR( 3, &hText, NULL );
|
|
COLORREF fgClr = hb_wvt_FgColorParam( 6 ),
|
|
bgClr = hb_wvt_BgColorParam( 7 );
|
|
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parni( 2 ), hb_parni( 1 ) );
|
|
xy.x += hb_parvni( 17, 2 );
|
|
xy.y += hb_parvni( 17, 1 );
|
|
|
|
SetBkColor( _s->hdc, bgClr );
|
|
SetTextColor( _s->hdc, fgClr );
|
|
SetTextAlign( _s->hdc, hb_parnidef( 4, TA_LEFT ) );
|
|
hOldFont = ( HFONT ) SelectObject( _s->hdc, hFont );
|
|
|
|
ExtTextOut( _s->hdc, xy.x, xy.y, 0, NULL, text, lstrlen( text ), NULL );
|
|
|
|
SelectObject( _s->hdc, hOldFont );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SetBkColor( _s->hGuiDC, bgClr );
|
|
SetTextColor( _s->hGuiDC, fgClr );
|
|
SetTextAlign( _s->hGuiDC, hb_parnidef( 4, TA_LEFT ) );
|
|
hOldFontGui = ( HFONT ) SelectObject( _s->hGuiDC, hFont );
|
|
|
|
ExtTextOut( _s->hGuiDC, xy.x, xy.y, 0, NULL, text, lstrlen( text ), NULL );
|
|
SelectObject( _s->hGuiDC, hOldFontGui );
|
|
}
|
|
#endif
|
|
hb_strfree( hText );
|
|
DeleteObject( hFont );
|
|
hb_retl( HB_TRUE );
|
|
}
|
|
|
|
hb_retl( HB_FALSE );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* 1 2 3 4 5 6 7 8
|
|
* Wvt_DrawOutline( nTop, nLeft, nBottom, nRight, nThick, nShape, nRGBColor, aPxlOff )
|
|
*/
|
|
HB_FUNC( WVT_DRAWOUTLINE )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
HPEN hPen, hOldPen, hOldPenGUI;
|
|
POINT xy = { 0, 0 };
|
|
int iTop, iLeft, iBottom, iRight;
|
|
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parni( 2 ), hb_parni( 1 ) );;
|
|
iTop = xy.y - 1 + hb_parvni( 8, 1 );
|
|
iLeft = xy.x - 1 + hb_parvni( 8, 2 );
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parni( 4 ) + 1, hb_parni( 3 ) + 1 );
|
|
iBottom = xy.y + hb_parvni( 8, 3 );
|
|
iRight = xy.x + hb_parvni( 8, 4 );
|
|
|
|
hOldPenGUI = hOldPen = 0;
|
|
|
|
if( HB_ISNUM( 5 ) )
|
|
{
|
|
hPen = CreatePen( hb_parni( 5 ), 0, ( COLORREF ) hb_parnl( 7 ) );
|
|
if( hPen )
|
|
{
|
|
hOldPen = ( HPEN ) SelectObject( _s->hdc, hPen );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
hPen = 0;
|
|
SelectObject( _s->hdc, _s->pGUI->penBlack );
|
|
}
|
|
|
|
hb_wvt_DrawOutline( _s->hdc, iTop, iLeft, iBottom, iRight );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
if( hPen )
|
|
{
|
|
hOldPenGUI = ( HPEN ) SelectObject( _s->hGuiDC, hPen );
|
|
}
|
|
else
|
|
{
|
|
hOldPenGUI = ( HPEN ) SelectObject( _s->hGuiDC, _s->pGUI->penBlack );
|
|
hb_wvt_DrawOutline( _s->hGuiDC, iTop, iLeft, iBottom, iRight );
|
|
}
|
|
}
|
|
#endif
|
|
|
|
if( hPen )
|
|
{
|
|
SelectObject( _s->hdc, hOldPen );
|
|
if( hOldPenGUI )
|
|
{
|
|
SelectObject( _s->hGuiDC, hOldPenGUI );
|
|
}
|
|
DeleteObject( hPen );
|
|
}
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* 1 2 3 4 5 6 7 8 9 10 11
|
|
* Wvt_DrawLine( nTop, nLeft, nBottom, nRight, nOrient, nFormat, nAlign, nStyle, nThick, nColor, aPxlOff )
|
|
*/
|
|
HB_FUNC( WVT_DRAWLINE )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iTop = ( _s->PTEXTSIZE.y * hb_parni( 1 ) ) + hb_parvni( 11, 1 );
|
|
int iLeft = ( _s->PTEXTSIZE.x * hb_parni( 2 ) ) + hb_parvni( 11, 2 );
|
|
int iBottom = ( _s->PTEXTSIZE.y * ( hb_parni( 3 ) + 1 ) ) - 1 + hb_parvni( 11, 3 );
|
|
int iRight = ( _s->PTEXTSIZE.x * ( hb_parni( 4 ) + 1 ) ) - 1 + hb_parvni( 11, 4 );
|
|
|
|
int iOrient, iFormat, iAlign, iStyle, iThick;
|
|
int x, y, iOffset;
|
|
COLORREF cr;
|
|
HPEN hPen, hOldPen, hOldPenGUI;
|
|
|
|
/* Resolve Parameters */
|
|
iOrient = hb_parni( 5 );
|
|
iFormat = hb_parni( 6 );
|
|
iAlign = hb_parni( 7 );
|
|
iStyle = hb_parni( 8 );
|
|
iThick = hb_parni( 9 );
|
|
cr = ( COLORREF ) hb_parnl( 10 );
|
|
|
|
x = iLeft;
|
|
y = iTop;
|
|
|
|
switch( iAlign )
|
|
{
|
|
case 0: /* Center */
|
|
if( iOrient == 0 ) /* Horizontal */
|
|
{
|
|
iOffset = ( ( iBottom - iTop ) / 2 );
|
|
y = iTop + iOffset;
|
|
}
|
|
else
|
|
{
|
|
iOffset = ( ( iRight - iLeft ) / 2 );
|
|
x = iLeft + iOffset;
|
|
}
|
|
break;
|
|
|
|
case 1: /* Top */
|
|
break;
|
|
|
|
case 2: /* bottom */
|
|
if( iFormat == 0 || iFormat == 1 ) /* Raised/Recessd */
|
|
{
|
|
y = iBottom - 1;
|
|
}
|
|
else
|
|
{
|
|
y = iBottom;
|
|
}
|
|
break;
|
|
|
|
case 3: /* Left */
|
|
break;
|
|
|
|
case 4: /* Right */
|
|
if( iFormat == 0 || iFormat == 1 ) /* Raised/Recessd */
|
|
{
|
|
x = iRight - 1;
|
|
}
|
|
else
|
|
{
|
|
x = iRight;
|
|
}
|
|
break;
|
|
}
|
|
|
|
hPen = CreatePen( iStyle, iThick, cr );
|
|
hOldPen = ( HPEN ) SelectObject( _s->hdc, hPen );
|
|
hOldPenGUI = _s->bGui ? ( HPEN ) SelectObject( _s->hGuiDC, hPen ) : 0;
|
|
|
|
switch( iFormat )
|
|
{
|
|
case 0: /* Raised */
|
|
if( iOrient == 0 ) /* Horizontal */
|
|
{
|
|
SelectObject( _s->hdc, _s->pGUI->penWhite );
|
|
MoveToEx( _s->hdc, x, y, NULL );
|
|
LineTo( _s->hdc, iRight, y );
|
|
SelectObject( _s->hdc, hPen );
|
|
MoveToEx( _s->hdc, x, y + 1, NULL );
|
|
LineTo( _s->hdc, iRight, y + 1 );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SelectObject( _s->hGuiDC, _s->pGUI->penWhite );
|
|
MoveToEx( _s->hGuiDC, x, y, NULL );
|
|
LineTo( _s->hGuiDC, iRight, y );
|
|
SelectObject( _s->hGuiDC, hPen );
|
|
MoveToEx( _s->hGuiDC, x, y + 1, NULL );
|
|
LineTo( _s->hGuiDC, iRight, y + 1 );
|
|
}
|
|
#endif
|
|
}
|
|
else /* Vertical */
|
|
{
|
|
SelectObject( _s->hdc, _s->pGUI->penWhite );
|
|
MoveToEx( _s->hdc, x, y, NULL );
|
|
LineTo( _s->hdc, x, iBottom );
|
|
SelectObject( _s->hdc, hPen );
|
|
MoveToEx( _s->hdc, x + 1, y, NULL );
|
|
LineTo( _s->hdc, x + 1, iBottom );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SelectObject( _s->hGuiDC, _s->pGUI->penWhite );
|
|
MoveToEx( _s->hGuiDC, x, y, NULL );
|
|
LineTo( _s->hGuiDC, x, iBottom );
|
|
SelectObject( _s->hGuiDC, hPen );
|
|
MoveToEx( _s->hGuiDC, x + 1, y, NULL );
|
|
LineTo( _s->hGuiDC, x + 1, iBottom );
|
|
}
|
|
#endif
|
|
}
|
|
break;
|
|
|
|
case 1: /* Recessed */
|
|
if( iOrient == 0 ) /* Horizontal */
|
|
{
|
|
SelectObject( _s->hdc, hPen );
|
|
MoveToEx( _s->hdc, x, y, NULL );
|
|
LineTo( _s->hdc, iRight, y );
|
|
SelectObject( _s->hdc, _s->pGUI->penWhite );
|
|
MoveToEx( _s->hdc, x, y + 1, NULL );
|
|
LineTo( _s->hdc, iRight, y + 1 );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SelectObject( _s->hGuiDC, hPen );
|
|
MoveToEx( _s->hGuiDC, x, y, NULL );
|
|
LineTo( _s->hGuiDC, iRight, y );
|
|
SelectObject( _s->hGuiDC, _s->pGUI->penWhite );
|
|
MoveToEx( _s->hGuiDC, x, y + 1, NULL );
|
|
LineTo( _s->hGuiDC, iRight, y + 1 );
|
|
}
|
|
#endif
|
|
}
|
|
else /* Vertical */
|
|
{
|
|
SelectObject( _s->hdc, hPen );
|
|
MoveToEx( _s->hdc, x, y, NULL );
|
|
LineTo( _s->hdc, x, iBottom );
|
|
SelectObject( _s->hdc, _s->pGUI->penWhite );
|
|
MoveToEx( _s->hdc, x + 1, y, NULL );
|
|
LineTo( _s->hdc, x + 1, iBottom );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SelectObject( _s->hGuiDC, hPen );
|
|
MoveToEx( _s->hGuiDC, x, y, NULL );
|
|
LineTo( _s->hGuiDC, x, iBottom );
|
|
SelectObject( _s->hGuiDC, _s->pGUI->penWhite );
|
|
MoveToEx( _s->hGuiDC, x + 1, y, NULL );
|
|
LineTo( _s->hGuiDC, x + 1, iBottom );
|
|
}
|
|
#endif
|
|
}
|
|
break;
|
|
|
|
case 2: /* Plain */
|
|
if( iOrient == 0 ) /* Horizontal */
|
|
{
|
|
SelectObject( _s->hdc, hPen );
|
|
MoveToEx( _s->hdc, x, y, NULL );
|
|
LineTo( _s->hdc, iRight, y );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SelectObject( _s->hGuiDC, hPen );
|
|
MoveToEx( _s->hGuiDC, x, y, NULL );
|
|
LineTo( _s->hGuiDC, iRight, y );
|
|
}
|
|
#endif
|
|
}
|
|
else /* Vertical */
|
|
{
|
|
SelectObject( _s->hdc, hPen );
|
|
MoveToEx( _s->hdc, x, y, NULL );
|
|
LineTo( _s->hdc, x, iBottom );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SelectObject( _s->hGuiDC, hPen );
|
|
MoveToEx( _s->hGuiDC, x, y, NULL );
|
|
LineTo( _s->hGuiDC, x, iBottom );
|
|
}
|
|
#endif
|
|
}
|
|
break;
|
|
}
|
|
|
|
SelectObject( _s->hdc, hOldPen );
|
|
if( hOldPenGUI )
|
|
{
|
|
SelectObject( _s->hGuiDC, hOldPenGUI );
|
|
}
|
|
DeleteObject( hPen );
|
|
hb_retl( HB_TRUE );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Inside the area requested!
|
|
* Wvt_DrawEllipse( nTop, nLeft, nBottom, nRight, aPxlOff )
|
|
*/
|
|
HB_FUNC( WVT_DRAWELLIPSE )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iTop = ( _s->PTEXTSIZE.y * hb_parni( 1 ) ) + hb_parvni( 5, 1 );
|
|
int iLeft = ( _s->PTEXTSIZE.x * hb_parni( 2 ) ) + hb_parvni( 5, 2 );
|
|
int iBottom = ( _s->PTEXTSIZE.y * ( hb_parni( 3 ) + 1 ) ) - 1 + hb_parvni( 5, 3 );
|
|
int iRight = ( _s->PTEXTSIZE.x * ( hb_parni( 4 ) + 1 ) ) - 1 + hb_parvni( 5, 4 );
|
|
|
|
SelectObject( _s->hdc, _s->currentBrush );
|
|
SelectObject( _s->hdc, _s->currentPen );
|
|
|
|
hb_retl( Ellipse( _s->hdc, iLeft, iTop, iRight, iBottom ) );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
hb_retl( Ellipse( _s->hGuiDC, iLeft, iTop, iRight, iBottom ) );
|
|
}
|
|
#endif
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_DrawRectangle( nTop, nLeft, nBottom, nRight, aPxlOff )
|
|
*/
|
|
HB_FUNC( WVT_DRAWRECTANGLE )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iTop = ( _s->PTEXTSIZE.y * hb_parni( 1 ) ) + hb_parvni( 5, 1 );
|
|
int iLeft = ( _s->PTEXTSIZE.x * hb_parni( 2 ) ) + hb_parvni( 5, 2 );
|
|
int iBottom = ( _s->PTEXTSIZE.y * ( hb_parni( 3 ) + 1 ) ) - 1 + hb_parvni( 5, 3 );
|
|
int iRight = ( _s->PTEXTSIZE.x * ( hb_parni( 4 ) + 1 ) ) - 1 + hb_parvni( 5, 4 );
|
|
|
|
SelectObject( _s->hdc, _s->currentBrush );
|
|
SelectObject( _s->hdc, _s->currentPen );
|
|
|
|
hb_retl( Rectangle( _s->hdc, iLeft, iTop, iRight, iBottom ) );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
hb_retl( Rectangle( _s->hGuiDC, iLeft, iTop, iRight, iBottom ) );
|
|
}
|
|
#endif
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_DrawRoundRect( nTop, nLeft, nBottom, nRight, aPxlOff, nRoundHeight, nRoundWidth )
|
|
*/
|
|
HB_FUNC( WVT_DRAWROUNDRECT )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iTop = ( _s->PTEXTSIZE.y * hb_parni( 1 ) ) + hb_parvni( 5, 1 );
|
|
int iLeft = ( _s->PTEXTSIZE.x * hb_parni( 2 ) ) + hb_parvni( 5, 2 );
|
|
int iBottom = ( _s->PTEXTSIZE.y * ( hb_parni( 3 ) + 1 ) ) - 1 + hb_parvni( 5, 3 );
|
|
int iRight = ( _s->PTEXTSIZE.x * ( hb_parni( 4 ) + 1 ) ) - 1 + hb_parvni( 5, 4 );
|
|
int iHt, iWd;
|
|
|
|
iHt = hb_parni( 6 );
|
|
iWd = hb_parni( 7 );
|
|
|
|
SelectObject( _s->hdc, _s->currentBrush );
|
|
SelectObject( _s->hdc, _s->currentPen );
|
|
|
|
hb_retl( RoundRect( _s->hdc, iLeft, iTop, iRight, iBottom, iWd, iHt ) );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
hb_retl( RoundRect( _s->hGuiDC, iLeft, iTop, iRight, iBottom, iWd, iHt ) );
|
|
}
|
|
#endif
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_DrawFocusRect( nTop, nLeft, nBottom, nRight, aPxlOff )
|
|
*/
|
|
HB_FUNC( WVT_DRAWFOCUSRECT )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iTop = ( _s->PTEXTSIZE.y * hb_parni( 1 ) ) + hb_parvni( 5, 1 );
|
|
int iLeft = ( _s->PTEXTSIZE.x * hb_parni( 2 ) ) + hb_parvni( 5, 2 );
|
|
int iBottom = ( _s->PTEXTSIZE.y * ( hb_parni( 3 ) + 1 ) ) - 1 + hb_parvni( 5, 3 );
|
|
int iRight = ( _s->PTEXTSIZE.x * ( hb_parni( 4 ) + 1 ) ) - 1 + hb_parvni( 5, 4 );
|
|
RECT rc = { 0, 0, 0, 0 };
|
|
|
|
rc.left = iLeft;
|
|
rc.top = iTop;
|
|
rc.right = iRight;
|
|
rc.bottom = iBottom;
|
|
|
|
hb_retl( DrawFocusRect( _s->hdc, &rc ) );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
hb_retl( DrawFocusRect( _s->hGuiDC, &rc ) );
|
|
}
|
|
#endif
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_DrawColorRect( nTop, nLeft, nBottom, nRight, aPxlOff, nRGB )
|
|
*/
|
|
HB_FUNC( WVT_DRAWCOLORRECT )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iTop = ( _s->PTEXTSIZE.y * hb_parni( 1 ) ) + hb_parvni( 5, 1 );
|
|
int iLeft = ( _s->PTEXTSIZE.x * hb_parni( 2 ) ) + hb_parvni( 5, 2 );
|
|
int iBottom = ( _s->PTEXTSIZE.y * ( hb_parni( 3 ) + 1 ) ) - 1 + hb_parvni( 5, 3 );
|
|
int iRight = ( _s->PTEXTSIZE.x * ( hb_parni( 4 ) + 1 ) ) - 1 + hb_parvni( 5, 4 );
|
|
RECT rc = { 0, 0, 0, 0 };
|
|
HBRUSH hBrush;
|
|
|
|
hBrush = CreateSolidBrush( ( COLORREF ) hb_parnl( 6 ) );
|
|
|
|
if( hBrush )
|
|
{
|
|
rc.left = iLeft;
|
|
rc.top = iTop;
|
|
rc.right = iRight;
|
|
rc.bottom = iBottom;
|
|
|
|
hb_retl( FillRect( _s->hdc, &rc, hBrush ) );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
hb_retl( FillRect( _s->hGuiDC, &rc, hBrush ) );
|
|
}
|
|
#endif
|
|
DeleteObject( hBrush );
|
|
}
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* 1 2 3 4 5
|
|
* Wvt_DrawGridHorz( nTop, nLeft, nRight, nRows, aPxlOff )
|
|
* aPxlOff[ 2 ] and aPxlOff[ 4 ] used
|
|
*/
|
|
HB_FUNC( WVT_DRAWGRIDHORZ )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iAtRow = hb_parni( 1 );
|
|
int iRows = hb_parni( 4 );
|
|
int i, y;
|
|
int iLeft, iRight;
|
|
|
|
iLeft = ( hb_parni( 2 ) * _s->PTEXTSIZE.x );
|
|
iLeft += hb_parvni( 5, 2 );
|
|
iRight = ( ( ( hb_parni( 3 ) + 1 ) * _s->PTEXTSIZE.x ) - 1 );
|
|
iRight += hb_parvni( 5, 4 );
|
|
|
|
SelectObject( _s->hdc, _s->currentPen );
|
|
|
|
for( i = 0; i < iRows; i++ )
|
|
{
|
|
y = ( ( iAtRow ) * _s->PTEXTSIZE.y );
|
|
|
|
MoveToEx( _s->hdc, iLeft, y, NULL );
|
|
LineTo( _s->hdc, iRight, y );
|
|
|
|
iAtRow++;
|
|
}
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
iAtRow = hb_parni( 1 );
|
|
|
|
SelectObject( _s->hGuiDC, _s->currentPen );
|
|
|
|
for( i = 0; i < iRows; i++ )
|
|
{
|
|
y = ( ( iAtRow ) * _s->PTEXTSIZE.y );
|
|
|
|
MoveToEx( _s->hGuiDC, iLeft, y, NULL );
|
|
LineTo( _s->hGuiDC, iRight, y );
|
|
|
|
iAtRow++;
|
|
}
|
|
}
|
|
#endif
|
|
hb_retl( HB_TRUE );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_DrawGridVert( nTop, nBottom, aCols, nCols, aPxlOff )
|
|
* aPxlOff[ 1 ] and aPxlOff[ 3 ] used
|
|
*/
|
|
HB_FUNC( WVT_DRAWGRIDVERT )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iTop, iBottom, x, i, iCharHeight, iCharWidth;
|
|
int iTabs = hb_parni( 4 );
|
|
|
|
if( ! iTabs )
|
|
{
|
|
hb_retl( HB_FALSE );
|
|
}
|
|
|
|
iCharWidth = _s->PTEXTSIZE.x;
|
|
iCharHeight = _s->PTEXTSIZE.y;
|
|
|
|
iTop = ( hb_parni( 1 ) * iCharHeight );
|
|
iTop += hb_parvni( 5, 1 );
|
|
iBottom = ( ( hb_parni( 2 ) + 1 ) * iCharHeight ) - 1;
|
|
iBottom += hb_parvni( 5, 3 );
|
|
|
|
SelectObject( _s->hdc, _s->currentPen );
|
|
|
|
for( i = 1; i <= iTabs; i++ )
|
|
{
|
|
x = ( hb_parvni( 3, i ) * iCharWidth );
|
|
|
|
MoveToEx( _s->hdc, x, iTop, NULL );
|
|
LineTo( _s->hdc, x, iBottom );
|
|
}
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SelectObject( _s->hGuiDC, _s->currentPen );
|
|
for( i = 1; i <= iTabs; i++ )
|
|
{
|
|
x = ( hb_parvni( 3, i ) * iCharWidth );
|
|
|
|
MoveToEx( _s->hGuiDC, x, iTop, NULL );
|
|
LineTo( _s->hGuiDC, x, iBottom );
|
|
}
|
|
}
|
|
#endif
|
|
hb_retl( HB_TRUE );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_DrawButton( nTop, nLeft, nBottom, nRight, cText, cnImage, ;
|
|
* nFormat, nTextColor, nBkColor, nImageAt, aPxlOff ) ;
|
|
*/
|
|
HB_FUNC( WVT_DRAWBUTTON )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
SIZE sz = { 0, 0 };
|
|
POINT xy = { 0, 0 };
|
|
RECT rc = { 0, 0, 0, 0 };
|
|
int iTop, iLeft, iBottom, iRight;
|
|
int iAlign;
|
|
int iTextHeight /*, iTextWidth */;
|
|
LOGBRUSH lb = { 0, 0, 0 };
|
|
HBRUSH hBrush;
|
|
|
|
HB_BOOL bText = HB_ISCHAR( 5 );
|
|
HB_BOOL bImage = ( HB_ISNUM( 6 ) || HB_ISCHAR( 6 ) );
|
|
int iFormat = hb_parni( 7 );
|
|
COLORREF textColor = ( COLORREF ) hb_parnldef( 8, _s->COLORS[ 0 ] );
|
|
COLORREF bkColor = ( COLORREF ) hb_parnldef( 9, _s->COLORS[ 7 ] );
|
|
|
|
/* int iImageAt = hb_parni( 10 ); */
|
|
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parni( 2 ), hb_parni( 1 ) );
|
|
iTop = xy.y + hb_parvni( 11, 1 );
|
|
iLeft = xy.x + hb_parvni( 11, 2 );
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parni( 4 ) + 1, hb_parni( 3 ) + 1 );
|
|
iBottom = xy.y - 1 + hb_parvni( 11, 3 );
|
|
iRight = xy.x - 1 + hb_parvni( 11, 4 );
|
|
|
|
lb.lbStyle = BS_SOLID;
|
|
lb.lbColor = bkColor;
|
|
lb.lbHatch = 0;
|
|
#if ! defined( HB_OS_WIN_CE )
|
|
hBrush = CreateBrushIndirect( &lb );
|
|
#else
|
|
hBrush = CreateSolidBrush( lb.lbColor );
|
|
#endif
|
|
rc.left = iLeft;
|
|
rc.top = iTop;
|
|
rc.right = iRight + 1;
|
|
rc.bottom = iBottom + 1;
|
|
|
|
FillRect( _s->hdc, &rc, hBrush );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
FillRect( _s->hGuiDC, &rc, hBrush );
|
|
}
|
|
#endif
|
|
DeleteObject( hBrush );
|
|
|
|
switch( iFormat )
|
|
{
|
|
case 1:
|
|
hb_wvt_DrawBoxRecessed( _s->hdc, iTop + 1, iLeft + 1, iBottom - 1, iRight - 1 );
|
|
if( _s->bGui )
|
|
{
|
|
hb_wvt_DrawBoxRecessed( _s->hGuiDC, iTop + 1, iLeft + 1, iBottom - 1, iRight - 1 );
|
|
}
|
|
break;
|
|
case 2:
|
|
break;
|
|
case 3:
|
|
hb_wvt_DrawOutline( _s->hdc, iTop, iLeft, iBottom, iRight );
|
|
if( _s->bGui )
|
|
{
|
|
hb_wvt_DrawOutline( _s->hGuiDC, iTop, iLeft, iBottom, iRight );
|
|
}
|
|
break;
|
|
case 4:
|
|
break;
|
|
default:
|
|
hb_wvt_DrawBoxRaised( _s->hdc, iTop + 1, iLeft + 1, iBottom - 1, iRight - 1 );
|
|
if( _s->bGui )
|
|
{
|
|
hb_wvt_DrawBoxRaised( _s->hGuiDC, iTop + 1, iLeft + 1, iBottom - 1, iRight - 1 );
|
|
}
|
|
break;
|
|
}
|
|
|
|
if( bText )
|
|
{
|
|
void * hText;
|
|
LPCTSTR text = HB_PARSTR( 5, &hText, NULL );
|
|
#if ! defined( HB_OS_WIN_CE )
|
|
SelectObject( _s->hdc, GetStockObject( DEFAULT_GUI_FONT ) );
|
|
#else
|
|
SelectObject( _s->hdc, GetStockObject( OEM_FIXED_FONT ) );
|
|
#endif
|
|
GetTextExtentPoint32( _s->hdc, text, lstrlen( text ), &sz );
|
|
|
|
/* iTextWidth = sz.cx; */
|
|
iTextHeight = sz.cy;
|
|
|
|
xy.x = iLeft + ( ( iRight - iLeft + 1 ) / 2 );
|
|
|
|
if( bImage )
|
|
{
|
|
xy.y = ( iBottom - 2 - iTextHeight );
|
|
}
|
|
else
|
|
{
|
|
xy.y = iTop + ( ( iBottom - iTop + 1 - iTextHeight ) / 2 );
|
|
}
|
|
|
|
if( iFormat == 1 )
|
|
{
|
|
xy.x = xy.x + 2;
|
|
xy.y = xy.y + 2;
|
|
}
|
|
|
|
iAlign = TA_CENTER + TA_TOP;
|
|
|
|
SetTextAlign( _s->hdc, iAlign );
|
|
SetBkMode( _s->hdc, TRANSPARENT );
|
|
SetTextColor( _s->hdc, textColor );
|
|
|
|
ExtTextOut( _s->hdc, xy.x, xy.y, 0, NULL, text, lstrlen( text ), NULL );
|
|
if( _s->bGui )
|
|
{
|
|
#if ! defined( HB_OS_WIN_CE )
|
|
SelectObject( _s->hGuiDC, GetStockObject( DEFAULT_GUI_FONT ) );
|
|
#else
|
|
SelectObject( _s->hGuiDC, GetStockObject( OEM_FIXED_FONT ) );
|
|
#endif
|
|
SetTextAlign( _s->hGuiDC, iAlign );
|
|
SetBkMode( _s->hGuiDC, TRANSPARENT );
|
|
SetTextColor( _s->hGuiDC, textColor );
|
|
|
|
ExtTextOut( _s->hGuiDC, xy.x, xy.y, 0, NULL, text, lstrlen( text ), NULL );
|
|
}
|
|
hb_strfree( hText );
|
|
}
|
|
else
|
|
{
|
|
iTextHeight = -1;
|
|
}
|
|
|
|
if( bImage )
|
|
{
|
|
#if ! defined( HB_OS_WIN_CE )
|
|
int iImageWidth = ( iRight - iLeft + 1 - 8 );
|
|
int iImageHeight = ( iBottom - iTop + 1 - 8 - iTextHeight );
|
|
|
|
if( HB_ISNUM( 6 ) )
|
|
{
|
|
IPicture * iPicture = _s->pGUI->iPicture[ hb_parni( 6 ) - 1 ];
|
|
hb_wvt_gtRenderPicture( iLeft + 4, iTop + 4, iImageWidth, iImageHeight, iPicture );
|
|
}
|
|
else
|
|
{
|
|
void * hImage;
|
|
hb_wvt_DrawImage( _s->hdc, iLeft + 4, iTop + 4, iImageWidth, iImageHeight, HB_PARSTR( 6, &hImage, NULL ) );
|
|
hb_strfree( hImage );
|
|
if( _s->bGui )
|
|
{
|
|
hb_wvt_DrawImage( _s->hGuiDC, iLeft + 4, iTop + 4, iImageWidth, iImageHeight, HB_PARSTR( 6, &hImage, NULL ) );
|
|
hb_strfree( hImage );
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
|
|
hb_retl( HB_TRUE );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_DrawStatusBar( nNumPanels, aTLBRofPanels )
|
|
*/
|
|
HB_FUNC( WVT_DRAWSTATUSBAR )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iPanels = hb_parni( 1 );
|
|
int i, iNext;
|
|
int iTop, iLeft, iBottom, iRight;
|
|
POINT xy = { 0, 0 };
|
|
|
|
iNext = 0;
|
|
|
|
for( i = 0; i < iPanels; i++ )
|
|
{
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parvni( 2, iNext + 2 ), hb_parvni( 2, iNext + 1 ) );
|
|
iTop = xy.y;
|
|
iLeft = xy.x + 1;
|
|
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parvni( 2, iNext + 4 ), hb_parvni( 2, iNext + 3 ) + 1 );
|
|
iBottom = xy.y - 1;
|
|
iRight = xy.x - 2;
|
|
|
|
SelectObject( _s->hdc, _s->pGUI->penWhite );
|
|
|
|
MoveToEx( _s->hdc, iRight, iTop, NULL ); /* Right */
|
|
LineTo( _s->hdc, iRight, iBottom );
|
|
|
|
MoveToEx( _s->hdc, iLeft, iBottom, NULL ); /* Bottom */
|
|
LineTo( _s->hdc, iRight, iBottom );
|
|
|
|
SelectObject( _s->hdc, _s->pGUI->penDarkGray );
|
|
|
|
MoveToEx( _s->hdc, iLeft, iTop, NULL ); /* Left */
|
|
LineTo( _s->hdc, iLeft, iBottom );
|
|
|
|
MoveToEx( _s->hdc, iLeft, iTop, NULL ); /* Top */
|
|
LineTo( _s->hdc, iRight, iTop );
|
|
|
|
iNext = iNext + 4;
|
|
}
|
|
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parvni( 2, 4 * iPanels ), hb_parvni( 2, ( 4 * iPanels ) - 1 ) + 1 );
|
|
iTop = xy.y - 2;
|
|
iLeft = xy.x - 2;
|
|
iBottom = iTop;
|
|
iRight = iLeft;
|
|
|
|
SelectObject( _s->hdc, _s->pGUI->penBlack );
|
|
|
|
MoveToEx( _s->hdc, iLeft - 4, iBottom, NULL );
|
|
LineTo( _s->hdc, iRight, iTop - 4 );
|
|
MoveToEx( _s->hdc, iLeft - 7, iBottom, NULL );
|
|
LineTo( _s->hdc, iRight, iTop - 7 );
|
|
MoveToEx( _s->hdc, iLeft - 10, iBottom, NULL );
|
|
LineTo( _s->hdc, iRight, iTop - 10 );
|
|
|
|
SelectObject( _s->hdc, _s->pGUI->penWhite );
|
|
|
|
MoveToEx( _s->hdc, iLeft - 5, iBottom, NULL );
|
|
LineTo( _s->hdc, iRight, iTop - 5 );
|
|
MoveToEx( _s->hdc, iLeft - 8, iBottom, NULL );
|
|
LineTo( _s->hdc, iRight, iTop - 8 );
|
|
MoveToEx( _s->hdc, iLeft - 11, iBottom, NULL );
|
|
LineTo( _s->hdc, iRight, iTop - 11 );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_DrawPicture( nTop, nLeft, nBottom, nRight, nSlot, aPxlOff ) -> lOk
|
|
* nSlot <= 20 aAdj == { 0,0,-2,-2 } To Adjust the pixels for { Top,Left,Bottom,Right }
|
|
*/
|
|
HB_FUNC( WVT_DRAWPICTURE )
|
|
{
|
|
#if ! defined( HB_OS_WIN_CE )
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
POINT xy = { 0, 0 };
|
|
int iTop, iLeft, iBottom, iRight;
|
|
int iSlot = hb_parni( 5 ) - 1;
|
|
|
|
if( iSlot < WVT_PICTURES_MAX )
|
|
{
|
|
if( _s->pGUI->iPicture[ iSlot ] )
|
|
{
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parni( 2 ), hb_parni( 1 ) );;
|
|
iTop = xy.y + hb_parvni( 6, 1 );
|
|
iLeft = xy.x + hb_parvni( 6, 2 );
|
|
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parni( 4 ) + 1, hb_parni( 3 ) + 1 );
|
|
iBottom = xy.y - 1 + hb_parvni( 6, 3 );
|
|
iRight = xy.x - 1 + hb_parvni( 6, 4 );
|
|
|
|
hb_retl( hb_wvt_gtRenderPicture( iLeft, iTop, iRight - iLeft + 1, iBottom - iTop + 1, _s->pGUI->iPicture[ iSlot ] ) );
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* WVT_DRAWLABELEX( nRow, nCol, cLabel, nAlign, nTextColor, nBkColor, nSlotFont, aPxlOff )
|
|
*/
|
|
HB_FUNC( WVT_DRAWLABELEX )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
POINT xy = { 0, 0 };
|
|
int iSlot = hb_parni( 7 ) - 1;
|
|
|
|
if( _s->pGUI->hUserFonts[ iSlot ] )
|
|
{
|
|
void * hText;
|
|
LPCTSTR text = HB_PARSTR( 3, &hText, NULL );
|
|
COLORREF fgClr = hb_wvt_FgColorParam( 5 ),
|
|
bgClr = hb_wvt_BgColorParam( 6 );
|
|
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parni( 2 ), hb_parni( 1 ) );;
|
|
xy.x += hb_parvni( 8, 2 );
|
|
xy.y += hb_parvni( 8, 1 );
|
|
|
|
SetBkColor( _s->hdc, bgClr );
|
|
SetTextColor( _s->hdc, fgClr );
|
|
SetTextAlign( _s->hdc, hb_parnidef( 4, TA_LEFT ) );
|
|
SelectObject( _s->hdc, _s->pGUI->hUserFonts[ iSlot ] );
|
|
|
|
ExtTextOut( _s->hdc, xy.x, xy.y, 0, NULL, text, lstrlen( text ), NULL );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SetBkColor( _s->hGuiDC, bgClr );
|
|
SetTextColor( _s->hGuiDC, fgClr );
|
|
SetTextAlign( _s->hGuiDC, hb_parnidef( 4, TA_LEFT ) );
|
|
SelectObject( _s->hGuiDC, _s->pGUI->hUserFonts[ iSlot ] );
|
|
|
|
ExtTextOut( _s->hGuiDC, xy.x, xy.y, 0, NULL, text, lstrlen( text ), NULL );
|
|
}
|
|
#endif
|
|
hb_strfree( hText );
|
|
hb_retl( HB_TRUE );
|
|
}
|
|
|
|
hb_retl( HB_FALSE );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* 1 2 3 4 5 6 7 8 9
|
|
* Wvt_DrawLineEx( nTop, nLeft, nBottom, nRight, nOrient, nFormat, nAlign, nSlotPen, aPxlOff )
|
|
*/
|
|
HB_FUNC( WVT_DRAWLINEEX )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
POINT xy = { 0, 0 };
|
|
int iTop, iLeft, iBottom, iRight, iOffset;
|
|
int iOrient, iFormat, iAlign;
|
|
int x, y;
|
|
HPEN hPen;
|
|
int iSlot = hb_parni( 8 ) - 1;
|
|
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parni( 2 ), hb_parni( 1 ) );;
|
|
iTop = xy.y + hb_parvni( 9, 1 );
|
|
iLeft = xy.x + hb_parvni( 9, 2 );
|
|
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parni( 4 ) + 1, hb_parni( 3 ) + 1 );
|
|
iBottom = xy.y - 1 + hb_parvni( 9, 4 );
|
|
iRight = xy.x - 1 + hb_parvni( 9, 4 );
|
|
|
|
/* Resolve Parameters */
|
|
iOrient = hb_parni( 5 );
|
|
iFormat = hb_parni( 6 );
|
|
iAlign = hb_parni( 7 );
|
|
|
|
x = iLeft;
|
|
y = iTop;
|
|
|
|
switch( iAlign )
|
|
{
|
|
case 0: /* Center */
|
|
if( iOrient == 0 ) /* Horizontal */
|
|
{
|
|
iOffset = ( ( iBottom - iTop ) / 2 );
|
|
y = iTop + iOffset;
|
|
}
|
|
else
|
|
{
|
|
iOffset = ( ( iRight - iLeft ) / 2 );
|
|
x = iLeft + iOffset;
|
|
}
|
|
break;
|
|
|
|
case 1: /* Top */
|
|
break;
|
|
|
|
case 2: /* bottom */
|
|
if( iFormat == 0 || iFormat == 1 ) /* Raised/Recessd */
|
|
{
|
|
y = iBottom - 1;
|
|
}
|
|
else
|
|
{
|
|
y = iBottom;
|
|
}
|
|
break;
|
|
|
|
case 3: /* Left */
|
|
break;
|
|
|
|
case 4: /* Right */
|
|
if( iFormat == 0 || iFormat == 1 ) /* Raised/Recessd */
|
|
{
|
|
x = iRight - 1;
|
|
}
|
|
else
|
|
{
|
|
x = iRight;
|
|
}
|
|
break;
|
|
}
|
|
|
|
hPen = _s->pGUI->hUserPens[ iSlot ];
|
|
|
|
switch( iFormat )
|
|
{
|
|
case 0: /* Raised */
|
|
if( iOrient == 0 ) /* Horizontal */
|
|
{
|
|
SelectObject( _s->hdc, _s->pGUI->penWhite );
|
|
MoveToEx( _s->hdc, x, y, NULL );
|
|
LineTo( _s->hdc, iRight, y );
|
|
SelectObject( _s->hdc, hPen );
|
|
MoveToEx( _s->hdc, x, y + 1, NULL );
|
|
LineTo( _s->hdc, iRight, y + 1 );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SelectObject( _s->hGuiDC, _s->pGUI->penWhite );
|
|
MoveToEx( _s->hGuiDC, x, y, NULL );
|
|
LineTo( _s->hGuiDC, iRight, y );
|
|
SelectObject( _s->hGuiDC, hPen );
|
|
MoveToEx( _s->hGuiDC, x, y + 1, NULL );
|
|
LineTo( _s->hGuiDC, iRight, y + 1 );
|
|
}
|
|
#endif
|
|
}
|
|
else /* Vertical */
|
|
{
|
|
SelectObject( _s->hdc, _s->pGUI->penWhite );
|
|
MoveToEx( _s->hdc, x, y, NULL );
|
|
LineTo( _s->hdc, x, iBottom );
|
|
SelectObject( _s->hdc, hPen );
|
|
MoveToEx( _s->hdc, x + 1, y, NULL );
|
|
LineTo( _s->hdc, x + 1, iBottom );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SelectObject( _s->hGuiDC, _s->pGUI->penWhite );
|
|
MoveToEx( _s->hGuiDC, x, y, NULL );
|
|
LineTo( _s->hGuiDC, x, iBottom );
|
|
SelectObject( _s->hGuiDC, hPen );
|
|
MoveToEx( _s->hGuiDC, x + 1, y, NULL );
|
|
LineTo( _s->hGuiDC, x + 1, iBottom );
|
|
}
|
|
#endif
|
|
}
|
|
break;
|
|
|
|
case 1: /* Recessed */
|
|
if( iOrient == 0 ) /* Horizontal */
|
|
{
|
|
SelectObject( _s->hdc, hPen );
|
|
MoveToEx( _s->hdc, x, y, NULL );
|
|
LineTo( _s->hdc, iRight, y );
|
|
SelectObject( _s->hdc, _s->pGUI->penWhite );
|
|
MoveToEx( _s->hdc, x, y + 1, NULL );
|
|
LineTo( _s->hdc, iRight, y + 1 );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SelectObject( _s->hGuiDC, hPen );
|
|
MoveToEx( _s->hGuiDC, x, y, NULL );
|
|
LineTo( _s->hGuiDC, iRight, y );
|
|
SelectObject( _s->hGuiDC, _s->pGUI->penWhite );
|
|
MoveToEx( _s->hGuiDC, x, y + 1, NULL );
|
|
LineTo( _s->hGuiDC, iRight, y + 1 );
|
|
}
|
|
#endif
|
|
}
|
|
else /* Vertical */
|
|
{
|
|
SelectObject( _s->hdc, hPen );
|
|
MoveToEx( _s->hdc, x, y, NULL );
|
|
LineTo( _s->hdc, x, iBottom );
|
|
SelectObject( _s->hdc, _s->pGUI->penWhite );
|
|
MoveToEx( _s->hdc, x + 1, y, NULL );
|
|
LineTo( _s->hdc, x + 1, iBottom );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SelectObject( _s->hGuiDC, hPen );
|
|
MoveToEx( _s->hGuiDC, x, y, NULL );
|
|
LineTo( _s->hGuiDC, x, iBottom );
|
|
SelectObject( _s->hGuiDC, _s->pGUI->penWhite );
|
|
MoveToEx( _s->hGuiDC, x + 1, y, NULL );
|
|
LineTo( _s->hGuiDC, x + 1, iBottom );
|
|
}
|
|
#endif
|
|
}
|
|
break;
|
|
|
|
case 2: /* Plain */
|
|
if( iOrient == 0 ) /* Horizontal */
|
|
{
|
|
SelectObject( _s->hdc, hPen );
|
|
MoveToEx( _s->hdc, x, y, NULL );
|
|
LineTo( _s->hdc, iRight, y );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SelectObject( _s->hGuiDC, hPen );
|
|
MoveToEx( _s->hGuiDC, x, y, NULL );
|
|
LineTo( _s->hGuiDC, iRight, y );
|
|
}
|
|
#endif
|
|
}
|
|
else /* Vertical */
|
|
{
|
|
SelectObject( _s->hdc, hPen );
|
|
MoveToEx( _s->hdc, x, y, NULL );
|
|
LineTo( _s->hdc, x, iBottom );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SelectObject( _s->hGuiDC, hPen );
|
|
MoveToEx( _s->hGuiDC, x, y, NULL );
|
|
LineTo( _s->hGuiDC, x, iBottom );
|
|
}
|
|
#endif
|
|
}
|
|
break;
|
|
}
|
|
|
|
hb_retl( HB_TRUE );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_DrawOutlineEx( nTop, nLeft, nBottom, nRight, nSlotPen, aPxlOff )
|
|
*/
|
|
HB_FUNC( WVT_DRAWOUTLINEEX )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
POINT xy = { 0, 0 };
|
|
int iTop, iLeft, iBottom, iRight;
|
|
int iSlot = hb_parni( 5 ) - 1;
|
|
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parni( 2 ), hb_parni( 1 ) );
|
|
iTop = xy.y - 1 + hb_parvni( 6, 1 );
|
|
iLeft = xy.x - 1 + hb_parvni( 6, 2 );
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parni( 4 ) + 1, hb_parni( 3 ) + 1 );
|
|
iBottom = xy.y + hb_parvni( 6, 3 );
|
|
iRight = xy.x + hb_parvni( 6, 4 );
|
|
|
|
if( _s->pGUI->hUserPens[ iSlot ] )
|
|
{
|
|
SelectObject( _s->hdc, _s->pGUI->hUserPens[ iSlot ] );
|
|
}
|
|
else
|
|
{
|
|
SelectObject( _s->hdc, _s->pGUI->penBlack );
|
|
}
|
|
|
|
hb_wvt_DrawOutline( _s->hdc, iTop, iLeft, iBottom, iRight );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
hb_wvt_DrawOutline( _s->hGuiDC, iTop, iLeft, iBottom, iRight );
|
|
}
|
|
#endif
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* 1 2 3 4 5 6 7 8 9 10 11
|
|
* WVT_DRAWLABELOBJ( nTop, nLeft, nBottom, nRight, cLabel, nAlignHorz, nAlignVert, nTextColor, nBkColor, hFont, aPxlOff )
|
|
*/
|
|
HB_FUNC( WVT_DRAWLABELOBJ )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
POINT xy = { 0, 0 };
|
|
RECT rect = { 0, 0, 0, 0 };
|
|
int iTop, iLeft, iBottom, iRight, x, y;
|
|
int iAlignHorz, iAlignVert, iAlignH, iAlignV;
|
|
UINT uiOptions;
|
|
SIZE sz = { 0, 0 };
|
|
void * hText;
|
|
LPCTSTR text = HB_PARSTR( 5, &hText, NULL );
|
|
COLORREF fgClr = hb_wvt_FgColorParam( 8 ),
|
|
bgClr = hb_wvt_BgColorParam( 9 );
|
|
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parni( 2 ), hb_parni( 1 ) );;
|
|
iTop = xy.y + hb_parvni( 11, 1 );
|
|
iLeft = xy.x + hb_parvni( 11, 2 );
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parni( 4 ) + 1, hb_parni( 3 ) + 1 );
|
|
iBottom = xy.y - 1 + hb_parvni( 11, 3 );
|
|
iRight = xy.x - 1 + hb_parvni( 11, 4 );
|
|
|
|
iAlignHorz = hb_parni( 6 ); /* default is 0 */
|
|
iAlignVert = hb_parni( 7 ); /* default is 0 */
|
|
|
|
SetTextColor( _s->hdc, fgClr );
|
|
SetBkColor( _s->hdc, bgClr );
|
|
SelectObject( _s->hdc, ( HFONT ) ( HB_PTRDIFF ) hb_parnint( 10 ) );
|
|
|
|
GetTextExtentPoint32( _s->hdc, text, lstrlen( text ), &sz );
|
|
|
|
x = iLeft;
|
|
y = iTop;
|
|
|
|
switch( iAlignHorz )
|
|
{
|
|
case 0:
|
|
iAlignH = TA_LEFT;
|
|
break;
|
|
|
|
case 1:
|
|
iAlignH = TA_RIGHT;
|
|
x = iRight;
|
|
break;
|
|
|
|
case 2:
|
|
iAlignH = TA_CENTER;
|
|
x = iLeft + ( ( iRight - iLeft + 1 ) / 2 );
|
|
break;
|
|
|
|
default:
|
|
iAlignH = 0;
|
|
}
|
|
|
|
iAlignV = TA_TOP;
|
|
|
|
switch( iAlignVert )
|
|
{
|
|
case 1:
|
|
y = iBottom - sz.cy;
|
|
break;
|
|
|
|
case 2:
|
|
y = iTop + ( ( iBottom - iTop + 1 - sz.cy ) / 2 );
|
|
break;
|
|
}
|
|
|
|
SetTextAlign( _s->hdc, iAlignH | iAlignV );
|
|
|
|
rect.top = iTop;
|
|
rect.left = iLeft;
|
|
rect.bottom = iBottom;
|
|
rect.right = iRight;
|
|
|
|
uiOptions = ETO_CLIPPED | ETO_OPAQUE;
|
|
|
|
ExtTextOut( _s->hdc, x, y, uiOptions, &rect, text, lstrlen( text ), NULL );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SetTextColor( _s->hGuiDC, fgClr );
|
|
SetBkColor( _s->hGuiDC, bgClr );
|
|
SelectObject( _s->hGuiDC, ( HFONT ) ( HB_PTRDIFF ) hb_parnint( 10 ) );
|
|
SetTextAlign( _s->hGuiDC, iAlignH | iAlignV );
|
|
|
|
ExtTextOut( _s->hGuiDC, x, y, uiOptions, &rect, text, lstrlen( text ), NULL );
|
|
}
|
|
#endif
|
|
hb_strfree( hText );
|
|
hb_retl( HB_TRUE );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* nState 0 Flat, 1 Raised, 2 Recessed
|
|
* Wvt_DrawToolButtonState( nTop, nLeft, nBottom, nRight, aPxlOff, nState )
|
|
*/
|
|
HB_FUNC( WVT_DRAWTOOLBUTTONSTATE )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iTop = ( _s->PTEXTSIZE.y * hb_parni( 1 ) ) + hb_parvni( 5, 1 );
|
|
int iLeft = ( _s->PTEXTSIZE.x * hb_parni( 2 ) ) + hb_parvni( 5, 2 );
|
|
int iBottom = ( _s->PTEXTSIZE.y * ( hb_parni( 3 ) + 1 ) ) - 1 + hb_parvni( 5, 3 );
|
|
int iRight = ( _s->PTEXTSIZE.x * ( hb_parni( 4 ) + 1 ) ) - 1 + hb_parvni( 5, 4 );
|
|
|
|
switch( hb_parni( 6 ) )
|
|
{
|
|
case 0: /* Flat */
|
|
hb_wvt_DrawToolButtonFlat( _s->hdc, iTop, iLeft, iBottom, iRight );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
hb_wvt_DrawToolButtonFlat( _s->hGuiDC, iTop, iLeft, iBottom, iRight );
|
|
}
|
|
#endif
|
|
break;
|
|
|
|
case 1: /* Raised */
|
|
hb_wvt_DrawToolButtonUp( _s->hdc, iTop, iLeft, iBottom, iRight );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
hb_wvt_DrawToolButtonUp( _s->hGuiDC, iTop, iLeft, iBottom, iRight );
|
|
}
|
|
#endif
|
|
break;
|
|
|
|
case 2: /* Recessed */
|
|
hb_wvt_DrawToolButtonDown( _s->hdc, iTop, iLeft, iBottom, iRight );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
hb_wvt_DrawToolButtonDown( _s->hGuiDC, iTop, iLeft, iBottom, iRight );
|
|
}
|
|
#endif
|
|
break;
|
|
}
|
|
hb_retl( HB_TRUE );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_DrawScrollButton( nTop, nLeft, nBottom, nRight, aPxlOff, nTLBR, lDepressed )
|
|
*/
|
|
HB_FUNC( WVT_DRAWSCROLLBUTTON )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iTop = ( _s->PTEXTSIZE.y * hb_parni( 1 ) ) + hb_parvni( 5, 1 );
|
|
int iLeft = ( _s->PTEXTSIZE.x * hb_parni( 2 ) ) + hb_parvni( 5, 2 );
|
|
int iBottom = ( _s->PTEXTSIZE.y * ( hb_parni( 3 ) + 1 ) ) - 1 + hb_parvni( 5, 3 );
|
|
int iRight = ( _s->PTEXTSIZE.x * ( hb_parni( 4 ) + 1 ) ) - 1 + hb_parvni( 5, 4 );
|
|
|
|
POINT * Point;
|
|
POINT xy = { 0, 0 };
|
|
int iHeight, iOff;
|
|
HB_BOOL bDepressed = hb_parl( 7 );
|
|
|
|
Point = ( POINT * ) hb_xgrab( 3 * sizeof( POINT ) );
|
|
iOff = 6;
|
|
|
|
iHeight = iBottom - iTop + 1;
|
|
|
|
if( bDepressed )
|
|
{
|
|
hb_wvt_DrawBoxRecessed( _s->hdc, iTop + 1, iLeft + 1, iBottom - 2, iRight - 2 );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
hb_wvt_DrawBoxRecessed( _s->hGuiDC, iTop + 1, iLeft + 1, iBottom - 2, iRight - 2 );
|
|
}
|
|
#endif
|
|
}
|
|
else
|
|
{
|
|
hb_wvt_DrawBoxRaised( _s->hdc, iTop + 1, iLeft + 1, iBottom - 2, iRight - 2 );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
hb_wvt_DrawBoxRaised( _s->hGuiDC, iTop + 1, iLeft + 1, iBottom - 2, iRight - 2 );
|
|
}
|
|
#endif
|
|
}
|
|
|
|
switch( hb_parni( 6 ) )
|
|
{
|
|
case 1: /* Top */
|
|
xy.y = iTop + iOff - 1;
|
|
xy.x = iLeft + ( ( iRight - iLeft + 1 ) / 2 );
|
|
Point[ 0 ] = xy;
|
|
xy.y = iBottom - iOff - 1;
|
|
xy.x = iLeft + iOff - 1;
|
|
Point[ 1 ] = xy;
|
|
xy.x = iRight - iOff + 1;
|
|
Point[ 2 ] = xy;
|
|
break;
|
|
|
|
case 2: /* Left */
|
|
xy.y = iTop + ( ( iBottom - iTop + 1 ) / 2 );
|
|
xy.x = iLeft + iOff;
|
|
Point[ 0 ] = xy;
|
|
xy.x = iRight - iOff - 1;
|
|
xy.y = iTop + iOff - 1;
|
|
Point[ 1 ] = xy;
|
|
xy.y = iBottom - iOff + 1;
|
|
Point[ 2 ] = xy;
|
|
break;
|
|
|
|
case 3: /* Bottom */
|
|
xy.x = iLeft + ( ( iRight - iLeft + 1 ) / 2 );
|
|
xy.y = iBottom - iOff;
|
|
Point[ 0 ] = xy;
|
|
xy.x = iLeft + iOff - 1;
|
|
xy.y = iBottom - iHeight + iOff + 1;
|
|
Point[ 1 ] = xy;
|
|
xy.x = iRight - iOff + 1;
|
|
Point[ 2 ] = xy;
|
|
break;
|
|
|
|
case 4: /* Right */
|
|
xy.x = iRight - iOff - 1;
|
|
xy.y = iTop + ( ( iBottom - iTop + 1 ) / 2 );
|
|
Point[ 0 ] = xy;
|
|
xy.x = iLeft + iOff + 1;
|
|
xy.y = iTop + iOff - 1;
|
|
Point[ 1 ] = xy;
|
|
xy.y = iBottom - iOff + 1;
|
|
Point[ 2 ] = xy;
|
|
break;
|
|
}
|
|
|
|
SelectObject( _s->hdc, _s->pGUI->solidBrush );
|
|
Polygon( _s->hdc, Point, 3 );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SelectObject( _s->hGuiDC, _s->pGUI->solidBrush );
|
|
Polygon( _s->hGuiDC, Point, 3 );
|
|
}
|
|
#endif
|
|
hb_xfree( Point );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_DrawScrollbarThumbVert( nTop, nLeft, nBottom, nRight, aPxlOff, nThumbPos )
|
|
*/
|
|
HB_FUNC( WVT_DRAWSCROLLTHUMBVERT )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iTop = ( _s->PTEXTSIZE.y * hb_parni( 1 ) ) + hb_parvni( 5, 1 );
|
|
int iLeft = ( _s->PTEXTSIZE.x * hb_parni( 2 ) ) + hb_parvni( 5, 2 );
|
|
int iBottom = ( _s->PTEXTSIZE.y * ( hb_parni( 3 ) + 1 ) ) - 1 + hb_parvni( 5, 3 );
|
|
int iRight = ( _s->PTEXTSIZE.x * ( hb_parni( 4 ) + 1 ) ) - 1 + hb_parvni( 5, 4 );
|
|
int iTabTop, iTabLft, iTabBtm, iTabRgt;
|
|
|
|
/* Background */
|
|
SetBkMode( _s->hdc, OPAQUE );
|
|
SetBkColor( _s->hdc, RGB( 230, 230, 230 ) );
|
|
SelectObject( _s->hdc, _s->pGUI->diagonalBrush );
|
|
SelectObject( _s->hdc, _s->pGUI->penNull );
|
|
Rectangle( _s->hdc, iLeft, iTop, iRight + 1, iBottom + 1 );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SetBkMode( _s->hGuiDC, OPAQUE );
|
|
SetBkColor( _s->hGuiDC, RGB( 230, 230, 230 ) );
|
|
SelectObject( _s->hGuiDC, _s->pGUI->diagonalBrush );
|
|
SelectObject( _s->hGuiDC, _s->pGUI->penNull );
|
|
Rectangle( _s->hGuiDC, iLeft, iTop, iRight + 1, iBottom + 1 );
|
|
}
|
|
#endif
|
|
/* Thumb */
|
|
iTabTop = _s->PTEXTSIZE.y * hb_parni( 6 );
|
|
iTabLft = iLeft;
|
|
iTabBtm = iTabTop + _s->PTEXTSIZE.y - 1;
|
|
iTabRgt = iRight;
|
|
|
|
SelectObject( _s->hdc, _s->pGUI->whiteBrush );
|
|
SelectObject( _s->hdc, _s->pGUI->penGray );
|
|
Rectangle( _s->hdc, iTabLft, iTabTop, iTabRgt + 1, iTabBtm );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SelectObject( _s->hGuiDC, _s->pGUI->whiteBrush );
|
|
SelectObject( _s->hGuiDC, _s->pGUI->penGray );
|
|
Rectangle( _s->hGuiDC, iTabLft, iTabTop, iTabRgt + 1, iTabBtm );
|
|
}
|
|
#endif
|
|
hb_wvt_DrawBoxRaised( _s->hdc, iTabTop + 1, iTabLft + 1, iTabBtm - 2, iTabRgt - 2 );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
hb_wvt_DrawBoxRaised( _s->hGuiDC, iTabTop + 1, iTabLft + 1, iTabBtm - 2, iTabRgt - 2 );
|
|
}
|
|
#endif
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_DrawScrollbarThumbHorz( nTop, nLeft, nBottom, nRight, aPxlOff, nThumbPos )
|
|
*/
|
|
HB_FUNC( WVT_DRAWSCROLLTHUMBHORZ )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iTop = ( _s->PTEXTSIZE.y * hb_parni( 1 ) ) + hb_parvni( 5, 1 );
|
|
int iLeft = ( _s->PTEXTSIZE.x * hb_parni( 2 ) ) + hb_parvni( 5, 2 );
|
|
int iBottom = ( _s->PTEXTSIZE.y * ( hb_parni( 3 ) + 1 ) ) - 1 + hb_parvni( 5, 3 );
|
|
int iRight = ( _s->PTEXTSIZE.x * ( hb_parni( 4 ) + 1 ) ) - 1 + hb_parvni( 5, 4 );
|
|
int iThumbLeft, iThumbRight;
|
|
|
|
iThumbLeft = _s->PTEXTSIZE.x * hb_parni( 6 );
|
|
iThumbRight = iThumbLeft + ( _s->PTEXTSIZE.x * 2 ) - 1;
|
|
|
|
/* Background */
|
|
SetBkMode( _s->hdc, OPAQUE );
|
|
SetBkColor( _s->hdc, RGB( 230, 230, 230 ) );
|
|
SelectObject( _s->hdc, _s->pGUI->diagonalBrush );
|
|
SelectObject( _s->hdc, _s->pGUI->penNull );
|
|
Rectangle( _s->hdc, iLeft, iTop, iRight + 1, iBottom + 1 );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SetBkMode( _s->hGuiDC, OPAQUE );
|
|
SetBkColor( _s->hGuiDC, RGB( 230, 230, 230 ) );
|
|
SelectObject( _s->hGuiDC, _s->pGUI->diagonalBrush );
|
|
SelectObject( _s->hGuiDC, _s->pGUI->penNull );
|
|
Rectangle( _s->hGuiDC, iLeft, iTop, iRight + 1, iBottom + 1 );
|
|
}
|
|
#endif
|
|
/* Thumb */
|
|
SelectObject( _s->hdc, _s->pGUI->whiteBrush );
|
|
SelectObject( _s->hdc, _s->pGUI->penGray );
|
|
Rectangle( _s->hdc, iThumbLeft, iTop, iThumbRight, iBottom );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SelectObject( _s->hGuiDC, _s->pGUI->whiteBrush );
|
|
SelectObject( _s->hGuiDC, _s->pGUI->penGray );
|
|
Rectangle( _s->hGuiDC, iThumbLeft, iTop, iThumbRight, iBottom );
|
|
}
|
|
#endif
|
|
hb_wvt_DrawBoxRaised( _s->hdc, iTop + 1, iThumbLeft + 1, iBottom - 2, iThumbRight - 2 );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
hb_wvt_DrawBoxRaised( _s->hGuiDC, iTop + 1, iThumbLeft + 1, iBottom - 2, iThumbRight - 2 );
|
|
}
|
|
#endif
|
|
}
|
|
|
|
/* #if WINVER > 0x500 */
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_DrawShadedRect( nTop, nLeft, nBottom, nRight, aPxlOff, nHorVert, aRGBb, aRGBe )
|
|
*/
|
|
HB_FUNC( WVT_DRAWSHADEDRECT )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
HB_BOOL bGF = HB_FALSE;
|
|
|
|
if( _s->pGUI->hMSImg32 )
|
|
{
|
|
TRIVERTEX vert[ 2 ];
|
|
GRADIENT_RECT gRect = { 0, 0 };
|
|
|
|
int iTop = ( _s->PTEXTSIZE.y * hb_parni( 1 ) ) + hb_parvni( 5, 1 );
|
|
int iLeft = ( _s->PTEXTSIZE.x * hb_parni( 2 ) ) + hb_parvni( 5, 2 );
|
|
int iBottom = ( _s->PTEXTSIZE.y * ( hb_parni( 3 ) + 1 ) ) - 1 + hb_parvni( 5, 3 );
|
|
int iRight = ( _s->PTEXTSIZE.x * ( hb_parni( 4 ) + 1 ) ) - 1 + hb_parvni( 5, 4 );
|
|
|
|
int iMode = hb_parnidef( 6, GRADIENT_FILL_RECT_H );
|
|
|
|
vert[ 0 ].x = iLeft;
|
|
vert[ 0 ].y = iTop;
|
|
vert[ 0 ].Red = ( COLOR16 ) hb_parvni( 7, 1 );
|
|
vert[ 0 ].Green = ( COLOR16 ) hb_parvni( 7, 2 );
|
|
vert[ 0 ].Blue = ( COLOR16 ) hb_parvni( 7, 3 );
|
|
vert[ 0 ].Alpha = ( COLOR16 ) hb_parvni( 7, 4 );
|
|
|
|
vert[ 1 ].x = iRight;
|
|
vert[ 1 ].y = iBottom;
|
|
vert[ 1 ].Red = ( COLOR16 ) hb_parvni( 8, 1 );
|
|
vert[ 1 ].Green = ( COLOR16 ) hb_parvni( 8, 2 );
|
|
vert[ 1 ].Blue = ( COLOR16 ) hb_parvni( 8, 3 );
|
|
vert[ 1 ].Alpha = ( COLOR16 ) hb_parvni( 8, 4 );
|
|
|
|
gRect.UpperLeft = 0;
|
|
gRect.LowerRight = 1;
|
|
|
|
bGF = ( HB_BOOL ) _s->pGUI->pfnGF( _s->hdc, vert, 2, &gRect, 1, iMode );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
bGF = ( HB_BOOL ) _s->pGUI->pfnGF( _s->hGuiDC, vert, 2, &gRect, 1, iMode );
|
|
}
|
|
#endif
|
|
}
|
|
hb_retl( bGF );
|
|
}
|
|
/*#endif*/
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_DrawTextBox( nTop, nLeft, nBottom, nRight, aPxlOff, cText, ;
|
|
* nAlignHorz, nAlignVert, nTextColor, nBackColor, ;
|
|
* nBackMode, hFont )
|
|
*/
|
|
HB_FUNC( WVT_DRAWTEXTBOX )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iTop = ( _s->PTEXTSIZE.y * hb_parni( 1 ) ) + hb_parvni( 5, 1 );
|
|
int iLeft = ( _s->PTEXTSIZE.x * hb_parni( 2 ) ) + hb_parvni( 5, 2 );
|
|
int iBottom = ( _s->PTEXTSIZE.y * ( hb_parni( 3 ) + 1 ) ) - 1 + hb_parvni( 5, 3 );
|
|
int iRight = ( _s->PTEXTSIZE.x * ( hb_parni( 4 ) + 1 ) ) - 1 + hb_parvni( 5, 4 );
|
|
|
|
int iAlignHorz = hb_parni( 7 ); /* default to 0 */
|
|
int iAlignH = 0;
|
|
|
|
RECT rc = { 0, 0, 0, 0 };
|
|
void * hText;
|
|
LPCTSTR text = HB_PARSTR( 6, &hText, NULL );
|
|
COLORREF fgClr = hb_wvt_FgColorParam( 9 ),
|
|
bgClr = hb_wvt_BgColorParam( 10 );
|
|
|
|
switch( iAlignHorz )
|
|
{
|
|
case 0:
|
|
iAlignH = DT_LEFT;
|
|
break;
|
|
|
|
case 1:
|
|
iAlignH = DT_RIGHT;
|
|
break;
|
|
|
|
case 2:
|
|
iAlignH = DT_CENTER;
|
|
break;
|
|
}
|
|
|
|
rc.top = iTop;
|
|
rc.left = iLeft;
|
|
rc.bottom = iBottom;
|
|
rc.right = iRight;
|
|
|
|
SetTextAlign( _s->hdc, TA_TOP | TA_LEFT | TA_NOUPDATECP );
|
|
SetTextColor( _s->hdc, fgClr );
|
|
SetBkColor( _s->hdc, bgClr );
|
|
SetBkMode( _s->hdc, hb_parnidef( 11, OPAQUE ) );
|
|
SelectObject( _s->hdc, ( HFONT ) ( HB_PTRDIFF ) hb_parnint( 12 ) );
|
|
|
|
DrawText( _s->hdc, text, lstrlen( text ), &rc, iAlignH | DT_WORDBREAK | DT_TOP );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
SetTextAlign( _s->hGuiDC, TA_TOP | TA_LEFT | TA_NOUPDATECP );
|
|
SetTextColor( _s->hGuiDC, fgClr );
|
|
SetBkColor( _s->hGuiDC, bgClr );
|
|
SetBkMode( _s->hGuiDC, hb_parnidef( 11, OPAQUE ) );
|
|
SelectObject( _s->hGuiDC, ( HFONT ) ( HB_PTRDIFF ) hb_parnint( 12 ) );
|
|
|
|
DrawText( _s->hGuiDC, text, lstrlen( text ), &rc, iAlignH | DT_WORDBREAK | DT_TOP );
|
|
}
|
|
#endif
|
|
hb_strfree( hText );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_DrawProgressBar( nTop, nLeft, nBottom, nRight, aPxlOff, nPercent,;
|
|
* nBackColor, nBarColor, cImage, lVertical, nDirection )
|
|
*/
|
|
HB_FUNC( WVT_DRAWPROGRESSBAR )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iTop = ( _s->PTEXTSIZE.y * hb_parni( 1 ) ) + hb_parvni( 5, 1 );
|
|
int iLeft = ( _s->PTEXTSIZE.x * hb_parni( 2 ) ) + hb_parvni( 5, 2 );
|
|
int iBottom = ( _s->PTEXTSIZE.y * ( hb_parni( 3 ) + 1 ) ) - 1 + hb_parvni( 5, 3 );
|
|
int iRight = ( _s->PTEXTSIZE.x * ( hb_parni( 4 ) + 1 ) ) - 1 + hb_parvni( 5, 4 );
|
|
int iPercent, iBarUpto, iDirection;
|
|
HB_BOOL bVertical, bImage;
|
|
COLORREF crBarColor;
|
|
HBRUSH hBrush;
|
|
LOGBRUSH lb = { 0, 0, 0 };
|
|
RECT rc = { 0, 0, 0, 0 };
|
|
|
|
iPercent = hb_parni( 6 );
|
|
bImage = HB_ISCHAR( 9 );
|
|
bVertical = hb_parl( 10 );
|
|
iDirection = hb_parni( 11 );
|
|
|
|
if( bVertical )
|
|
{
|
|
if( iDirection == 0 )
|
|
{
|
|
iBarUpto = iTop + ( ( iBottom - iTop ) * iPercent / 100 );
|
|
rc.top = iTop;
|
|
rc.left = iLeft;
|
|
rc.bottom = iBarUpto;
|
|
rc.right = iRight;
|
|
}
|
|
else
|
|
{
|
|
iBarUpto = iBottom - ( ( iBottom - iTop ) * iPercent / 100 );
|
|
rc.top = iBarUpto;
|
|
rc.left = iLeft;
|
|
rc.bottom = iBottom;
|
|
rc.right = iRight;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if( iDirection == 0 )
|
|
{
|
|
iBarUpto = iLeft + ( ( iRight - iLeft ) * iPercent / 100 );
|
|
rc.top = iTop;
|
|
rc.left = iLeft;
|
|
rc.bottom = iBottom;
|
|
rc.right = iBarUpto;
|
|
}
|
|
else
|
|
{
|
|
iBarUpto = iRight - ( ( iRight - iLeft ) * iPercent / 100 );
|
|
rc.top = iTop;
|
|
rc.left = iBarUpto;
|
|
rc.bottom = iBottom;
|
|
rc.right = iRight;
|
|
}
|
|
}
|
|
|
|
if( bImage )
|
|
{
|
|
void * hImage;
|
|
hb_wvt_DrawImage( _s->hdc, rc.left, rc.top, rc.right - rc.left + 1, rc.bottom - rc.top + 1, HB_PARSTR( 9, &hImage, NULL ) );
|
|
hb_strfree( hImage );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
hb_wvt_DrawImage( _s->hGuiDC, rc.left, rc.top, rc.right - rc.left + 1, rc.bottom - rc.top + 1, HB_PARSTR( 9, &hImage, NULL ) );
|
|
hb_strfree( hImage );
|
|
}
|
|
#endif
|
|
}
|
|
else
|
|
{
|
|
crBarColor = ( COLORREF ) hb_parnldef( 8, _s->COLORS[ 0 ] );
|
|
|
|
lb.lbStyle = BS_SOLID;
|
|
lb.lbColor = crBarColor;
|
|
lb.lbHatch = 0;
|
|
#if ! defined( HB_OS_WIN_CE )
|
|
hBrush = CreateBrushIndirect( &lb );
|
|
#else
|
|
hBrush = CreateSolidBrush( lb.lbColor );
|
|
#endif
|
|
rc.bottom++;
|
|
rc.right++;
|
|
|
|
FillRect( _s->hdc, &rc, hBrush );
|
|
#if defined( __SETGUI__ )
|
|
if( _s->bGui )
|
|
{
|
|
FillRect( _s->hGuiDC, &rc, hBrush );
|
|
}
|
|
#endif
|
|
DeleteObject( hBrush );
|
|
}
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_CreateFont( cFontFace, nHeight, nWidth, nWeight, lItalic, lUnderline,
|
|
* lStrikeout, nCharSet, nQuality, nEscapement )
|
|
*/
|
|
HB_FUNC( WVT_CREATEFONT )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
LOGFONT logfont; /* = { 0,0,0 }; */
|
|
void * hText = NULL;
|
|
|
|
logfont.lfEscapement = hb_parni( 10 ) * 10;
|
|
logfont.lfOrientation = 0;
|
|
logfont.lfWeight = ( hb_parni( 4 ) );
|
|
logfont.lfItalic = ( BYTE ) hb_parl( 5 );
|
|
logfont.lfUnderline = ( BYTE ) hb_parl( 6 );
|
|
logfont.lfStrikeOut = ( BYTE ) hb_parl( 7 );
|
|
logfont.lfCharSet = ( BYTE ) hb_parnidef( 8, _s->CodePage );
|
|
logfont.lfOutPrecision = 0;
|
|
logfont.lfClipPrecision = 0;
|
|
logfont.lfQuality = ( BYTE ) hb_parnidef( 9, DEFAULT_QUALITY );
|
|
logfont.lfPitchAndFamily = FF_DONTCARE;
|
|
logfont.lfHeight = hb_parnidef( 2, _s->fontHeight );
|
|
logfont.lfWidth = hb_parnidef( 3, _s->fontWidth < 0 ? -_s->fontWidth : _s->fontWidth );
|
|
|
|
HB_STRNCPY( logfont.lfFaceName, ( ! HB_ISCHAR( 1 ) ? _s->fontFace : HB_PARSTR( 1, &hText, NULL ) ), HB_SIZEOFARRAY( logfont.lfFaceName ) - 1 );
|
|
hb_strfree( hText );
|
|
|
|
hb_retnint( ( HB_PTRDIFF ) CreateFontIndirect( &logfont ) );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_LoadPicture( nSlot, cFilePic )
|
|
*/
|
|
HB_FUNC( WVT_LOADPICTURE )
|
|
{
|
|
HB_BOOL bResult = HB_FALSE;
|
|
|
|
#if ! defined( HB_OS_WIN_CE )
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
void * hImage;
|
|
IPicture * iPicture = hb_wvt_gtLoadPicture( HB_PARSTR( 2, &hImage, NULL ) );
|
|
int iSlot = hb_parni( 1 ) - 1;
|
|
|
|
hb_strfree( hImage );
|
|
if( iPicture )
|
|
{
|
|
if( _s->pGUI->iPicture[ iSlot ] )
|
|
hb_wvt_gtDestroyPicture( _s->pGUI->iPicture[ iSlot ] );
|
|
_s->pGUI->iPicture[ iSlot ] = iPicture;
|
|
bResult = HB_TRUE;
|
|
}
|
|
#endif
|
|
hb_retl( bResult );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
HB_FUNC( WVT_LOADPICTUREFROMRESOURCE )
|
|
{
|
|
HB_BOOL bResult = HB_FALSE;
|
|
|
|
#if ! defined( HB_OS_WIN_CE )
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
void * hResource;
|
|
void * hSection;
|
|
IPicture * iPicture = hb_wvt_gtLoadPictureFromResource( HB_PARSTR( 2, &hResource, NULL ), HB_PARSTR( 3, &hSection, NULL ) );
|
|
int iSlot = hb_parni( 1 ) - 1;
|
|
|
|
hb_strfree( hResource );
|
|
hb_strfree( hSection );
|
|
if( iPicture )
|
|
{
|
|
if( _s->pGUI->iPicture[ iSlot ] )
|
|
hb_wvt_gtDestroyPicture( _s->pGUI->iPicture[ iSlot ] );
|
|
_s->pGUI->iPicture[ iSlot ] = iPicture;
|
|
bResult = HB_TRUE;
|
|
}
|
|
#endif
|
|
hb_retl( bResult );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_LoadFont( nSlotFont, cFontFace, nHeight, nWidth, nWeight, lItalic, lUnderline, lStrikeout,
|
|
* nCharSet, nQuality, nEscapement )
|
|
*/
|
|
HB_FUNC( WVT_LOADFONT )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
LOGFONT logfont; /* = { 0 }; */
|
|
int iSlot = hb_parni( 1 ) - 1;
|
|
HFONT hFont;
|
|
void * hF = NULL;
|
|
|
|
logfont.lfEscapement = hb_parni( 11 ) * 10;
|
|
logfont.lfOrientation = 0;
|
|
logfont.lfWeight = hb_parni( 5 );
|
|
logfont.lfItalic = ( BYTE ) hb_parl( 6 );
|
|
logfont.lfUnderline = ( BYTE ) hb_parl( 7 );
|
|
logfont.lfStrikeOut = ( BYTE ) hb_parl( 8 );
|
|
logfont.lfCharSet = ( BYTE ) hb_parnidef( 9, _s->CodePage );
|
|
logfont.lfOutPrecision = 0;
|
|
logfont.lfClipPrecision = 0;
|
|
logfont.lfQuality = ( BYTE ) hb_parnidef( 10, DEFAULT_QUALITY );
|
|
logfont.lfPitchAndFamily = FF_DONTCARE;
|
|
logfont.lfHeight = hb_parnidef( 3, _s->fontHeight );
|
|
logfont.lfWidth = hb_parnidef( 4, _s->fontWidth < 0 ? -_s->fontWidth : _s->fontWidth );
|
|
|
|
HB_STRNCPY( logfont.lfFaceName, ( HB_ISCHAR( 2 ) ? HB_PARSTR( 2, &hF, NULL ) : _s->fontFace ), HB_SIZEOFARRAY( logfont.lfFaceName ) - 1 );
|
|
hb_strfree( hF );
|
|
|
|
hFont = CreateFontIndirect( &logfont );
|
|
if( hFont )
|
|
{
|
|
if( _s->pGUI->hUserFonts[ iSlot ] )
|
|
{
|
|
DeleteObject( _s->pGUI->hUserFonts[ iSlot ] );
|
|
}
|
|
_s->pGUI->hUserFonts[ iSlot ] = hFont;
|
|
}
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_LoadPen( nSlot, nStyle, nWidth, nRGBColor )
|
|
*/
|
|
HB_FUNC( WVT_LOADPEN )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
int iPenWidth, iPenStyle;
|
|
COLORREF crColor;
|
|
HPEN hPen;
|
|
int iSlot = hb_parni( 1 ) - 1;
|
|
|
|
iPenStyle = hb_parni( 2 );
|
|
iPenWidth = hb_parni( 3 );
|
|
crColor = ( COLORREF ) hb_parnldef( 4, RGB( 0, 0, 0 ) );
|
|
|
|
hPen = CreatePen( iPenStyle, iPenWidth, crColor );
|
|
|
|
if( hPen )
|
|
{
|
|
if( _s->pGUI->hUserPens[ iSlot ] )
|
|
{
|
|
DeleteObject( _s->pGUI->hUserPens[ iSlot ] );
|
|
}
|
|
_s->pGUI->hUserPens[ iSlot ] = hPen;
|
|
|
|
hb_retl( HB_TRUE );
|
|
}
|
|
else
|
|
{
|
|
hb_retl( HB_FALSE );
|
|
}
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* aScr := Wvt_SaveScreen( nTop, nLeft, nBottom, nRight )
|
|
*/
|
|
HB_FUNC( WVT_SAVESCREEN )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
HDC hCompDC;
|
|
HBITMAP hBmp, oldBmp;
|
|
POINT xy = { 0, 0 };
|
|
int iTop, iLeft, iBottom, iRight, iWidth, iHeight;
|
|
PHB_ITEM info = hb_itemArrayNew( 3 );
|
|
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parni( 2 ), hb_parni( 1 ) );
|
|
iTop = xy.y;
|
|
iLeft = xy.x;
|
|
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parni( 4 ) + 1, hb_parni( 3 ) + 1 );
|
|
iBottom = xy.y - 1;
|
|
iRight = xy.x - 1;
|
|
|
|
iWidth = iRight - iLeft + 1;
|
|
iHeight = iBottom - iTop + 1;
|
|
|
|
hBmp = CreateCompatibleBitmap( _s->hdc, iWidth, iHeight );
|
|
|
|
hCompDC = CreateCompatibleDC( _s->hdc );
|
|
oldBmp = ( HBITMAP ) SelectObject( hCompDC, hBmp );
|
|
BitBlt( hCompDC, 0, 0, iWidth, iHeight, _s->hdc, iLeft, iTop, SRCCOPY );
|
|
SelectObject( hCompDC, oldBmp );
|
|
DeleteDC( hCompDC );
|
|
|
|
hb_arraySetNI( info, 1, iWidth );
|
|
hb_arraySetNI( info, 2, iHeight );
|
|
hb_arraySetNInt( info, 3, ( HB_PTRDIFF ) hBmp );
|
|
|
|
hb_itemReturnRelease( info );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* Wvt_RestScreen( nTop, nLeft, nBottom, nRight, aScr, lDoNotDestroyBMP )
|
|
*/
|
|
HB_FUNC( WVT_RESTSCREEN )
|
|
{
|
|
PHB_GTWVT _s = hb_wvt_gtGetWVT();
|
|
|
|
POINT xy = { 0, 0 };
|
|
int iTop, iLeft, iBottom, iRight, iWidth, iHeight;
|
|
HBITMAP hBmp;
|
|
HDC hCompDC;
|
|
|
|
HB_BOOL bResult = HB_FALSE;
|
|
HB_BOOL bDoNotDestroyBMP = hb_parl( 6 );
|
|
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parni( 2 ), hb_parni( 1 ) );;
|
|
iTop = xy.y;
|
|
iLeft = xy.x;
|
|
|
|
xy = hb_wvt_gtGetXYFromColRow( hb_parni( 4 ) + 1, hb_parni( 3 ) + 1 );
|
|
iBottom = xy.y - 1;
|
|
iRight = xy.x - 1;
|
|
|
|
iWidth = iRight - iLeft + 1;
|
|
iHeight = iBottom - iTop + 1;
|
|
|
|
hCompDC = CreateCompatibleDC( _s->hdc );
|
|
hBmp = ( HBITMAP ) SelectObject( hCompDC, ( HBITMAP ) ( HB_PTRDIFF ) hb_parvnint( 5, 3 ) );
|
|
if( hBmp )
|
|
{
|
|
if( ( iWidth == hb_parvni( 5, 1 ) ) && ( iHeight == hb_parvni( 5, 2 ) ) )
|
|
{
|
|
if( BitBlt( _s->hdc,
|
|
iLeft, iTop, iWidth, iHeight,
|
|
hCompDC,
|
|
0, 0,
|
|
SRCCOPY ) )
|
|
{
|
|
bResult = HB_TRUE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if( StretchBlt( _s->hdc,
|
|
iLeft, iTop, iWidth, iHeight,
|
|
hCompDC,
|
|
0, 0,
|
|
hb_parvni( 5, 1 ),
|
|
hb_parvni( 5, 2 ),
|
|
SRCCOPY ) )
|
|
{
|
|
bResult = HB_TRUE;
|
|
}
|
|
}
|
|
}
|
|
DeleteDC( hCompDC );
|
|
|
|
if( ! bDoNotDestroyBMP )
|
|
{
|
|
SelectObject( hCompDC, hBmp );
|
|
DeleteObject( ( HBITMAP ) ( HB_PTRDIFF ) hb_parvnint( 5, 3 ) );
|
|
}
|
|
hb_retl( bResult );
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|