Files
harbour-core/contrib/gtwvw/wvwdraw.c
Viktor Szakats 8340825fd5 2017-09-13 21:33 UTC Viktor Szakats (vszakats users.noreply.github.com)
* bin/check.hb
  * contrib/gtwvw/*
    * sync some text with the 3.4 fork
2017-09-13 21:34:26 +00:00

2606 lines
87 KiB
C

/*
* Video subsystem for Windows using GUI windows instead of Console
* with multiple windows support
* Copyright 2004 Budyanto Dj. <budyanto@centrin.net.id>
* GTWVW draw functions
* GTWVW is initially created based on:
* =Id: gtwvt.c,v 1.60 2004-01-26 08:14:07 vouchcac Exp =
*
* 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 program; see the file LICENSE.txt. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA (or visit https://www.gnu.org/licenses/).
*
* 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.
*
*/
#include "hbgtwvw.h"
static COLORREF _COLORS[] = {
BLACK,
BLUE,
GREEN,
CYAN,
RED,
MAGENTA,
BROWN,
WHITE,
LIGHT_GRAY,
BRIGHT_BLUE,
BRIGHT_GREEN,
BRIGHT_CYAN,
BRIGHT_RED,
BRIGHT_MAGENTA,
YELLOW,
BRIGHT_WHITE
};
/*
*
* wvw_DrawLabelObj( [nWinNum], nTop, nLeft, nBottom, nRight, cLabel, nAlignHorz, nAlignVert, nTextColor, nBkColor, hFont,
* aOffset )
*/
HB_FUNC( WVW_DRAWLABELOBJ )
{
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
POINT xy = { 0 };
int iTop, iLeft, iBottom, iRight, x, y;
int iOffTop, iOffLeft, iOffBottom, iOffRight;
RECT rect = { 0 };
HFONT oldFont;
int oldTextAlign, iAlignHorz, iAlignVert, iAlignH = 0, iAlignV;
COLORREF oldBkColor, oldTextColor;
UINT uiOptions;
SIZE sz = { 0 };
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
iOffTop = ! HB_ISNIL( 12 ) ? hb_parvni( 12, 1 ) : 0;
iOffLeft = ! HB_ISNIL( 12 ) ? hb_parvni( 12, 2 ) : 0;
iOffBottom = ! HB_ISNIL( 12 ) ? hb_parvni( 12, 3 ) : 0;
iOffRight = ! HB_ISNIL( 12 ) ? hb_parvni( 12, 4 ) : 0;
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y + iOffTop;
iLeft = xy.x + iOffLeft;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
iBottom = xy.y - 1 + 1 + iOffBottom;
iRight = xy.x - 1 + 1 + iOffRight;
iAlignHorz = HB_ISNIL( 7 ) ? 0 : hb_parni( 7 );
iAlignVert = HB_ISNIL( 8 ) ? 0 : hb_parni( 8 );
oldTextColor = SetTextColor( pWindowData->hdc, HB_ISNIL( 9 ) ? pWindowData->foreground : ( COLORREF ) hb_parnl( 9 ) );
oldBkColor = SetBkColor( pWindowData->hdc, HB_ISNIL( 10 ) ? pWindowData->background : ( COLORREF ) hb_parnl( 10 ) );
oldFont = ( HFONT ) SelectObject( pWindowData->hdc, ( HFONT ) HB_PARHANDLE( 11 ) );
GetTextExtentPoint32( pWindowData->hdc, hb_parcx( 6 ), strlen( hb_parcx( 6 ) ), &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;
}
iAlignV = TA_TOP;
switch( iAlignVert )
{
case 1:
y = iBottom - sz.cy;
break;
case 2:
y = iTop + ( ( iBottom - iTop + 1 - sz.cy ) / 2 );
break;
}
oldTextAlign = SetTextAlign( pWindowData->hdc, iAlignH | iAlignV );
rect.top = iTop;
rect.left = iLeft;
rect.bottom = iBottom;
rect.right = iRight;
uiOptions = ETO_CLIPPED | ETO_OPAQUE;
ExtTextOut( pWindowData->hdc, x, y, uiOptions, &rect, hb_parcx( 6 ), strlen( hb_parcx( 6 ) ), NULL );
SelectObject( pWindowData->hdc, oldFont );
SetTextAlign( pWindowData->hdc, oldTextAlign );
SetBkColor( pWindowData->hdc, oldBkColor );
SetTextColor( pWindowData->hdc, oldTextColor );
hb_retl( TRUE );
}
/* */
/* wvw_DrawToolButtonState( [nWinNum], nTop, nLeft, nBottom, nRight, aPxlOff, nState )*/
/* */
HB_FUNC( WVW_DRAWTOOLBUTTONSTATE )
{
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
POINT xy = { 0 };
int iTop, iLeft, iBottom, iRight;
int iState = hb_parni( 7 );
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y + hb_parvni( 6, 1 );
iLeft = xy.x + hb_parvni( 6, 2 );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
iBottom = xy.y - 1 + hb_parvni( 6, 3 );
iRight = xy.x - 1 + hb_parvni( 6, 4 );
switch( iState )
{
case 0:
SelectObject( pWindowData->hdc, s_sApp->penGray );
MoveToEx( pWindowData->hdc, iRight, iTop, NULL ); /* Right */
LineTo( pWindowData->hdc, iRight, iBottom + 1 );
MoveToEx( pWindowData->hdc, iLeft, iBottom, NULL ); /* Bottom */
LineTo( pWindowData->hdc, iRight, iBottom );
MoveToEx( pWindowData->hdc, iLeft, iTop, NULL ); /* Left */
LineTo( pWindowData->hdc, iLeft, iBottom );
MoveToEx( pWindowData->hdc, iLeft, iTop, NULL ); /* Top */
LineTo( pWindowData->hdc, iRight, iTop );
break;
case 1:
SelectObject( pWindowData->hdc, s_sApp->penBlack );
MoveToEx( pWindowData->hdc, iRight, iTop, NULL ); /* Right */
LineTo( pWindowData->hdc, iRight, iBottom + 1 );
MoveToEx( pWindowData->hdc, iLeft, iBottom, NULL ); /* Bottom */
LineTo( pWindowData->hdc, iRight, iBottom );
SelectObject( pWindowData->hdc, s_sApp->penWhite );
MoveToEx( pWindowData->hdc, iLeft, iTop, NULL ); /* Left */
LineTo( pWindowData->hdc, iLeft, iBottom );
MoveToEx( pWindowData->hdc, iLeft, iTop, NULL ); /* Top */
LineTo( pWindowData->hdc, iRight, iTop );
break;
case 2:
SelectObject( pWindowData->hdc, s_sApp->penWhite );
MoveToEx( pWindowData->hdc, iRight, iTop, NULL ); /* Right */
LineTo( pWindowData->hdc, iRight, iBottom + 1 );
MoveToEx( pWindowData->hdc, iLeft, iBottom, NULL ); /* Bottom */
LineTo( pWindowData->hdc, iRight, iBottom );
SelectObject( pWindowData->hdc, s_sApp->penBlack );
MoveToEx( pWindowData->hdc, iLeft, iTop, NULL ); /* Left */
LineTo( pWindowData->hdc, iLeft, iBottom );
MoveToEx( pWindowData->hdc, iLeft, iTop, NULL ); /* Top */
LineTo( pWindowData->hdc, iRight, iTop );
break;
}
hb_retl( TRUE );
}
/* */
/* wvw_DrawScrollButton( [nWinNum], nTop, nLeft, nBottom, nRight, aOffPixels, nTLBR, lDepressed )*/
/* */
/* NOTE: with WVW_XB (scrollbar) this function does not seem to be usefull */
HB_FUNC( WVW_DRAWSCROLLBUTTON )
{
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
int iTop, iLeft, iBottom, iRight;
POINT * Point;
POINT xy = { 0 };
int iHeight, iOff;
BOOL bDepressed = HB_ISNIL( 8 ) ? FALSE : hb_parl( 8 );
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y + hb_parvni( 6, 1 );
iLeft = xy.x + hb_parvni( 6, 2 );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
iBottom = xy.y - 1 + hb_parvni( 6, 3 );
iRight = xy.x - 1 + hb_parvni( 6, 4 );
Point = ( POINT * ) hb_xgrab( 3 * sizeof( POINT ) );
iOff = 6;
iHeight = iBottom - iTop + 1;
if( bDepressed )
hb_gt_wvwDrawBoxRecessed( usWinNum, iTop + 1, iLeft + 1, iBottom - 2, iRight - 2, FALSE );
else
hb_gt_wvwDrawBoxRaised( usWinNum, iTop + 1, iLeft + 1, iBottom - 2, iRight - 2, FALSE );
SelectObject( pWindowData->hdc, s_sApp->solidBrush );
switch( hb_parni( 7 ) )
{
case 1:
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:
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:
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:
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;
}
Polygon( pWindowData->hdc, Point, 3 );
hb_xfree( Point );
}
/* */
/* Wvw_DrawScrollbarThumbVert( [nWinNum], nTop, nLeft, nBottom, nRight, aPxlScroll, nThumbPos )*/
/* */
/* NOTE: with WVW_XB (scrollbar) this function does not seem to be usefull */
HB_FUNC( WVW_DRAWSCROLLTHUMBVERT )
{
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
POINT xy = { 0 };
int iTop, iLeft, iBottom, iRight;
int iTabTop, iTabLft, iTabBtm, iTabRgt;
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
USHORT usTabTop = ( USHORT ) hb_parni( 7 );
if( hb_gt_wvw_GetMainCoordMode() )
{
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
hb_wvw_HBFUNCPrologue( usWinNum, &usTabTop, NULL, NULL, NULL );
}
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y + hb_parvni( 6, 1 );
iLeft = xy.x + hb_parvni( 6, 2 );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
iBottom = xy.y - 1 + hb_parvni( 6, 3 );
iRight = xy.x - 1 + hb_parvni( 6, 4 );
SetBkColor( pWindowData->hdc, RGB( 230, 230, 230 ) );
SelectObject( pWindowData->hdc, s_sApp->diagonalBrush );
SelectObject( pWindowData->hdc, s_sApp->penNull );
Rectangle( pWindowData->hdc, iLeft, iTop, iRight + 1, iBottom + 1 );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft /* dummy */, usTabTop );
iTabTop = xy.y;
iTabLft = iLeft;
iTabBtm = iTabTop + pWindowData->PTEXTSIZE.y - 1;
iTabRgt = iRight;
SelectObject( pWindowData->hdc, s_sApp->wvwWhiteBrush );
SelectObject( pWindowData->hdc, s_sApp->penGray );
Rectangle( pWindowData->hdc, iTabLft, iTabTop, iTabRgt + 1, iTabBtm );
hb_gt_wvwDrawBoxRaised( usWinNum, iTabTop + 1, iTabLft + 1, iTabBtm - 2, iTabRgt - 2, FALSE );
}
/* */
/* Wvw_DrawScrollbarThumbHorz( [nWinNum], nTop, nLeft, nBottom, nRight, aPxlOffset, nThumbPos )*/
/* */
/* NOTE: with WVW_XB (scrollbar) this function does not seem to be usefull */
HB_FUNC( WVW_DRAWSCROLLTHUMBHORZ )
{
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
POINT xy = { 0 };
int iThumbLeft, iThumbRight;
int iTop, iLeft, iBottom, iRight;
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
USHORT usThumbLeft = ( USHORT ) hb_parni( 7 );
if( hb_gt_wvw_GetMainCoordMode() )
{
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
hb_wvw_HBFUNCPrologue( usWinNum, NULL, &usThumbLeft, NULL, NULL );
}
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y + hb_parvni( 6, 1 );
iLeft = xy.x + hb_parvni( 6, 2 );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
iBottom = xy.y - 1 + hb_parvni( 6, 3 );
iRight = xy.x - 1 + hb_parvni( 6, 4 );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usThumbLeft, usTop /* dummy */ );
iThumbLeft = xy.x;
iThumbRight = iThumbLeft + ( pWindowData->PTEXTSIZE.x * 2 ) - 1;
SetBkColor( pWindowData->hdc, RGB( 230, 230, 230 ) );
SelectObject( pWindowData->hdc, s_sApp->diagonalBrush );
SelectObject( pWindowData->hdc, s_sApp->penNull );
Rectangle( pWindowData->hdc, iLeft, iTop, iRight + 1, iBottom + 1 );
SelectObject( pWindowData->hdc, s_sApp->wvwWhiteBrush );
SelectObject( pWindowData->hdc, s_sApp->penGray );
Rectangle( pWindowData->hdc, iThumbLeft, iTop, iThumbRight, iBottom );
hb_gt_wvwDrawBoxRaised( usWinNum, iTop + 1, iThumbLeft + 1, iBottom - 2, iThumbRight - 2, FALSE );
}
/* */
/* wvw_DrawShadedRect( [nWinNum], nTop, nLeft, nBottom, nRight, aPxlOffSet, nHorVert, aRGBb, aRGBe )*/
/* */
HB_FUNC( WVW_DRAWSHADEDRECT )
{
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
BOOL bGF = FALSE;
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
if( s_sApp->hMSImg32 )
{
TRIVERTEX vert[ 2 ];
GRADIENT_RECT gRect = { 0 };
int iMode = HB_ISNIL( 7 ) ? GRADIENT_FILL_RECT_H : hb_parni( 7 );
POINT xy = { 0 };
int iTop, iLeft, iBottom, iRight;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y + hb_parvni( 6, 1 );
iLeft = xy.x + hb_parvni( 6, 2 );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
iBottom = xy.y - 1 + hb_parvni( 6, 3 );
iRight = xy.x - 1 + hb_parvni( 6, 4 );
vert[ 0 ].x = iLeft;
vert[ 0 ].y = iTop;
vert[ 0 ].Red = ( COLOR16 ) hb_parvni( 8, 1 );
vert[ 0 ].Green = ( COLOR16 ) hb_parvni( 8, 2 );
vert[ 0 ].Blue = ( COLOR16 ) hb_parvni( 8, 3 );
vert[ 0 ].Alpha = ( COLOR16 ) hb_parvni( 8, 4 );
vert[ 1 ].x = iRight;
vert[ 1 ].y = iBottom;
vert[ 1 ].Red = ( COLOR16 ) hb_parvni( 9, 1 );
vert[ 1 ].Green = ( COLOR16 ) hb_parvni( 9, 2 );
vert[ 1 ].Blue = ( COLOR16 ) hb_parvni( 9, 3 );
vert[ 1 ].Alpha = ( COLOR16 ) hb_parvni( 9, 4 );
gRect.UpperLeft = 0;
gRect.LowerRight = 1;
bGF = ( BOOL ) s_sApp->pfnGF( pWindowData->hdc, vert, 2, &gRect, 1, iMode );
}
hb_retl( bGF );
}
/* */
/* wvw_DrawTextBox( [nWinNum], nTop, nLeft, nBottom, nRight, aPxlOffSet, cText, ;*/
/* nAlignHorz, nAlignVert, nTextColor, nBackColor, ; */
/* nBackMode, hFont ) */
/* */
HB_FUNC( WVW_DRAWTEXTBOX )
{
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
POINT xy = { 0 };
int iTop, iLeft, iBottom, iRight;
int iAlignHorz = HB_ISNIL( 8 ) ? 0 : hb_parni( 8 );
int iAlignH = 0;
COLORREF oldTextColor, oldBkColor;
HFONT oldFont;
int oldTextAlign, oldBkMode;
RECT rc = { 0 };
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y + hb_parvni( 6, 1 );
iLeft = xy.x + hb_parvni( 6, 2 );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
iBottom = xy.y - 1 + hb_parvni( 6, 3 );
iRight = xy.x - 1 + hb_parvni( 6, 4 );
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;
oldTextAlign = SetTextAlign( pWindowData->hdc, TA_TOP | TA_LEFT | TA_NOUPDATECP );
oldTextColor = SetTextColor( pWindowData->hdc, HB_ISNIL( 10 ) ? pWindowData->foreground : ( COLORREF ) hb_parnl( 10 ) );
oldBkColor = SetBkColor( pWindowData->hdc, HB_ISNIL( 11 ) ? pWindowData->background : ( COLORREF ) hb_parnl( 11 ) );
oldBkMode = SetBkMode( pWindowData->hdc, HB_ISNIL( 12 ) ? OPAQUE : hb_parni( 12 ) );
oldFont = ( HFONT ) SelectObject( pWindowData->hdc, ( HFONT ) HB_PARHANDLE( 13 ) );
DrawText( pWindowData->hdc, hb_parcx( 7 ), strlen( hb_parcx( 7 ) ), &rc, iAlignH | DT_WORDBREAK | DT_TOP );
SetTextColor( pWindowData->hdc, oldTextColor );
SetBkColor( pWindowData->hdc, oldBkColor );
SetBkMode( pWindowData->hdc, oldBkMode );
SetTextAlign( pWindowData->hdc, oldTextAlign );
SelectObject( pWindowData->hdc, oldFont );
}
/*
*
* wvw_DrawProgressBar( [nWinNum], nTop, nLeft, nBottom, nRight, aPxlTLBR, nPercent,;
* nBackColor, nBarColor, cImage, lVertical, nDirection )
*/
HB_FUNC( WVW_DRAWPROGRESSBAR )
{
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
WIN_DATA * pWinMainData = hb_gt_wvw_GetWindowsData( 0 );
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
int iTop;
int iLeft;
int iBottom;
int iRight;
int iPercent, iBarUpto, iDirection;
BOOL bVertical, bImage;
COLORREF crBarColor;
HBRUSH hBrush;
LOGBRUSH lb = { 0 };
RECT rc = { 0 };
POINT xy = { 0 };
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y + hb_parvni( 6, 1 );
iLeft = xy.x + hb_parvni( 6, 2 );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
iBottom = xy.y - 1 + hb_parvni( 6, 3 );
iRight = xy.x - 1 + hb_parvni( 6, 4 );
iPercent = hb_parni( 7 );
bImage = HB_ISNIL( 10 ) ? FALSE : TRUE;
bVertical = HB_ISNIL( 11 ) ? FALSE : hb_parl( 11 );
iDirection = HB_ISNIL( 12 ) ? 0 : hb_parni( 12 );
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 )
hb_gt_wvwDrawImage( usWinNum, rc.left, rc.top, rc.right - rc.left + 1, rc.bottom - rc.top + 1, hb_parc( 10 ),
FALSE );
else
{
crBarColor = HB_ISNIL( 9 ) ? hb_gt_wvwGetColorData( 0 ) : ( COLORREF ) hb_parnl( 9 );
lb.lbStyle = BS_SOLID;
lb.lbColor = crBarColor;
lb.lbHatch = 0;
hBrush = CreateBrushIndirect( &lb );
rc.bottom++;
rc.right++;
FillRect( pWindowData->hdc, &rc, hBrush );
SelectObject( pWinMainData->hdc, ( HBRUSH ) s_sApp->OriginalBrush );
DeleteObject( hBrush );
}
}
/*
*
* wvw_DrawBoxGet( [nWinNum], nRow, nCol, nWidth,;
* aOffset ) <-- additional parm, not exist in GTWVT
*
* NOTES: unlike GTWVT, GTWVW draw white lines on outer right and outer bottom
* Besides, scope is the same as DRAWBOXRECESSED, ie.
* two pixel out of char boundary
*/
HB_FUNC( WVW_DRAWBOXGET )
{
UINT usWinNum = WVW_WHICH_WINDOW;
POINT xy = { 0 };
POINT yz = { 0 };
WIN_DATA * pWindowData;
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
int iTop, iLeft, iBottom, iRight;
int iOffTop, iOffLeft, iOffBottom, iOffRight;
USHORT usRow, usCol, usLen;
pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
usRow = ( USHORT ) hb_parni( 2 );
usCol = ( USHORT ) hb_parni( 3 );
usLen = ( USHORT ) hb_parni( 4 );
iOffTop = ! HB_ISNIL( 5 ) ? hb_parvni( 5, 1 ) : 0;
iOffLeft = ! HB_ISNIL( 5 ) ? hb_parvni( 5, 2 ) : 0;
iOffBottom = ! HB_ISNIL( 5 ) ? hb_parvni( 5, 3 ) : 0;
iOffRight = ! HB_ISNIL( 5 ) ? hb_parvni( 5, 4 ) : 0;
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usRow, &usCol, NULL, NULL );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usCol, usRow );
iTop = xy.y - 1 + iOffTop;
iLeft = xy.x - 1 + iOffLeft;
yz = hb_gt_wvwGetXYFromColRow( pWindowData, usCol + usLen, usRow + 1 );
yz.y -= pWindowData->byLineSpacing;
iBottom = yz.y + iOffBottom;
iRight = yz.x + iOffRight;
SelectObject( pWindowData->hdc, s_sApp->penBlack );
MoveToEx( pWindowData->hdc, iLeft, iTop, NULL );
LineTo( pWindowData->hdc, iRight, iTop );
MoveToEx( pWindowData->hdc, iLeft, iTop, NULL );
LineTo( pWindowData->hdc, iLeft, iBottom );
SelectObject( pWindowData->hdc, s_sApp->penDarkGray );
MoveToEx( pWindowData->hdc, iLeft - 1, iTop - 1, NULL );
LineTo( pWindowData->hdc, iRight + 1, iTop - 1 );
MoveToEx( pWindowData->hdc, iLeft - 1, iTop - 1, NULL );
LineTo( pWindowData->hdc, iLeft - 1, iBottom + 1 );
/* GTWVW also draws right and bottom outer with single white line */
SelectObject( pWindowData->hdc, s_sApp->penWhite );
MoveToEx( pWindowData->hdc, iRight + 1, iTop - 1, NULL );
LineTo( pWindowData->hdc, iRight + 1, iBottom + 1 + 1 );
MoveToEx( pWindowData->hdc, iLeft - 1, iBottom + 1, NULL );
LineTo( pWindowData->hdc, iRight + 1, iBottom + 1 );
MoveToEx( pWindowData->hdc, iLeft, iBottom, NULL );
LineTo( pWindowData->hdc, iRight, iBottom );
MoveToEx( pWindowData->hdc, iRight, iTop, NULL );
LineTo( pWindowData->hdc, iRight, iBottom + 1 );
hb_retl( TRUE );
}
/*
*
* wvw_DrawBoxGet_XP( [nWinNum], nRow, nCol, nWidth,;
* aOffset ) <-- additional parm, not exist in GTWVT
*
* NOTES: unlike GTWVT, GTWVW draw white lines on outer right and outer bottom
* Besides, scope is the same as DRAWBOXRECESSED, ie.
* two pixel out of char boundary
*/
HB_FUNC( WVW_DRAWBOXGET_XP )
{
UINT usWinNum = WVW_WHICH_WINDOW;
POINT xy = { 0 };
POINT yz = { 0 };
WIN_DATA * pWindowData;
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
int iTop, iLeft, iBottom, iRight;
int iOffTop, iOffLeft, iOffBottom, iOffRight;
USHORT usRow, usCol, usLen;
pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
usRow = ( USHORT ) hb_parni( 2 );
usCol = ( USHORT ) hb_parni( 3 );
usLen = ( USHORT ) hb_parni( 4 );
iOffTop = ! HB_ISNIL( 5 ) ? hb_parvni( 5, 1 ) : 0;
iOffLeft = ! HB_ISNIL( 5 ) ? hb_parvni( 5, 2 ) : 0;
iOffBottom = ! HB_ISNIL( 5 ) ? hb_parvni( 5, 3 ) : 0;
iOffRight = ! HB_ISNIL( 5 ) ? hb_parvni( 5, 4 ) : 0;
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usRow, &usCol, NULL, NULL );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usCol, usRow );
iTop = xy.y - 1 + iOffTop;
iLeft = xy.x - 1 + iOffLeft;
yz = hb_gt_wvwGetXYFromColRow( pWindowData, usCol + usLen, usRow + 1 );
yz.y -= pWindowData->byLineSpacing;
iBottom = yz.y + iOffBottom;
iRight = yz.x + iOffRight;
SelectObject( pWindowData->hdc, s_sApp->penGray );
MoveToEx( pWindowData->hdc, iLeft - 1, iTop - 1, NULL );
LineTo( pWindowData->hdc, iRight + 1, iTop - 1 );
MoveToEx( pWindowData->hdc, iLeft - 1, iTop - 1, NULL );
LineTo( pWindowData->hdc, iLeft - 1, iBottom + 1 );
MoveToEx( pWindowData->hdc, iLeft - 1, iBottom + 1, NULL );
LineTo( pWindowData->hdc, iRight + 1, iBottom + 1 );
MoveToEx( pWindowData->hdc, iRight + 1, iTop - 1, NULL );
LineTo( pWindowData->hdc, iRight + 1, iBottom + 1 );
hb_retl( TRUE );
}
/* */
/* wvw_DrawBoxRaised( nWinNum, */
/* nTop, nLeft, nBottom, nRight, */
/* lTight/aOffset) */
/* */
/* if lTight, box is drawn inside the character region */
/* AND top and left lines are lower two pixel down to make room for above/left object*/
/* WARNING: gui object of this type subject to be overwritten by chars */
/* NOTE that these lines are to be overwritten by displayed char, */
/* we are depending on the fact that gui object will be painted last */
/* */
/* lTight may be replaced with aOffset parm {top,left,bottom,right} */
/* ie. offset in pixel unit */
/* */
HB_FUNC( WVW_DRAWBOXRAISED )
{
UINT usWinNum = WVW_WHICH_WINDOW;
POINT xy = { 0 };
int iTop, iLeft, iBottom, iRight;
WIN_DATA * pWindowData;
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
BOOL bUseArray = HB_ISARRAY( 6 );
BOOL bTight = ( bUseArray || HB_ISNIL( 6 ) ? FALSE : hb_parl( 6 ) );
int iOLeft, iOTop, iORight, iOBottom;
pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
if( bTight )
{
iOTop = 2;
iOLeft = 2;
iOBottom = -1;
iORight = -1;
}
else if( bUseArray )
{
iOTop = hb_parvni( 6, 1 ) - 1;
iOLeft = hb_parvni( 6, 2 ) - 1;
iOBottom = hb_parvni( 6, 3 );
iORight = hb_parvni( 6, 4 );
}
else
{
iOTop = -1;
iOLeft = -1;
iOBottom = 0;
iORight = 0;
}
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y + iOTop;
iLeft = xy.x + iOLeft;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
iBottom = xy.y + iOBottom;
iRight = xy.x + iORight;
hb_gt_wvwDrawBoxRaised( pWindowData->byWinId, iTop, iLeft, iBottom, iRight,
bTight );
hb_retl( TRUE );
}
/* */
/* wvw_DrawBoxRecessed( nWinNum, ; */
/* nTop, nLeft, nBottom, nRight, */
/* lTight/aOffset) <--none in gtwvt */
/* */
/* if lTight, box is drawn inside the character region */
/* AND top and left lines are lower two pixel down to make room for above/left object */
/* WARNING: gui object of this type subject to be overwritten by chars */
/* NOTE that these lines are to be overwritten by displayed char, */
/* we are depending on the fact that gui object will be painted last */
/* */
/* lTight may be replaced with aOffset parm {top,left,bottom,right} */
/* ie. offset in pixel unit */
/* */
HB_FUNC( WVW_DRAWBOXRECESSED )
{
UINT usWinNum = WVW_WHICH_WINDOW;
POINT xy = { 0 };
int iTop, iLeft, iBottom, iRight;
WIN_DATA * pWindowData;
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
BOOL bUseArray = HB_ISARRAY( 6 );
BOOL bTight = ( bUseArray || HB_ISNIL( 6 ) ? FALSE : hb_parl( 6 ) );
int iOLeft, iOTop, iORight, iOBottom;
pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
if( bTight )
{
iOTop = 2;
iOLeft = 2;
iOBottom = -1;
iORight = -1;
}
else if( bUseArray )
{
iOTop = hb_parvni( 6, 1 ) - 1;
iOLeft = hb_parvni( 6, 2 ) - 1;
iOBottom = hb_parvni( 6, 3 );
iORight = hb_parvni( 6, 4 );
}
else
{
iOTop = -1;
iOLeft = -1;
iOBottom = 0;
iORight = 0;
}
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y + iOTop;
iLeft = xy.x + iOLeft;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
iBottom = xy.y + iOBottom;
iRight = xy.x + iORight;
hb_gt_wvwDrawBoxRecessed( pWindowData->byWinId, iTop, iLeft, iBottom, iRight,
bTight );
hb_retl( TRUE );
}
/*
*
* wvw_DrawBoxGroup( nWinNum, ;
* nTop, nLeft, nBottom, nRight,;
* [aOffset] )
*
* NOTE: aOffset is TLBR offset in pixel. none in GTWVT
*/
HB_FUNC( WVW_DRAWBOXGROUP )
{
UINT usWinNum = WVW_WHICH_WINDOW;
POINT xy = { 0 };
int iTop, iLeft, iBottom, iRight;
int iOffTop, iOffLeft, iOffBottom, iOffRight;
WIN_DATA * pWindowData;
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
iOffTop = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 1 ) : 0;
iOffLeft = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 2 ) : 0;
iOffBottom = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 3 ) : 0;
iOffRight = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 4 ) : 0;
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y - 1 + iOffTop;
iLeft = xy.x - 1 + iOffLeft;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
iBottom = xy.y + iOffBottom;
iRight = xy.x + iOffRight;
SelectObject( pWindowData->hdc, s_sApp->penDarkGray );
MoveToEx( pWindowData->hdc, iRight, iTop, NULL ); /* Right Inner */
LineTo( pWindowData->hdc, iRight, iBottom );
MoveToEx( pWindowData->hdc, iLeft, iBottom, NULL ); /* Bottom Inner */
LineTo( pWindowData->hdc, iRight, iBottom );
MoveToEx( pWindowData->hdc, iLeft - 1, iTop - 1, NULL ); /* Left Outer */
LineTo( pWindowData->hdc, iLeft - 1, iBottom + 1 );
MoveToEx( pWindowData->hdc, iLeft - 1, iTop - 1, NULL ); /* Top Outer */
LineTo( pWindowData->hdc, iRight + 1, iTop - 1 );
SelectObject( pWindowData->hdc, s_sApp->penWhite );
MoveToEx( pWindowData->hdc, iRight + 1, iTop, NULL ); /* Right Outer */
LineTo( pWindowData->hdc, iRight + 1, iBottom + 1 );
MoveToEx( pWindowData->hdc, iLeft - 1, iBottom + 1, NULL ); /* Bottom Outer */
LineTo( pWindowData->hdc, iRight + 1 + 1, iBottom + 1 );
MoveToEx( pWindowData->hdc, iLeft, iTop, NULL ); /* Left Inner */
LineTo( pWindowData->hdc, iLeft, iBottom );
MoveToEx( pWindowData->hdc, iLeft, iTop, NULL ); /* Top Inner */
LineTo( pWindowData->hdc, iRight, iTop );
hb_retl( TRUE );
}
/* */
/* wvw_DrawBoxRaised( nWinNum, ; */
/* nTop, nLeft, nBottom, nRight ) */
/* */
HB_FUNC( WVW_DRAWBOXGROUPRAISED )
{
UINT usWinNum = WVW_WHICH_WINDOW;
POINT xy = { 0 };
int iTop, iLeft, iBottom, iRight;
WIN_DATA * pWindowData;
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y - 1;
iLeft = xy.x - 1;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
iBottom = xy.y;
iRight = xy.x;
SelectObject( pWindowData->hdc, s_sApp->penWhite );
MoveToEx( pWindowData->hdc, iRight, iTop, NULL ); /* Right Inner */
LineTo( pWindowData->hdc, iRight, iBottom );
MoveToEx( pWindowData->hdc, iLeft, iBottom, NULL ); /* Bottom Inner */
LineTo( pWindowData->hdc, iRight, iBottom );
MoveToEx( pWindowData->hdc, iLeft - 1, iTop - 1, NULL ); /* Left Outer */
LineTo( pWindowData->hdc, iLeft - 1, iBottom + 1 );
MoveToEx( pWindowData->hdc, iLeft - 1, iTop - 1, NULL ); /* Top Outer */
LineTo( pWindowData->hdc, iRight + 1, iTop - 1 );
SelectObject( pWindowData->hdc, s_sApp->penDarkGray );
MoveToEx( pWindowData->hdc, iRight + 1, iTop, NULL ); /* Right Outer */
LineTo( pWindowData->hdc, iRight + 1, iBottom + 1 );
MoveToEx( pWindowData->hdc, iLeft - 1, iBottom + 1, NULL ); /* Bottom Outer */
LineTo( pWindowData->hdc, iRight + 1 + 1, iBottom + 1 );
MoveToEx( pWindowData->hdc, iLeft, iTop, NULL ); /* Left Inner */
LineTo( pWindowData->hdc, iLeft, iBottom );
MoveToEx( pWindowData->hdc, iLeft, iTop, NULL ); /* Top Inner */
LineTo( pWindowData->hdc, iRight, iTop );
hb_retl( TRUE );
}
/* */
/* wvw_DrawImage( nWinNum, ; */
/* nTop, nLeft, nBottom, nRight, cImage/nPictureSlot, ; */
/* lTight/aOffset,; */
/* lTransparent) <--none in gtwvt */
/* */
/* 20060724 Notes:
(1) Image dimension
if nBottom is NIL, then image height will be proportional to image width.
if nRight is NIL, then image width will be proportional to image height.
if nBottom and nRight are BOTH NIL then original image dimension is used
(2) Transparency
if lTransparent is .t., top-left pixel is used as the transparent color,
(3) Caching
Image will always be cached. See the WARNING in hb_gt_wvwDrawImage().
Do not use this function to draw a large number of images.
TODO: make it an option.
*/
HB_FUNC( WVW_DRAWIMAGE )
{
UINT usWinNum = WVW_WHICH_WINDOW;
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
POINT xy = { 0 };
int iLeft, iTop, iRight = 0, iBottom = 0;
WIN_DATA * pWindowData;
BOOL bActBottom = HB_ISNIL( 4 ),
bActRight = HB_ISNIL( 5 );
int iImgWidth = 0, iImgHeight = 0;
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
BOOL bTight = HB_ISARRAY( 7 ) || HB_ISNIL( 7 ) ? FALSE : hb_parl( 7 );
BOOL bUseArray = HB_ISARRAY( 7 );
BOOL bTransparent = HB_ISNIL( 8 ) ? FALSE : hb_parl( 8 );
int iOLeft, iOTop, iORight, iOBottom;
BOOL bResult;
pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
if( bTight )
{
iOTop = 2 + 1;
iOLeft = 2 + 1;
iOBottom = -1;
iORight = -1;
}
else if( bUseArray )
{
iOTop = hb_parvni( 7, 1 );
iOLeft = hb_parvni( 7, 2 );
iOBottom = hb_parvni( 7, 3 );
iORight = hb_parvni( 7, 4 );
}
else
iOTop = iOLeft = iOBottom = iORight = 0;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y + iOTop;
iLeft = xy.x + iOLeft;
if( bActRight || bActBottom )
{
if( ( ! HB_ISNUM( 6 ) && ! GetImageDimension( hb_parcx( 6 ), &iImgWidth, &iImgHeight ) )
||
( HB_ISNUM( 6 ) && ! GetIPictDimension( s_sApp->iPicture[ hb_parni( 6 ) - 1 ], &iImgWidth, &iImgHeight ) )
)
{
bActRight = FALSE;
bActBottom = FALSE;
}
else if( bActRight && bActBottom )
{
iRight = iLeft + iImgWidth - 1;
iBottom = iTop + iImgHeight - 1;
}
}
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
if( ! bActBottom )
iBottom = xy.y - 1 + iOBottom;
if( ! bActRight )
iRight = xy.x - 1 + iORight;
if( ( bActBottom || bActRight ) && ! ( bActBottom && bActRight ) )
{
int iDispWidth, iDispHeight;
if( bActRight )
{
/* right corner (width) must be proportional to height */
iDispHeight = iBottom - iTop + 1;
iDispWidth = ( int ) ( ( float ) iImgWidth / iImgHeight * iDispHeight );
iRight = iLeft + iDispWidth - 1;
}
else
{
/* bottom corner (height) must be proportional to width */
iDispWidth = iRight - iLeft + 1;
iDispHeight = ( int ) ( ( float ) iImgHeight / iImgWidth * iDispWidth );
iBottom = iTop + iDispHeight - 1;
}
}
if( HB_ISNUM( 6 ) )
bResult = hb_gt_wvwRenderPicture( usWinNum, iLeft, iTop, ( iRight - iLeft ) + 1, ( iBottom - iTop ) + 1, s_sApp->iPicture[ hb_parni( 6 ) - 1 ],
bTransparent );
else
bResult = hb_gt_wvwDrawImage( usWinNum, iLeft, iTop, ( iRight - iLeft ) + 1, ( iBottom - iTop ) + 1, hb_parcx( 6 ),
bTransparent );
hb_retl( bResult );
}
/* */
/* wvw_DrawImage_Resource( nWinNum, ; */
/* nTop, nLeft, nBottom, nRight, nPictureResource/cPictureResource, ; */
/* lTight/aOffset,; */
/* lTransparent) <--none in gtwvt */
/* */
/* 20060724 Notes:
(1) Image dimension
if nBottom is NIL, then image height will be proportional to image width.
if nRight is NIL, then image width will be proportional to image height.
if nBottom and nRight are BOTH NIL then original image dimension is used
(2) Transparency
if lTransparent is .t., top-left pixel is used as the transparent color,
(3) Caching
Image will always be cached. See the WARNING in hb_gt_wvwDrawImage().
Do not use this function to draw a large number of images.
TODO: make it an option.
*/
HB_FUNC( WVW_DRAWIMAGE_RESOURCE )
{
UINT usWinNum = WVW_WHICH_WINDOW;
POINT xy = { 0 };
int iLeft, iTop, iRight = 0, iBottom = 0;
WIN_DATA * pWindowData;
BOOL bActBottom = HB_ISNIL( 4 ),
bActRight = HB_ISNIL( 5 );
int iImgWidth, iImgHeight;
LONG lImgWidth, lImgHeight;
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
BOOL bTight = HB_ISARRAY( 7 ) || HB_ISNIL( 7 ) ? FALSE : hb_parl( 7 );
BOOL bUseArray = HB_ISARRAY( 7 );
BOOL bTransparent = HB_ISNIL( 8 ) ? FALSE : hb_parl( 8 );
int iOLeft, iOTop, iORight, iOBottom;
BOOL bResult = FALSE;
IPicture * pPic;
pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
if( bTight )
{
iOTop = 2 + 1;
iOLeft = 2 + 1;
iOBottom = -1;
iORight = -1;
}
else if( bUseArray )
{
iOTop = hb_parvni( 7, 1 );
iOLeft = hb_parvni( 7, 2 );
iOBottom = hb_parvni( 7, 3 );
iORight = hb_parvni( 7, 4 );
}
else
iOTop = iOLeft = iOBottom = iORight = 0;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y + iOTop;
iLeft = xy.x + iOLeft;
lImgWidth = 0;
lImgHeight = 0;
iImgWidth = 0;
iImgHeight = 0;
if( ! HB_ISNUM( 6 ) )
{
pPic = rr_LoadPictureFromResource( hb_parcx( 6 ), 0, &lImgWidth, &lImgHeight );
if( pPic == NULL )
pPic = rr_LoadPicture( hb_parcx( 6 ), &lImgWidth, &lImgHeight );
}
else
pPic = rr_LoadPictureFromResource( NULL, hb_parni( 6 ), &lImgWidth, &lImgHeight );
#if 0
lImgWidth = iImgWidth;
lImgHeight = iImgHeight;
#endif
if( pPic == NULL )
hb_retl( bResult );
if( bActRight || bActBottom )
{
if( ! GetIPictDimension( pPic, &iImgWidth, &iImgHeight ) )
{
bActRight = FALSE;
bActBottom = FALSE;
}
else if( bActRight && bActBottom )
{
iRight = iLeft + iImgWidth;
iBottom = iTop + iImgHeight;
}
}
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
if( ! bActBottom )
iBottom = xy.y - 1 + iOBottom;
if( ! bActRight )
iRight = xy.x - 1 + iORight;
if( ( bActBottom || bActRight ) && ! ( bActBottom && bActRight ) )
{
int iDispWidth, iDispHeight;
if( bActRight )
{
/* right corner (width) must be proportional to height */
iDispHeight = iBottom - iTop + 1;
iDispWidth = ( int ) ( ( float ) iImgWidth / iImgHeight * iDispHeight );
iRight = iLeft + iDispWidth - 1;
}
else
{
/* bottom corner (height) must be proportional to width */
iDispWidth = iRight - iLeft + 1;
iDispHeight = ( int ) ( ( float ) iImgHeight / iImgWidth * iDispWidth );
iBottom = iTop + iDispHeight - 1;
}
}
bResult = hb_gt_wvwRenderPicture( usWinNum, iLeft, iTop, ( iRight - iLeft ) + 1, ( iBottom - iTop ) + 1, pPic,
bTransparent );
hb_retl( bResult );
}
/* */
/* wvw_DrawLabel( nWinNum, ; */
/* nRow, nCol, cLabel, nAlign, nEscapement, nTextColor, ; */
/* nBkColor, cFontFace,nHeight, nWidth, nWeight, ; */
/* nQuality, nCharSet, lItalic, lUnderline, lStrikeOut ) */
/* */
HB_FUNC( WVW_DRAWLABEL )
{
UINT usWinNum = WVW_WHICH_WINDOW;
POINT xy = { 0 };
HFONT hFont, oldFont;
LOGFONT logfont = { 0 };
int oldTextAlign;
COLORREF oldBkColor, oldTextColor;
WIN_DATA * pWindowData;
USHORT usRow = ( USHORT ) hb_parni( 2 ),
usCol = ( USHORT ) hb_parni( 3 );
pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usRow, &usCol, NULL, NULL );
logfont.lfEscapement = HB_ISNIL( 6 ) ? 0 : ( hb_parni( 6 ) * 10 );
logfont.lfOrientation = 0;
logfont.lfWeight = HB_ISNIL( 12 ) ? 0 : hb_parni( 12 );
logfont.lfItalic = HB_ISNIL( 15 ) ? 0 : ( BYTE ) hb_parl( 15 );
logfont.lfUnderline = HB_ISNIL( 16 ) ? 0 : ( BYTE ) hb_parl( 16 );
logfont.lfStrikeOut = HB_ISNIL( 17 ) ? 0 : ( BYTE ) hb_parl( 17 );
logfont.lfCharSet = HB_ISNIL( 14 ) ? ( BYTE ) pWindowData->CodePage : ( BYTE ) hb_parni( 14 );
logfont.lfOutPrecision = 0;
logfont.lfClipPrecision = 0;
logfont.lfQuality = HB_ISNIL( 13 ) ? DEFAULT_QUALITY : ( BYTE ) hb_parni( 13 );
logfont.lfPitchAndFamily = FF_DONTCARE;
logfont.lfHeight = HB_ISNIL( 10 ) ? pWindowData->fontHeight : hb_parni( 10 );
logfont.lfWidth = HB_ISNIL( 11 ) ? ( pWindowData->fontWidth < 0 ? -pWindowData->fontWidth : pWindowData->fontWidth ) : hb_parni( 11 );
strcpy( logfont.lfFaceName, ( HB_ISNIL( 9 ) ? pWindowData->fontFace : hb_parcx( 9 ) ) );
hFont = CreateFontIndirect( &logfont );
if( hFont )
{
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usCol, usRow );
oldBkColor = SetBkColor( pWindowData->hdc, HB_ISNIL( 8 ) ? pWindowData->background : ( COLORREF ) hb_parnl( 8 ) );
oldTextColor = SetTextColor( pWindowData->hdc, HB_ISNIL( 7 ) ? pWindowData->foreground : ( COLORREF ) hb_parnl( 7 ) );
oldTextAlign = SetTextAlign( pWindowData->hdc, ( HB_ISNIL( 5 ) ? TA_LEFT : hb_parni( 5 ) ) );
oldFont = ( HFONT ) SelectObject( pWindowData->hdc, hFont );
ExtTextOut( pWindowData->hdc, xy.x, xy.y, 0, NULL, hb_parcx( 4 ), strlen( hb_parcx( 4 ) ), NULL );
SelectObject( pWindowData->hdc, oldFont );
DeleteObject( hFont );
SetTextAlign( pWindowData->hdc, oldTextAlign );
SetBkColor( pWindowData->hdc, oldBkColor );
SetTextColor( pWindowData->hdc, oldTextColor );
hb_retl( TRUE );
}
hb_retl( FALSE );
}
/* */
/* wvw_DrawOutline( nWinNum, ; */
/* nTop, nLeft, nBottom, nRight, */
/* nThick, nShape, nRGBColor ) */
/* */
HB_FUNC( WVW_DRAWOUTLINE )
{
UINT usWinNum = WVW_WHICH_WINDOW;
HPEN hPen = 0, hOldPen = 0;
POINT xy = { 0 };
int iTop, iLeft, iBottom, iRight;
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
WIN_DATA * pWindowData;
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y - 1;
iLeft = xy.x - 1;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
iBottom = xy.y;
iRight = xy.x;
if( HB_ISNUM( 6 ) )
{
hPen = CreatePen( hb_parni( 6 ), 0, ( HB_ISNIL( 8 ) ? 0 : ( COLORREF ) hb_parnl( 8 ) ) );
if( hPen )
hOldPen = ( HPEN ) SelectObject( pWindowData->hdc, hPen );
}
else
/* hPen = 0; */
SelectObject( pWindowData->hdc, s_sApp->penBlack );
hb_gt_wvwDrawOutline( usWinNum, iTop, iLeft, iBottom, iRight );
if( hPen )
{
SelectObject( pWindowData->hdc, hOldPen );
DeleteObject( hPen );
}
hb_retl( TRUE );
}
/* 1 */
/* 2 3 4 5 6 7 8 9 10 11 */
/* 12 */
/* wvw_DrawLine( nWinNum, ; */
/* nTop, nLeft, nBottom, nRight, nOrient, nFormat, nAlign, nStyle, nThick, nColor,; */
/* aOffset) */
/* */
HB_FUNC( WVW_DRAWLINE )
{
UINT usWinNum = WVW_WHICH_WINDOW;
POINT xy = { 0 };
int iTop, iLeft, iBottom, iRight, iOffset;
int iOffTop, iOffLeft, iOffBottom, iOffRight;
int iOrient, iFormat, iAlign, iStyle, iThick;
int x, y;
COLORREF cr;
HPEN hPen, hOldPen;
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
WIN_DATA * pWindowData;
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
iOffTop = ! HB_ISNIL( 12 ) ? hb_parvni( 12, 1 ) : 0;
iOffLeft = ! HB_ISNIL( 12 ) ? hb_parvni( 12, 2 ) : 0;
iOffBottom = ! HB_ISNIL( 12 ) ? hb_parvni( 12, 3 ) : 0;
iOffRight = ! HB_ISNIL( 12 ) ? hb_parvni( 12, 4 ) : 0;
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y + iOffTop;
iLeft = xy.x + iOffLeft;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
iBottom = xy.y - 1 + iOffBottom;
iRight = xy.x - 1 + iOffRight;
iOrient = HB_ISNIL( 6 ) ? 0 : hb_parni( 6 );
iFormat = HB_ISNIL( 7 ) ? 0 : hb_parni( 7 );
iAlign = HB_ISNIL( 8 ) ? 0 : hb_parni( 8 );
iStyle = HB_ISNIL( 9 ) ? 0 : hb_parni( 9 );
iThick = HB_ISNIL( 10 ) ? 0 : hb_parni( 10 );
cr = HB_ISNIL( 11 ) ? 0 : ( COLORREF ) hb_parnl( 11 );
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 )
y = iBottom - 1;
else
y = iBottom;
break;
case 3: /* Left */
break;
case 4: /* Right */
if( iFormat == 0 || iFormat == 1 )
x = iRight - 1;
else
x = iRight;
break;
}
hPen = CreatePen( iStyle, iThick, cr );
hOldPen = ( HPEN ) SelectObject( pWindowData->hdc, hPen );
switch( iFormat )
{
case 0: /* Raised */
if( iOrient == 0 ) /* Horizontal */
{
SelectObject( pWindowData->hdc, s_sApp->penWhite );
MoveToEx( pWindowData->hdc, x, y, NULL );
LineTo( pWindowData->hdc, iRight, y );
SelectObject( pWindowData->hdc, hPen );
MoveToEx( pWindowData->hdc, x, y + 1, NULL );
LineTo( pWindowData->hdc, iRight, y + 1 );
}
else /* Vertical */
{
SelectObject( pWindowData->hdc, s_sApp->penWhite );
MoveToEx( pWindowData->hdc, x, y, NULL );
LineTo( pWindowData->hdc, x, iBottom );
SelectObject( pWindowData->hdc, hPen );
MoveToEx( pWindowData->hdc, x + 1, y, NULL );
LineTo( pWindowData->hdc, x + 1, iBottom );
}
break;
case 1: /* Recessed */
if( iOrient == 0 ) /* Horizontal */
{
SelectObject( pWindowData->hdc, hPen );
MoveToEx( pWindowData->hdc, x, y, NULL );
LineTo( pWindowData->hdc, iRight, y );
SelectObject( pWindowData->hdc, s_sApp->penWhite );
MoveToEx( pWindowData->hdc, x, y + 1, NULL );
LineTo( pWindowData->hdc, iRight, y + 1 );
}
else /* Vertical */
{
SelectObject( pWindowData->hdc, hPen );
MoveToEx( pWindowData->hdc, x, y, NULL );
LineTo( pWindowData->hdc, x, iBottom );
SelectObject( pWindowData->hdc, s_sApp->penWhite );
MoveToEx( pWindowData->hdc, x + 1, y, NULL );
LineTo( pWindowData->hdc, x + 1, iBottom );
}
break;
case 2: /* Plain */
if( iOrient == 0 ) /* Horizontal */
{
SelectObject( pWindowData->hdc, hPen );
MoveToEx( pWindowData->hdc, x, y, NULL );
LineTo( pWindowData->hdc, iRight, y );
}
else /* Vertical */
{
SelectObject( pWindowData->hdc, hPen );
MoveToEx( pWindowData->hdc, x, y, NULL );
LineTo( pWindowData->hdc, x, iBottom );
}
break;
}
SelectObject( pWindowData->hdc, hOldPen );
DeleteObject( hPen );
hb_retl( TRUE );
}
/* */
/* Inside the area requested! */
/* wvw_DrawEllipse( nWinNum, nTop, nLeft, nBottom, nRight ,; */
/* aOffset) */
/* */
HB_FUNC( WVW_DRAWELLIPSE )
{
UINT usWinNum = WVW_WHICH_WINDOW;
POINT xy = { 0 };
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
int iTop, iLeft, iBottom, iRight;
int iOffTop, iOffLeft, iOffBottom, iOffRight;
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
iOffTop = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 1 ) : 0;
iOffLeft = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 2 ) : 0;
iOffBottom = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 3 ) : 0;
iOffRight = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 4 ) : 0;
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y + iOffTop;
iLeft = xy.x + iOffLeft;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
iBottom = xy.y - 1 + iOffBottom;
iRight = xy.x - 1 + iOffRight;
SelectObject( pWindowData->hdc, s_sApp->currentBrush );
SelectObject( pWindowData->hdc, s_sApp->currentPen );
hb_retl( Ellipse( pWindowData->hdc, iLeft, iTop, iRight, iBottom ) );
}
/* */
/* wvw_DrawRectangle( nWinNum, nTop, nLeft, nBottom, nRight ) */
/* aOffset, lUsaCurrentPen) */
/* */
HB_FUNC( WVW_DRAWRECTANGLE )
{
UINT usWinNum = WVW_WHICH_WINDOW;
POINT xy = { 0 };
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
int iTop, iLeft, iBottom, iRight;
int iOffTop, iOffLeft, iOffBottom, iOffRight;
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
/* Ref.: 28454 - Marson de Paula - 2007-11-27 */
BOOL bUsaCurrentPen = HB_ISNIL( 7 ) ? TRUE : hb_parl( 7 );
iOffTop = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 1 ) : 0;
iOffLeft = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 2 ) : 0;
iOffBottom = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 3 ) : 0;
iOffRight = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 4 ) : 0;
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y + iOffTop;
iLeft = xy.x + iOffLeft;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
iBottom = xy.y - 1 + iOffBottom;
iRight = xy.x - 1 + iOffRight;
SelectObject( pWindowData->hdc, s_sApp->currentBrush );
/* Ref.: 28454 - Marson de Paula - 2007-11-27 */
if( bUsaCurrentPen )
SelectObject( pWindowData->hdc, s_sApp->currentPen );
else
SelectObject( pWindowData->hdc, s_sApp->penBlack );
hb_retl( Rectangle( pWindowData->hdc, iLeft, iTop, iRight, iBottom ) );
}
/* */
/* wvw_DrawRoundRect( nWinNum, nTop, nLeft, nBottom, nRight, ;
* aOffset, ; <-- new parm
* nRoundHeight, nRoundWidth */
/* */
/* WARNING!!!
* unlike previous release of GTWVW, 6th parameter is now aOffset
* This placement of new parameter is made in line with gtwvt's way of doing it
*/
HB_FUNC( WVW_DRAWROUNDRECT )
{
UINT usWinNum = WVW_WHICH_WINDOW;
POINT xy = { 0 };
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
int iTop, iLeft, iBottom, iRight, iWd, iHt;
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
int iOffTop, iOffLeft, iOffBottom, iOffRight;
iOffTop = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 1 ) : 0;
iOffLeft = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 2 ) : 0;
iOffBottom = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 3 ) : 0;
iOffRight = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 4 ) : 0;
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y + iOffTop;
iLeft = xy.x + iOffLeft;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
iBottom = xy.y - 1 + iOffBottom;
iRight = xy.x - 1 + iOffRight;
iWd = HB_ISNIL( 8 ) ? 0 : hb_parni( 8 );
iHt = HB_ISNIL( 7 ) ? 0 : hb_parni( 7 );
SelectObject( pWindowData->hdc, s_sApp->currentBrush );
SelectObject( pWindowData->hdc, s_sApp->currentPen );
hb_retl( RoundRect( pWindowData->hdc, iLeft, iTop, iRight, iBottom, iWd, iHt ) );
}
/* */
/* wvw_DrawFocusRect( nWinNum, nTop, nLeft, nBottom, nRight,; */
/* aOffset) */
/* */
HB_FUNC( WVW_DRAWFOCUSRECT )
{
UINT usWinNum = WVW_WHICH_WINDOW;
RECT rc = { 0 };
POINT xy = { 0 };
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
int iOffTop, iOffLeft, iOffBottom, iOffRight;
iOffTop = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 1 ) : 0;
iOffLeft = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 2 ) : 0;
iOffBottom = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 3 ) : 0;
iOffRight = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 4 ) : 0;
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
rc.top = xy.y + iOffTop;
rc.left = xy.x + iOffLeft;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
rc.bottom = xy.y - 1 + iOffBottom;
rc.right = xy.x - 1 + iOffRight;
hb_retl( DrawFocusRect( pWindowData->hdc, &rc ) );
}
/*NOTE: this is compatibility function with GTWVT
* similar with wvw_FillRectangle()
*/
/*
*
* wvw_DrawColorRect( nWinNum, nTop, nLeft, nBottom, nRight, aPxlOff, nRGB )
*/
HB_FUNC( WVW_DRAWCOLORRECT )
{
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
WIN_DATA * pWindowMainData = hb_gt_wvw_GetWindowsData( 0 );
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
int iOffTop, iOffLeft, iOffBottom, iOffRight;
RECT rc = { 0 };
POINT xy = { 0 };
HBRUSH hBrush;
iOffTop = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 1 ) : 0;
iOffLeft = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 2 ) : 0;
iOffBottom = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 3 ) : 0;
iOffRight = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 4 ) : 0;
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
rc.top = xy.y + iOffTop;
rc.left = xy.x + iOffLeft;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
rc.bottom = xy.y - 1 + iOffBottom;
rc.right = xy.x - 1 + iOffRight;
hBrush = CreateSolidBrush( ( COLORREF ) hb_parnl( 7 ) );
if( hBrush )
{
hb_retl( FillRect( pWindowData->hdc, &rc, hBrush ) );
SelectObject( pWindowMainData->hdc, ( HBRUSH ) s_sApp->OriginalBrush );
DeleteObject( hBrush );
}
}
/* */
/* wvw_DrawGridHorz( nWinNum, ; */
/* nTop, nLeft, nRight, nRows ) */
/* */
HB_FUNC( WVW_DRAWGRIDHORZ )
{
UINT usWinNum = WVW_WHICH_WINDOW;
USHORT usAtRow = ( USHORT ) hb_parni( 2 );
int iRows = hb_parni( 5 );
int i, y;
int iLeft, iRight;
WIN_DATA * pWindowData;
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
USHORT usLeft, usRight;
pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
usLeft = ( USHORT ) hb_parni( 3 );
usRight = ( USHORT ) hb_parni( 4 );
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usAtRow, &usLeft, NULL, &usRight );
iLeft = ( usLeft * pWindowData->PTEXTSIZE.x );
iRight = ( ( ( usRight + 1 ) * pWindowData->PTEXTSIZE.x ) - 1 );
if( s_sApp->gridPen == NULL )
s_sApp->gridPen = CreatePen( 0, 0, GetSysColor( COLOR_BTNFACE ) );
SelectObject( pWindowData->hdc, s_sApp->gridPen );
for( i = 0; i < iRows; i++ )
{
y = ( ( usAtRow ) * hb_wvw_LineHeight( pWindowData ) );
y += pWindowData->usTBHeight;
MoveToEx( pWindowData->hdc, iLeft, y, NULL );
LineTo( pWindowData->hdc, iRight, y );
usAtRow++;
}
hb_retl( TRUE );
}
/*
*
* wvw_DrawGridVert( nWinNum, ;
* nTop, nBottom, aCols, nCols,;
* [aOffset] )
*
* NOTE: aOffset is TLBR offset in pixel. none in GTWVT
* actually aOffset[4] (Right Offset) is not used here
*/
HB_FUNC( WVW_DRAWGRIDVERT )
{
UINT usWinNum = WVW_WHICH_WINDOW;
int iTop, iBottom, x;
int iOffTop, iOffLeft, iOffBottom, iOffRight;
int i;
int iCharHeight, iCharWidth;
int iTabs = hb_parni( 5 );
WIN_DATA * pWindowData;
USHORT usTop, usBottom, usCol;
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
if( ! iTabs )
hb_retl( FALSE );
iOffTop = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 1 ) : 0;
iOffLeft = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 2 ) : 0;
iOffBottom = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 3 ) : 0;
iOffRight = ! HB_ISNIL( 6 ) ? hb_parvni( 6, 4 ) : 0; /* is not actually used */
HB_SYMBOL_UNUSED( iOffRight );
usTop = ( USHORT ) hb_parni( 2 );
usBottom = ( USHORT ) hb_parni( 3 );
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, NULL, &usBottom, NULL );
iCharWidth = pWindowData->PTEXTSIZE.x;
iCharHeight = hb_wvw_LineHeight( pWindowData );
iTop = ( usTop * iCharHeight ) + pWindowData->usTBHeight + iOffTop;
iBottom = ( ( usBottom + 1 ) * iCharHeight ) - 1 + pWindowData->usTBHeight + iOffBottom;
if( s_sApp->gridPen == NULL )
s_sApp->gridPen = CreatePen( 0, 0, GetSysColor( COLOR_BTNFACE ) );
SelectObject( pWindowData->hdc, s_sApp->gridPen );
for( i = 1; i <= iTabs; i++ )
{
usCol = ( USHORT ) hb_parvni( 4, i );
if( hb_gt_wvw_GetMainCoordMode() )
usCol -= pWindowData->usColOfs;
x = ( usCol * iCharWidth ) + iOffLeft;
MoveToEx( pWindowData->hdc, x, iTop, NULL );
LineTo( pWindowData->hdc, x, iBottom );
}
hb_retl( TRUE );
}
/* */
/* wvw_DrawButton( nWinNum, ; */
/* nTop, nLeft, nBottom, nRight, cText, cImage/nImage, nFormat, ; */
/* nTextColor, nBkColor, nImageAt ) */
/* */
HB_FUNC( WVW_DRAWBUTTON )
{
UINT usWinNum = WVW_WHICH_WINDOW;
SIZE sz = { 0 };
POINT xy = { 0 };
RECT rc = { 0 };
int iTop, iLeft, iBottom, iRight;
int iAlign, oldTextAlign, oldBkMode;
int iTextHeight /*, iTextWidth */;
int iImageWidth, iImageHeight;
COLORREF /* oldBkColor, */ oldTextColor;
LOGBRUSH lb = { 0 };
HBRUSH hBrush;
IPicture * iPicture;
BOOL bText = HB_ISCHAR( 6 );
BOOL bImage = ! ( HB_ISNIL( 7 ) );
int iFormat = HB_ISNIL( 8 ) ? 0 : hb_parni( 8 );
COLORREF textColor = HB_ISNIL( 9 ) ? _COLORS[ 0 ] : ( COLORREF ) hb_parnl( 9 );
COLORREF bkColor = HB_ISNIL( 10 ) ? _COLORS[ 7 ] : ( COLORREF ) hb_parnl( 10 );
WIN_DATA * pWindowData;
WIN_DATA * pWindowMainData = hb_gt_wvw_GetWindowsData( 0 );
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y;
iLeft = xy.x;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
iBottom = xy.y - 1;
iRight = xy.x - 1;
lb.lbStyle = BS_SOLID;
lb.lbColor = bkColor;
lb.lbHatch = 0;
hBrush = CreateBrushIndirect( &lb );
rc.left = iLeft;
rc.top = iTop;
rc.right = iRight + 1;
rc.bottom = iBottom + 1;
FillRect( pWindowData->hdc, &rc, hBrush );
SelectObject( pWindowMainData->hdc, ( HBRUSH ) s_sApp->OriginalBrush );
DeleteObject( hBrush );
switch( iFormat )
{
case 1:
hb_gt_wvwDrawBoxRecessed( pWindowData->byWinId, iTop + 1, iLeft + 1, iBottom - 1, iRight - 1,
FALSE );
break;
case 2:
break;
case 3:
hb_gt_wvwDrawOutline( pWindowData->byWinId, iTop, iLeft, iBottom, iRight );
break;
case 4:
break;
default:
hb_gt_wvwDrawBoxRaised( pWindowData->byWinId, iTop + 1, iLeft + 1, iBottom - 1, iRight - 1,
FALSE );
break;
}
if( bText )
{
SelectObject( pWindowData->hdc, GetStockObject( DEFAULT_GUI_FONT ) );
GetTextExtentPoint32( pWindowData->hdc, hb_parcx( 6 ), strlen( hb_parcx( 6 ) ), &sz );
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;
oldTextAlign = SetTextAlign( pWindowData->hdc, iAlign );
oldBkMode = SetBkMode( pWindowData->hdc, TRANSPARENT );
oldTextColor = SetTextColor( pWindowData->hdc, textColor );
ExtTextOut( pWindowData->hdc, xy.x, xy.y, 0, NULL, hb_parcx( 6 ), strlen( hb_parcx( 6 ) ), NULL );
SetTextColor( pWindowData->hdc, oldTextColor );
SetBkMode( pWindowData->hdc, oldBkMode );
SetTextAlign( pWindowData->hdc, oldTextAlign );
}
else
iTextHeight = -1;
if( bImage )
{
iImageWidth = ( iRight - iLeft + 1 - 8 );
iImageHeight = ( iBottom - iTop + 1 - 8 - iTextHeight );
if( HB_ISNUM( 7 ) )
{
iPicture = s_sApp->iPicture[ hb_parni( 7 ) - 1 ];
hb_gt_wvwRenderPicture( usWinNum, iLeft + 4, iTop + 4, iImageWidth, iImageHeight, iPicture,
FALSE );
}
else
hb_gt_wvwDrawImage( usWinNum, iLeft + 4, iTop + 4, iImageWidth, iImageHeight, hb_parcx( 7 ),
FALSE );
}
hb_retl( TRUE );
}
/* wvw_DrawStatusBar() is meant for WVT compatibility only.
WVW_SBxxxx() functions are recommended instead.
*/
HB_FUNC( WVW_DRAWSTATUSBAR )
{
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
int iPanels = hb_parni( 2 );
int i, iNext;
int iTop, iLeft, iBottom, iRight;
POINT xy = { 0 };
USHORT usTop,
usLeft,
usBottom,
usRight;
iNext = 0;
for( i = 0; i < iPanels; i++ )
{
usTop = ( USHORT ) hb_parvni( 3, iNext + 1 );
usLeft = ( USHORT ) hb_parvni( 3, iNext + 2 );
usBottom = ( USHORT ) hb_parvni( 3, iNext + 3 );
usRight = ( USHORT ) hb_parvni( 3, iNext + 4 );
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y;
iLeft = xy.x + 1;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
iBottom = xy.y - 1;
iRight = xy.x - 2;
SelectObject( pWindowData->hdc, s_sApp->penWhite );
MoveToEx( pWindowData->hdc, iRight, iTop, NULL ); /* Right */
LineTo( pWindowData->hdc, iRight, iBottom );
MoveToEx( pWindowData->hdc, iLeft, iBottom, NULL ); /* Bottom */
LineTo( pWindowData->hdc, iRight, iBottom );
SelectObject( pWindowData->hdc, s_sApp->penDarkGray );
MoveToEx( pWindowData->hdc, iLeft, iTop, NULL ); /* Left */
LineTo( pWindowData->hdc, iLeft, iBottom );
MoveToEx( pWindowData->hdc, iLeft, iTop, NULL ); /* Top */
LineTo( pWindowData->hdc, iRight, iTop );
iNext = iNext + 4;
}
usTop = ( USHORT ) hb_parvni( 3, ( 4 * iPanels ) - 1 );
usLeft = ( USHORT ) hb_parvni( 3, 4 * iPanels );
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, NULL, NULL );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop + 1 );
xy.y -= pWindowData->byLineSpacing;
iTop = xy.y - 2;
iLeft = xy.x - 2;
iBottom = iTop;
iRight = iLeft;
SelectObject( pWindowData->hdc, s_sApp->penBlack );
MoveToEx( pWindowData->hdc, iLeft - 4, iBottom, NULL );
LineTo( pWindowData->hdc, iRight, iTop - 4 );
MoveToEx( pWindowData->hdc, iLeft - 7, iBottom, NULL );
LineTo( pWindowData->hdc, iRight, iTop - 7 );
MoveToEx( pWindowData->hdc, iLeft - 10, iBottom, NULL );
LineTo( pWindowData->hdc, iRight, iTop - 10 );
SelectObject( pWindowData->hdc, s_sApp->penWhite );
MoveToEx( pWindowData->hdc, iLeft - 5, iBottom, NULL );
LineTo( pWindowData->hdc, iRight, iTop - 5 );
MoveToEx( pWindowData->hdc, iLeft - 8, iBottom, NULL );
LineTo( pWindowData->hdc, iRight, iTop - 8 );
MoveToEx( pWindowData->hdc, iLeft - 11, iBottom, NULL );
LineTo( pWindowData->hdc, iRight, iTop - 11 );
}
/* */
/* wvw_DrawPicture( [nWinNum], nTop, nLeft, nBottom, nRight, nSlot, lTight/aAdj ) -> lOk */
/* nSlot <= 20 aAdj == { 0,0,-2,-2 } To Adjust the pixels for { Top,Left,Bottom,Right } */
/* */
HB_FUNC( WVW_DRAWPICTURE )
{
UINT usWinNum = WVW_WHICH_WINDOW;
POINT xy = { 0 };
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
int iTop, iLeft, iBottom, iRight;
int iSlot = hb_parni( 6 ) - 1;
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
BOOL bTight = HB_ISARRAY( 7 ) || HB_ISNIL( 7 ) ? FALSE : hb_parl( 7 );
BOOL bUseArray = HB_ISARRAY( 7 );
int iOLeft, iOTop, iORight, iOBottom;
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
if( bTight )
{
iOTop = 2 + 1;
iOLeft = 2 + 1;
iOBottom = -1;
iORight = -1;
}
else if( bUseArray )
{
iOTop = hb_parvni( 7, 1 );
iOLeft = hb_parvni( 7, 2 );
iOBottom = hb_parvni( 7, 3 );
iORight = hb_parvni( 7, 4 );
}
else
iOTop = iOLeft = iOBottom = iORight = 0;
if( iSlot < WVW_PICTURES_MAX )
if( s_sApp->iPicture[ iSlot ] )
{
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y + iOTop;
iLeft = xy.x + iOLeft;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
iBottom = xy.y - 1 + iOBottom;
iRight = xy.x - 1 + iORight;
hb_retl( hb_gt_wvwRenderPicture( usWinNum, iLeft, iTop, iRight - iLeft + 1, iBottom - iTop + 1, s_sApp->iPicture[ iSlot ],
FALSE )
);
}
}
/* */
/* wvw_DrawLabelEx( [nWinNum], nRow, nCol, cLabel, nAlign, nTextColor, nBkColor, nSlotFont ) */
/* */
HB_FUNC( WVW_DRAWLABELEX )
{
UINT usWinNum = WVW_WHICH_WINDOW;
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
POINT xy = { 0 };
HFONT oldFont;
int oldTextAlign;
COLORREF oldBkColor, oldTextColor;
int iSlot = hb_parni( 8 ) - 1;
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 );
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, NULL, NULL );
if( s_sApp->hUserFonts[ iSlot ] )
{
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
oldBkColor = SetBkColor( pWindowData->hdc, HB_ISNIL( 7 ) ? pWindowData->background : ( COLORREF ) hb_parnl( 7 ) );
oldTextColor = SetTextColor( pWindowData->hdc, HB_ISNIL( 6 ) ? pWindowData->foreground : ( COLORREF ) hb_parnl( 6 ) );
oldTextAlign = SetTextAlign( pWindowData->hdc, ( HB_ISNIL( 5 ) ? TA_LEFT : hb_parni( 5 ) ) );
oldFont = ( HFONT ) SelectObject( pWindowData->hdc, s_sApp->hUserFonts[ iSlot ] );
ExtTextOut( pWindowData->hdc, xy.x, xy.y, 0, NULL, hb_parcx( 4 ), strlen( hb_parcx( 4 ) ), NULL );
SelectObject( pWindowData->hdc, oldFont );
SetTextAlign( pWindowData->hdc, oldTextAlign );
SetBkColor( pWindowData->hdc, oldBkColor );
SetTextColor( pWindowData->hdc, oldTextColor );
hb_retl( TRUE );
}
hb_retl( FALSE );
}
/* 1 2 3 4 5 6 7 8 9 */
/* wvw_DrawLineEx( [nWinNum], nTop, nLeft, nBottom, nRight, nOrient, nFormat, nAlign, nSlotPen ) */
/* */
HB_FUNC( WVW_DRAWLINEEX )
{
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
POINT xy = { 0 };
int iTop, iLeft, iBottom, iRight, iOffset;
int iOrient, iFormat, iAlign;
int x, y;
HPEN hPen;
int iSlot = hb_parni( 9 ) - 1;
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y;
iLeft = xy.x;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
iBottom = xy.y - 1;
iRight = xy.x - 1;
iOrient = HB_ISNIL( 6 ) ? 0 : hb_parni( 6 );
iFormat = HB_ISNIL( 7 ) ? 0 : hb_parni( 7 );
iAlign = HB_ISNIL( 8 ) ? 0 : hb_parni( 8 );
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_sApp->hUserPens[ iSlot ];
switch( iFormat )
{
case 0: /* Raised */
if( iOrient == 0 ) /* Horizontal */
{
SelectObject( pWindowData->hdc, s_sApp->penWhite );
MoveToEx( pWindowData->hdc, x, y, NULL );
LineTo( pWindowData->hdc, iRight, y );
SelectObject( pWindowData->hdc, hPen );
MoveToEx( pWindowData->hdc, x, y + 1, NULL );
LineTo( pWindowData->hdc, iRight, y + 1 );
}
else /* Vertical */
{
SelectObject( pWindowData->hdc, s_sApp->penWhite );
MoveToEx( pWindowData->hdc, x, y, NULL );
LineTo( pWindowData->hdc, x, iBottom );
SelectObject( pWindowData->hdc, hPen );
MoveToEx( pWindowData->hdc, x + 1, y, NULL );
LineTo( pWindowData->hdc, x + 1, iBottom );
}
break;
case 1: /* Recessed */
if( iOrient == 0 ) /* Horizontal */
{
SelectObject( pWindowData->hdc, hPen );
MoveToEx( pWindowData->hdc, x, y, NULL );
LineTo( pWindowData->hdc, iRight, y );
SelectObject( pWindowData->hdc, s_sApp->penWhite );
MoveToEx( pWindowData->hdc, x, y + 1, NULL );
LineTo( pWindowData->hdc, iRight, y + 1 );
}
else /* Vertical */
{
SelectObject( pWindowData->hdc, hPen );
MoveToEx( pWindowData->hdc, x, y, NULL );
LineTo( pWindowData->hdc, x, iBottom );
SelectObject( pWindowData->hdc, s_sApp->penWhite );
MoveToEx( pWindowData->hdc, x + 1, y, NULL );
LineTo( pWindowData->hdc, x + 1, iBottom );
}
break;
case 2: /* Plain */
if( iOrient == 0 ) /* Horizontal */
{
SelectObject( pWindowData->hdc, hPen );
MoveToEx( pWindowData->hdc, x, y, NULL );
LineTo( pWindowData->hdc, iRight, y );
}
else /* Vertical */
{
SelectObject( pWindowData->hdc, hPen );
MoveToEx( pWindowData->hdc, x, y, NULL );
LineTo( pWindowData->hdc, x, iBottom );
}
break;
}
hb_retl( TRUE );
}
/* */
/* wvw_DrawOutlineEx( [nWinNum], nTop, nLeft, nBottom, nRight, nSlotPen ) */
/* */
HB_FUNC( WVW_DRAWOUTLINEEX )
{
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
APP_DATA * s_sApp = hb_gt_wvwGetAppData();
POINT xy = { 0 };
int iTop, iLeft, iBottom, iRight;
int iSlot = hb_parni( 6 ) - 1;
USHORT usTop = ( USHORT ) hb_parni( 2 ),
usLeft = ( USHORT ) hb_parni( 3 ),
usBottom = ( USHORT ) hb_parni( 4 ),
usRight = ( USHORT ) hb_parni( 5 );
if( hb_gt_wvw_GetMainCoordMode() )
hb_wvw_HBFUNCPrologue( usWinNum, &usTop, &usLeft, &usBottom, &usRight );
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y - 1;
iLeft = xy.x - 1;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
iBottom = xy.y;
iRight = xy.x;
if( s_sApp->hUserPens[ iSlot ] )
SelectObject( pWindowData->hdc, s_sApp->hUserPens[ iSlot ] );
else
SelectObject( pWindowData->hdc, s_sApp->penBlack );
hb_gt_wvwDrawOutline( usWinNum, iTop, iLeft, iBottom, iRight );
}