2009-05-04 17:52 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)
* harbour/contrib/gtwvg/gtwvg.h
* harbour/contrib/gtwvg/hbgtwvg.ch
* harbour/contrib/gtwvg/gtwvg.c
* harbour/contrib/gtwvg/wvgcore.c
* harbour/contrib/gtwvg/wvgcuig.c
* harbour/contrib/gtwvg/wvgcrt.prg
! Fixed many artifacts. Probbaly it is difficult to jot down all.
This commit is contained in:
@@ -17,6 +17,15 @@
|
||||
past entries belonging to these authors: Viktor Szakats.
|
||||
*/
|
||||
|
||||
2009-05-04 17:52 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)
|
||||
* harbour/contrib/gtwvg/gtwvg.h
|
||||
* harbour/contrib/gtwvg/hbgtwvg.ch
|
||||
* harbour/contrib/gtwvg/gtwvg.c
|
||||
* harbour/contrib/gtwvg/wvgcore.c
|
||||
* harbour/contrib/gtwvg/wvgcuig.c
|
||||
* harbour/contrib/gtwvg/wvgcrt.prg
|
||||
! Fixed many artifacts. Probbaly it is difficult to jot down all.
|
||||
|
||||
2009-05-05 03:10 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* utils/hbmk2/hbmk2.prg
|
||||
! Minor fixes to texts.
|
||||
|
||||
@@ -222,9 +222,7 @@ static void hb_gt_wvt_Free( PHB_GTWVT pWVT )
|
||||
int iIndex;
|
||||
|
||||
HB_WVT_LOCK
|
||||
|
||||
s_wvtWindows[ pWVT->iHandle ] = NULL;
|
||||
|
||||
if( --s_wvtCount == 0 )
|
||||
{
|
||||
hb_wvt_gtReleaseGuiData();
|
||||
@@ -233,7 +231,6 @@ static void hb_gt_wvt_Free( PHB_GTWVT pWVT )
|
||||
if( pWVT->hInstance )
|
||||
UnregisterClass( s_szClassName, pWVT->hInstance );
|
||||
}
|
||||
|
||||
HB_WVT_UNLOCK
|
||||
|
||||
if( pWVT->pszSelectCopy )
|
||||
@@ -298,6 +295,8 @@ static void hb_gt_wvt_Free( PHB_GTWVT pWVT )
|
||||
if( pWVT->gObjs->hBrush )
|
||||
if( pWVT->gObjs->bDestroyBrush )
|
||||
DeleteObject( pWVT->gObjs->hBrush );
|
||||
if( pWVT->gObjs->bBlock )
|
||||
hb_itemRelease( pWVT->gObjs->bBlock );
|
||||
#if ! defined( HB_OS_WIN_CE )
|
||||
if( pWVT->gObjs->iPicture )
|
||||
if( pWVT->gObjs->bDestroyPicture )
|
||||
@@ -1043,9 +1042,11 @@ static void hb_gt_wvt_ResetWindowSize( PHB_GTWVT pWVT )
|
||||
}
|
||||
}
|
||||
|
||||
SetWindowPos( pWVT->hWnd, NULL, wi.left, wi.top, width, height, SWP_NOZORDER );
|
||||
|
||||
HB_GTSELF_EXPOSEAREA( pWVT->pGT, 0, 0, pWVT->ROWS, pWVT->COLS );
|
||||
{
|
||||
int iAttr = SWP_DRAWFRAME | SWP_NOZORDER | SWP_DEFERERASE;
|
||||
SetWindowPos( pWVT->hWnd, NULL, wi.left, wi.top, width, height, iAttr );
|
||||
}
|
||||
|
||||
if( pWVT->CaretExist && !pWVT->CaretHidden )
|
||||
hb_gt_wvt_UpdateCaret( pWVT );
|
||||
@@ -1874,7 +1875,14 @@ static void hb_gt_wvt_PaintText( PHB_GTWVT pWVT, RECT updateRect )
|
||||
|
||||
static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
|
||||
{
|
||||
#if 1
|
||||
PHB_GTWVT pWVT = hb_gt_wvt_Find( hWnd );
|
||||
#else
|
||||
/*
|
||||
* The protocl below generates RT error somehwo at some other part of the code
|
||||
*/
|
||||
PHB_GTWVT pWVT = ( PHB_GTWVT ) GetWindowLongPtr( hWnd, GWL_USERDATA );
|
||||
#endif
|
||||
|
||||
if( pWVT ) switch( message )
|
||||
{
|
||||
@@ -2309,6 +2317,34 @@ static BOOL hb_gt_wvt_ValidWindowSize( HWND hWnd, int rows, int cols, HFONT hFon
|
||||
return ( width <= maxWidth ) && ( height <= maxHeight );
|
||||
}
|
||||
|
||||
static void hb_gt_wvt_ShowWindow( PHB_GTWVT pWVT )
|
||||
{
|
||||
int iCmdShow;
|
||||
|
||||
if( pWVT->pPP->bConfigured )
|
||||
{
|
||||
iCmdShow = pWVT->pPP->bVisible ? SW_SHOWNORMAL : SW_HIDE;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* If you wish to show window the way you want, put somewhere in your application
|
||||
* ANNOUNCE HB_NOSTARTUPWINDOW
|
||||
* If so compiled, then you need to issue Wvt_ShowWindow( SW_RESTORE )
|
||||
* at the point you desire in your code.
|
||||
*/
|
||||
if( hb_dynsymFind( "HB_NOSTARTUPWINDOW" ) != NULL )
|
||||
{
|
||||
iCmdShow = SW_HIDE;
|
||||
}
|
||||
else
|
||||
{
|
||||
iCmdShow = SW_SHOWNORMAL;
|
||||
}
|
||||
}
|
||||
ShowWindow( pWVT->hWnd, iCmdShow );
|
||||
}
|
||||
|
||||
static HWND hb_gt_wvt_CreateWindow( PHB_GTWVT pWVT, BOOL bResizable )
|
||||
{
|
||||
HWND hWnd, hWndParent;
|
||||
@@ -2448,13 +2484,17 @@ static HWND hb_gt_wvt_CreateWindow( PHB_GTWVT pWVT, BOOL bResizable )
|
||||
|
||||
static BOOL hb_gt_wvt_CreateConsoleWindow( PHB_GTWVT pWVT )
|
||||
{
|
||||
int iCmdShow;
|
||||
|
||||
if( !pWVT->hWnd )
|
||||
{
|
||||
pWVT->hWnd = hb_gt_wvt_CreateWindow( pWVT, pWVT->bResizable );
|
||||
if( !pWVT->hWnd )
|
||||
hb_errInternal( 10001, "Failed to create WVT window", NULL, NULL );
|
||||
|
||||
/* An experimental call - processed at WndProc to recognize pWVT off hWnd */
|
||||
#if 0
|
||||
SetWindowLongPtr( pWVT->hWnd, GWL_USERDATA, ( LONG_PTR ) pWVT );
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
if( ! GetSystemMetrics( SM_REMOTESESSION ) )
|
||||
{
|
||||
@@ -2515,37 +2555,12 @@ static BOOL hb_gt_wvt_CreateConsoleWindow( PHB_GTWVT pWVT )
|
||||
}
|
||||
}
|
||||
|
||||
/* Manage Windows Open Mode */
|
||||
{
|
||||
if( pWVT->pPP->bConfigured )
|
||||
{
|
||||
iCmdShow = pWVT->pPP->bVisible ? SW_SHOWNORMAL : SW_HIDE;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* If you wish to show window the way you want, put somewhere in your application
|
||||
* ANNOUNCE HB_NOSTARTUPWINDOW
|
||||
* If so compiled, then you need to issue Wvt_ShowWindow( SW_RESTORE )
|
||||
* at the point you desire in your code.
|
||||
*/
|
||||
if( hb_dynsymFind( "HB_NOSTARTUPWINDOW" ) != NULL )
|
||||
{
|
||||
iCmdShow = SW_HIDE;
|
||||
}
|
||||
else
|
||||
{
|
||||
iCmdShow = SW_SHOWNORMAL;
|
||||
}
|
||||
}
|
||||
ShowWindow( pWVT->hWnd, iCmdShow );
|
||||
UpdateWindow( pWVT->hWnd );
|
||||
}
|
||||
/* Show | Update Window */
|
||||
hb_gt_wvt_ShowWindow( pWVT );
|
||||
|
||||
/* Initialize GUI base */
|
||||
{
|
||||
pWVT->hdc = GetDC( pWVT->hWnd );
|
||||
pWVT->hCompDC = CreateCompatibleDC( pWVT->hdc );
|
||||
hb_wvt_gtInitGui( pWVT );
|
||||
|
||||
if( b_MouseEnable )
|
||||
@@ -2582,6 +2597,7 @@ static void hb_gt_wvt_Init( PHB_GT pGT, HB_FHANDLE hFilenoStdin, HB_FHANDLE hFil
|
||||
HB_GTSUPER_INIT( pGT, hFilenoStdin, hFilenoStdout, hFilenoStderr );
|
||||
HB_GTSELF_RESIZE( pGT, pWVT->ROWS, pWVT->COLS );
|
||||
HB_GTSELF_SEMICOLD( pGT );
|
||||
|
||||
/* hb_gt_wvt_CreateConsoleWindow( pWVT ); */
|
||||
}
|
||||
|
||||
@@ -3039,23 +3055,25 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
|
||||
{
|
||||
if( ( hb_itemType( pInfo->pNewVal ) & HB_IT_STRING ) )
|
||||
{
|
||||
/* HICON hIconToFree = ( pWVT->hIcon && pWVT->bIconToFree ) ? pWVT->hIcon : NULL; */
|
||||
HICON hIconToFree = pWVT->hIcon;
|
||||
LPTSTR lpImage;
|
||||
HICON hIcon;
|
||||
|
||||
lpImage = HB_TCHAR_CONVTO( hb_itemGetCPtr( pInfo->pNewVal ) );
|
||||
pWVT->bIconToFree = TRUE;
|
||||
pWVT->hIcon = ( HICON ) LoadImage( ( HINSTANCE ) NULL, lpImage,
|
||||
hIcon = ( HICON ) LoadImage( ( HINSTANCE ) NULL, lpImage,
|
||||
IMAGE_ICON, 0, 0, LR_LOADFROMFILE );
|
||||
HB_TCHAR_FREE( lpImage );
|
||||
if( hIcon )
|
||||
{
|
||||
if( pWVT->hIcon )
|
||||
DestroyIcon( pWVT->hIcon );
|
||||
|
||||
pWVT->hIcon = hIcon;
|
||||
}
|
||||
if( pWVT->hWnd )
|
||||
{
|
||||
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_SMALL, ( LPARAM ) pWVT->hIcon ); /* Set Title Bar Icon */
|
||||
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_BIG , ( LPARAM ) pWVT->hIcon ); /* Set Task List Icon */
|
||||
}
|
||||
|
||||
if( hIconToFree )
|
||||
DestroyIcon( hIconToFree );
|
||||
}
|
||||
pInfo->pResult = hb_itemPutNInt( pInfo->pResult, ( HB_PTRDIFF ) pWVT->hIcon );
|
||||
break;
|
||||
@@ -3065,41 +3083,47 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
|
||||
{
|
||||
if( hb_itemType( pInfo->pNewVal ) & HB_IT_STRING )
|
||||
{
|
||||
/* HICON hIconToFree = ( pWVT->hIcon && pWVT->bIconToFree ) ? pWVT->hIcon : NULL; */
|
||||
HICON hIconToFree = pWVT->hIcon;
|
||||
LPTSTR lpIcon;
|
||||
LPTSTR lpImage;
|
||||
HICON hIcon;
|
||||
|
||||
lpIcon = HB_TCHAR_CONVTO( hb_itemGetCPtr( pInfo->pNewVal ) );
|
||||
pWVT->bIconToFree = FALSE;
|
||||
pWVT->hIcon = LoadIcon( pWVT->hInstance, lpIcon );
|
||||
HB_TCHAR_FREE( lpIcon );
|
||||
lpImage = HB_TCHAR_CONVTO( hb_itemGetCPtr( pInfo->pNewVal ) );
|
||||
hIcon = LoadIcon( pWVT->hInstance, lpImage );
|
||||
HB_TCHAR_FREE( lpImage );
|
||||
if( hIcon )
|
||||
{
|
||||
if( pWVT->hIcon )
|
||||
DestroyIcon( pWVT->hIcon );
|
||||
|
||||
pWVT->hIcon = hIcon;
|
||||
}
|
||||
|
||||
if( pWVT->hWnd )
|
||||
{
|
||||
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_SMALL, ( LPARAM ) pWVT->hIcon ); /* Set Title Bar Icon */
|
||||
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_BIG , ( LPARAM ) pWVT->hIcon ); /* Set Task List Icon */
|
||||
}
|
||||
|
||||
if( hIconToFree )
|
||||
DestroyIcon( hIconToFree );
|
||||
}
|
||||
else if( hb_itemType( pInfo->pNewVal ) & HB_IT_NUMERIC )
|
||||
{
|
||||
HICON hIconToFree = ( pWVT->hIcon && pWVT->bIconToFree ) ? pWVT->hIcon : NULL;
|
||||
|
||||
pWVT->bIconToFree = FALSE;
|
||||
pWVT->hIcon = LoadIcon( pWVT->hInstance,
|
||||
MAKEINTRESOURCE( ( HB_LONG )
|
||||
hb_itemGetNInt( pInfo->pNewVal ) ) );
|
||||
|
||||
if( pWVT->hWnd )
|
||||
if( hb_itemGetNInt( pInfo->pNewVal ) != 0 )
|
||||
{
|
||||
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_SMALL, ( LPARAM ) pWVT->hIcon ); /* Set Title Bar Icon */
|
||||
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_BIG , ( LPARAM ) pWVT->hIcon ); /* Set Task List Icon */
|
||||
}
|
||||
HICON hIcon = LoadIcon( pWVT->hInstance,
|
||||
MAKEINTRESOURCE( ( HB_LONG )
|
||||
hb_itemGetNInt( pInfo->pNewVal ) ) );
|
||||
if( hIcon )
|
||||
{
|
||||
if( pWVT->hIcon )
|
||||
DestroyIcon( pWVT->hIcon );
|
||||
|
||||
if( hIconToFree )
|
||||
DestroyIcon( hIconToFree );
|
||||
pWVT->hIcon = hIcon;
|
||||
}
|
||||
|
||||
if( pWVT->hWnd )
|
||||
{
|
||||
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_SMALL, ( LPARAM ) pWVT->hIcon ); /* Set Title Bar Icon */
|
||||
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_BIG , ( LPARAM ) pWVT->hIcon ); /* Set Task List Icon */
|
||||
}
|
||||
}
|
||||
}
|
||||
pInfo->pResult = hb_itemPutNInt( pInfo->pResult, ( HB_PTRDIFF ) pWVT->hIcon );
|
||||
break;
|
||||
@@ -3915,6 +3939,7 @@ static void hb_gt_wvt_Refresh( PHB_GT pGT )
|
||||
pWVT = HB_GTWVT_GET( pGT );
|
||||
if( pWVT )
|
||||
{
|
||||
#if 1
|
||||
if( !pWVT->hWnd && pWVT->fInit )
|
||||
hb_gt_wvt_CreateConsoleWindow( pWVT );
|
||||
|
||||
@@ -3923,6 +3948,18 @@ static void hb_gt_wvt_Refresh( PHB_GT pGT )
|
||||
SendNotifyMessage( pWVT->hWnd, WM_MY_UPDATE_CARET, 0, 0 );
|
||||
hb_gt_wvt_ProcessMessages( pWVT );
|
||||
}
|
||||
#else
|
||||
if( pWVT->hWnd )
|
||||
{
|
||||
if( !pWVT->fInit )
|
||||
{
|
||||
pWVT->fInit = TRUE;
|
||||
hb_gt_wvt_ShowWindow( pWVT );
|
||||
}
|
||||
SendNotifyMessage( pWVT->hWnd, WM_MY_UPDATE_CARET, 0, 0 );
|
||||
hb_gt_wvt_ProcessMessages( pWVT );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4317,11 +4354,6 @@ static void hb_wvt_gtExitGui( PHB_GTWVT pWVT )
|
||||
{
|
||||
DestroyWindow( pWVT->hWndTT );
|
||||
}
|
||||
if( pWVT->hCompDC )
|
||||
{
|
||||
DeleteDC( pWVT->hCompDC );
|
||||
pWVT->hCompDC = NULL;
|
||||
}
|
||||
if( pWVT->hGuiDC )
|
||||
{
|
||||
DeleteDC( pWVT->hGuiDC );
|
||||
|
||||
@@ -79,6 +79,7 @@
|
||||
#include <ole2.h>
|
||||
#include <oleauto.h>
|
||||
#if ! defined( HB_OS_WIN_CE )
|
||||
#include <ocidl.h>
|
||||
#include <olectl.h>
|
||||
#endif
|
||||
#include <commdlg.h>
|
||||
@@ -255,24 +256,6 @@ typedef struct
|
||||
int iRight ;
|
||||
} HB_GOBJ_OFFSET ;
|
||||
|
||||
#define GOBJ_OBJTYPE_BOXRAISED 1
|
||||
#define GOBJ_OBJTYPE_BOXRECESSED 2
|
||||
#define GOBJ_OBJTYPE_BOXGET 3
|
||||
#define GOBJ_OBJTYPE_BOXGROUP 4
|
||||
#define GOBJ_OBJTYPE_BOXGROUPRAISED 5
|
||||
#define GOBJ_OBJTYPE_PICTURE 6
|
||||
#define GOBJ_OBJTYPE_LINE 7
|
||||
#define GOBJ_OBJTYPE_LINEEX 8
|
||||
#define GOBJ_OBJTYPE_LABEL 9
|
||||
#define GOBJ_OBJTYPE_LABELEX 10
|
||||
#define GOBJ_OBJTYPE_OUTLINE 11
|
||||
#define GOBJ_OBJTYPE_ELLIPSE 12
|
||||
#define GOBJ_OBJTYPE_RECTANGLE 13
|
||||
#define GOBJ_OBJTYPE_ROUNDRECT 14
|
||||
#define GOBJ_OBJTYPE_COLORRECT 15
|
||||
#define GOBJ_OBJTYPE_SHADEDRECT 16
|
||||
#define GOBJ_OBJTYPE_TEXTBOX 17
|
||||
#define GOBJ_OBJTYPE_OUTLINEEX 18
|
||||
|
||||
typedef struct _tag_GOBJS
|
||||
{
|
||||
@@ -307,6 +290,7 @@ typedef struct _tag_GOBJS
|
||||
BOOL bDestroyPicture ;
|
||||
TRIVERTEX vert[ 2 ] ;
|
||||
LPTSTR lpText ;
|
||||
PHB_ITEM bBlock ;
|
||||
struct _tag_GOBJS * gObjNext ;
|
||||
|
||||
} HB_GOBJS, * PHB_GOBJS ;
|
||||
@@ -438,8 +422,6 @@ typedef struct
|
||||
int iFactor; /* Transparency factor 0~255 */
|
||||
|
||||
HDC hdc; /* Handle to Windows Device Context */
|
||||
HDC hCompDC; /* Compatible DC to _s.hdc */
|
||||
HDC hWndDC;
|
||||
|
||||
int LastMenuEvent; /* Last menu item selected */
|
||||
int MenuKeyEvent; /* User definable event number for windows menu command */
|
||||
|
||||
@@ -161,6 +161,31 @@
|
||||
#define GOBJ_IMAGESOURCE_RESOURCE 2
|
||||
#define GOBJ_IMAGESOURCE_FILE 3
|
||||
|
||||
|
||||
/* CUI-GUI Draw Objects */
|
||||
#define GOBJ_OBJTYPE_BOXRAISED 1
|
||||
#define GOBJ_OBJTYPE_BOXRECESSED 2
|
||||
#define GOBJ_OBJTYPE_BOXGET 3
|
||||
#define GOBJ_OBJTYPE_BOXGROUP 4
|
||||
#define GOBJ_OBJTYPE_BOXGROUPRAISED 5
|
||||
#define GOBJ_OBJTYPE_PICTURE 6
|
||||
#define GOBJ_OBJTYPE_LINE 7
|
||||
#define GOBJ_OBJTYPE_LINEEX 8
|
||||
#define GOBJ_OBJTYPE_LABEL 9
|
||||
#define GOBJ_OBJTYPE_LABELEX 10
|
||||
#define GOBJ_OBJTYPE_OUTLINE 11
|
||||
#define GOBJ_OBJTYPE_ELLIPSE 12
|
||||
#define GOBJ_OBJTYPE_RECTANGLE 13
|
||||
#define GOBJ_OBJTYPE_ROUNDRECT 14
|
||||
#define GOBJ_OBJTYPE_COLORRECT 15
|
||||
#define GOBJ_OBJTYPE_SHADEDRECT 16
|
||||
#define GOBJ_OBJTYPE_TEXTBOX 17
|
||||
#define GOBJ_OBJTYPE_OUTLINEEX 18
|
||||
#define GOBJ_OBJTYPE_GRIDVERT 19
|
||||
#define GOBJ_OBJTYPE_GRIDHORZ 20
|
||||
|
||||
#define GOBJ_OBJTYPE_OBJECT 25 /* One of the above objects */
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
#endif /* _HBGTWVG_CH */
|
||||
|
||||
@@ -3124,17 +3124,12 @@ HB_FUNC( WVT_SAVESCREEN )
|
||||
|
||||
hBmp = CreateCompatibleBitmap( _s->hdc, iWidth, iHeight ) ;
|
||||
|
||||
#if 0
|
||||
oldBmp = (HBITMAP) SelectObject( _s->hCompDC, hBmp );
|
||||
BitBlt( _s->hCompDC, 0, 0, iWidth, iHeight, _s->hdc, iLeft, iTop, SRCCOPY );
|
||||
SelectObject( _s->hCompDC, oldBmp );
|
||||
#else
|
||||
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 );
|
||||
#endif
|
||||
|
||||
hb_arraySetNI( info, 1, iWidth );
|
||||
hb_arraySetNI( info, 2, iHeight );
|
||||
hb_arraySetNInt( info, 3, ( HB_PTRDIFF ) hBmp );
|
||||
@@ -3169,7 +3164,6 @@ HB_FUNC( WVT_RESTSCREEN )
|
||||
iWidth = iRight - iLeft + 1 ;
|
||||
iHeight = iBottom - iTop + 1 ;
|
||||
|
||||
#if 1
|
||||
hCompDC = CreateCompatibleDC( _s->hdc );
|
||||
hBmp = (HBITMAP) SelectObject( hCompDC, ( HBITMAP ) ( HB_PTRDIFF ) hb_parnint( 5,3 ) );
|
||||
if ( hBmp )
|
||||
@@ -3200,52 +3194,12 @@ HB_FUNC( WVT_RESTSCREEN )
|
||||
}
|
||||
}
|
||||
DeleteDC( hCompDC );
|
||||
#else
|
||||
hBmp = (HBITMAP) SelectObject( _s->hCompDC, ( HBITMAP ) ( HB_PTRDIFF ) hb_parnint( 5,3 ) );
|
||||
if ( hBmp )
|
||||
{
|
||||
if ( ( iWidth == hb_parni( 5,1 ) ) && ( iHeight == hb_parni( 5,2 ) ) )
|
||||
{
|
||||
if ( BitBlt( _s->hdc,
|
||||
iLeft,
|
||||
iTop,
|
||||
iWidth,
|
||||
iHeight,
|
||||
_s->hCompDC,
|
||||
0,
|
||||
0,
|
||||
SRCCOPY ) )
|
||||
{
|
||||
bResult = TRUE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( StretchBlt( _s->hdc,
|
||||
iLeft,
|
||||
iTop,
|
||||
iWidth,
|
||||
iHeight,
|
||||
_s->hCompDC,
|
||||
0,
|
||||
0,
|
||||
hb_parni( 5,1 ),
|
||||
hb_parni( 5,2 ),
|
||||
SRCCOPY ) )
|
||||
{
|
||||
bResult = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
SelectObject( _s->hCompDC, hBmp );
|
||||
|
||||
if ( ! bDoNotDestroyBMP )
|
||||
{
|
||||
SelectObject( hCompDC, hBmp );
|
||||
DeleteObject( ( HBITMAP ) ( HB_PTRDIFF ) hb_parnint( 5,3 ) );
|
||||
}
|
||||
|
||||
hb_retl( bResult );
|
||||
}
|
||||
|
||||
|
||||
@@ -406,11 +406,10 @@ METHOD destroy() CLASS WvgCrt
|
||||
ENDIF
|
||||
|
||||
if ::lModal
|
||||
::pGT := NIL
|
||||
hb_gtSelect( ::pGTp )
|
||||
hb_gtInfo( HB_GTI_ENABLE , ::pGTp )
|
||||
hb_gtSelect( ::pGTp )
|
||||
hb_gtInfo( HB_GTI_SETFOCUS, ::pGTp )
|
||||
endif
|
||||
ENDIF
|
||||
|
||||
::pGT := NIL
|
||||
::pGTp := NIL
|
||||
|
||||
@@ -97,6 +97,7 @@ static PHB_GOBJS hb_wvg_ObjectNew( PHB_GTWVT pWVT )
|
||||
gObj->iHandle = iHandle;
|
||||
gObj->iState = GOBJ_OBJSTATE_ENABLED;
|
||||
gObj->lpText = NULL;
|
||||
gObj->bBlock = NULL;
|
||||
|
||||
hb_retni( iHandle );
|
||||
|
||||
@@ -153,6 +154,8 @@ HB_FUNC( WVG_CLEARGUIOBJECTS )
|
||||
if( pWVT->gObjs->hBrush )
|
||||
if( pWVT->gObjs->bDestroyBrush )
|
||||
DeleteObject( pWVT->gObjs->hBrush );
|
||||
if( pWVT->gObjs->bBlock )
|
||||
hb_itemRelease( pWVT->gObjs->bBlock );
|
||||
#if ! defined( HB_OS_WIN_CE )
|
||||
if( pWVT->gObjs->iPicture )
|
||||
if( pWVT->gObjs->bDestroyPicture )
|
||||
@@ -1434,23 +1437,191 @@ static void hb_wvg_RenderPicture( PHB_GTWVT pWVT, PHB_GOBJS gObj, int iLeft, int
|
||||
#endif
|
||||
}
|
||||
/*----------------------------------------------------------------------*/
|
||||
/*
|
||||
Wvg_Object( nObj, bBlock )
|
||||
nObj == one of the objects == GOBJ_OBJTYPE_ROUNDRECT | GOBJ_OBJTYPE_IMAGE | etc
|
||||
bBlock == Block returning the array conataining as many elements as necessary for the given object
|
||||
Also it will return those array elements in the same order expected by the object to draw
|
||||
|
||||
This protocol is necessary for dyanamic coordinates which might have been changed by the
|
||||
applications, like TBrowse dimensions.
|
||||
|
||||
Wvg_Object( GOBJ_OBJTYPE_BOXRAISED, {|| oBrw:nTop, oBrw:nLeft, oBrw:nBottom, oBrw:nRight, {-2,-2,2,2} } )
|
||||
*/
|
||||
HB_FUNC( WVG_OBJECT )
|
||||
{
|
||||
PHB_GTWVT pWVT = hb_wvt_gtGetWVT();
|
||||
HB_GOBJS *gObj = hb_wvg_ObjectNew( pWVT );
|
||||
|
||||
gObj->iObjType = GOBJ_OBJTYPE_OBJECT;
|
||||
|
||||
gObj->iData = hb_parni( 1 ); /* Object to be executed */
|
||||
gObj->bBlock = hb_itemNew( hb_param( 2, HB_IT_BLOCK ) );
|
||||
|
||||
gObj->gObjNext = pWVT->gObjs;
|
||||
pWVT->gObjs = gObj;
|
||||
}
|
||||
/*----------------------------------------------------------------------*/
|
||||
/*
|
||||
* Wvg_Object( GOBJ_OBJTYPE_GRIDVERT, {|| { nTop, nBottom, aCols, nCols, aPxlOff } } )
|
||||
* aPxlOff[ 1 ] and aPxlOff[ 3 ] used
|
||||
*/
|
||||
static void hb_wvg_GridVert( PHB_GTWVT pWVT, PHB_ITEM pArray, RECT *uRect )
|
||||
{
|
||||
PHB_ITEM pCols = hb_arrayGetItemPtr( pArray, 3 );
|
||||
int iTabs = hb_arrayLen( pCols );
|
||||
|
||||
if( iTabs > 0 )
|
||||
{
|
||||
int x, i, iTop, iBottom;
|
||||
|
||||
iTop = ( hb_arrayGetNI( pArray, 1 ) * ( int ) pWVT->PTEXTSIZE.y );
|
||||
iBottom = ( ( hb_arrayGetNI( pArray, 2 ) + 1 ) * ( int ) pWVT->PTEXTSIZE.y ) - 1;
|
||||
|
||||
if( ( iTop >= uRect->top && iTop <= uRect->bottom ) ||
|
||||
( iBottom >= uRect->top && iBottom <= uRect->bottom ) )
|
||||
{
|
||||
HDC hdc = pWVT->hGuiDC;
|
||||
SelectObject( hdc, pWVT->currentPen );
|
||||
for ( i = 1; i <= iTabs; i++ )
|
||||
{
|
||||
x = ( hb_arrayGetNI( pCols, i ) * pWVT->PTEXTSIZE.x );
|
||||
MoveToEx( hdc, x, iTop, NULL );
|
||||
LineTo( hdc, x, iBottom );
|
||||
}
|
||||
|
||||
/* Play it on screen too directly as this area is not going to be revalidated
|
||||
* we are not to invalidate this region as it is redrawn many many times.
|
||||
* perhaps we can avoid drawing on the image ???
|
||||
*/
|
||||
hdc = pWVT->hdc;
|
||||
SelectObject( hdc, pWVT->currentPen );
|
||||
for ( i = 1; i <= iTabs; i++ )
|
||||
{
|
||||
x = ( hb_arrayGetNI( pCols, i ) * pWVT->PTEXTSIZE.x );
|
||||
MoveToEx( hdc, x, iTop, NULL );
|
||||
LineTo( hdc, x, iBottom );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
static void hb_wvg_GridHorz( PHB_GTWVT pWVT, PHB_ITEM pArray, RECT *uRect )
|
||||
{
|
||||
int iAtRow = hb_arrayGetNI( pArray, 1 );
|
||||
int iRows = hb_arrayGetNI( pArray, 4 );
|
||||
int i, y, iLeft, iRight, iTop, iBottom;
|
||||
HDC hdc;
|
||||
|
||||
iLeft = ( hb_arrayGetNI( pArray, 2 ) * pWVT->PTEXTSIZE.x );
|
||||
iRight = ( ( ( hb_arrayGetNI( pArray, 3 ) + 1 ) * pWVT->PTEXTSIZE.x ) - 1 );
|
||||
iTop = iAtRow * pWVT->PTEXTSIZE.y;
|
||||
iBottom = ( iAtRow + iRows ) * pWVT->PTEXTSIZE.y; // do not add 1
|
||||
|
||||
if( ( uRect->left > iRight ) || ( uRect->top > iBottom ) ||
|
||||
( uRect->bottom < iTop ) || ( uRect->right < iLeft ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
hdc = pWVT->hdc;
|
||||
SelectObject( hdc, pWVT->currentPen );
|
||||
for ( i = 0; i < iRows; i++ )
|
||||
{
|
||||
y = ( ( iAtRow ) * pWVT->PTEXTSIZE.y );
|
||||
MoveToEx( hdc, iLeft, y, NULL );
|
||||
LineTo( hdc, iRight, y );
|
||||
iAtRow++;
|
||||
}
|
||||
|
||||
hdc = pWVT->hGuiDC;
|
||||
SelectObject( hdc, pWVT->currentPen );
|
||||
for ( i = 0; i < iRows; i++ )
|
||||
{
|
||||
y = ( ( iAtRow ) * pWVT->PTEXTSIZE.y );
|
||||
MoveToEx( hdc, iLeft, y, NULL );
|
||||
LineTo( hdc, iRight, y );
|
||||
iAtRow++;
|
||||
}
|
||||
}
|
||||
/*----------------------------------------------------------------------*/
|
||||
/* Owner Draw Implementation */
|
||||
/*----------------------------------------------------------------------*/
|
||||
void hb_gt_wvt_PaintGObjects( PHB_GTWVT pWVT, RECT *uRect )
|
||||
{
|
||||
PHB_GOBJS gObj = pWVT->gObjs;
|
||||
int iTop, iLeft, iBottom, iRight;
|
||||
int iObjType;
|
||||
|
||||
while( gObj )
|
||||
{
|
||||
iObjType = 0;
|
||||
|
||||
if( gObj->iState == GOBJ_OBJSTATE_ENABLED )
|
||||
{
|
||||
iTop = ( pWVT->PTEXTSIZE.y * gObj->iTop ) + gObj->aOffset.iTop;
|
||||
iLeft = ( pWVT->PTEXTSIZE.x * gObj->iLeft ) + gObj->aOffset.iLeft;
|
||||
iBottom = ( pWVT->PTEXTSIZE.y * ( gObj->iBottom + 1 ) ) - 1 + gObj->aOffset.iBottom;
|
||||
iRight = ( pWVT->PTEXTSIZE.x * ( gObj->iRight + 1 ) ) - 1 + gObj->aOffset.iRight;
|
||||
if( gObj->iObjType == GOBJ_OBJTYPE_OBJECT )
|
||||
{
|
||||
if( hb_vmRequestReenter() )
|
||||
{
|
||||
PHB_ITEM pArray;
|
||||
|
||||
switch( gObj->iObjType )
|
||||
hb_vmPushEvalSym();
|
||||
hb_vmPush( gObj->bBlock );
|
||||
hb_vmSend( 0 );
|
||||
|
||||
pArray = hb_param( -1, HB_IT_ARRAY );
|
||||
|
||||
if( pArray && hb_arrayLen( pArray ) >= 3 )
|
||||
{
|
||||
iObjType = gObj->iData;
|
||||
|
||||
if( iObjType == GOBJ_OBJTYPE_GRIDVERT )
|
||||
{
|
||||
if( hb_arrayGetNI( pArray, 4 ) > 0 )
|
||||
{
|
||||
hb_wvg_GridVert( pWVT, pArray, uRect );
|
||||
}
|
||||
}
|
||||
else if( iObjType == GOBJ_OBJTYPE_GRIDHORZ )
|
||||
{
|
||||
hb_wvg_GridHorz( pWVT, pArray, uRect );
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Take care of offsets 5th element */
|
||||
iTop = ( pWVT->PTEXTSIZE.y * hb_arrayGetNI( pArray,1 ) );
|
||||
iLeft = ( pWVT->PTEXTSIZE.x * hb_arrayGetNI( pArray,2 ) );
|
||||
iBottom = ( pWVT->PTEXTSIZE.y * ( hb_arrayGetNI( pArray,3 ) + 1 ) ) - 1;
|
||||
iRight = ( pWVT->PTEXTSIZE.x * ( hb_arrayGetNI( pArray,4 ) + 1 ) ) - 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
iObjType = 0;
|
||||
}
|
||||
/* C A R E F U L */
|
||||
#if 0
|
||||
if( pArray )
|
||||
{
|
||||
//hb_itemRelease( pArray );
|
||||
//pArray = NULL;
|
||||
}
|
||||
#endif
|
||||
hb_vmRequestRestore();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
iObjType = gObj->iObjType;
|
||||
|
||||
iTop = ( pWVT->PTEXTSIZE.y * gObj->iTop ) + gObj->aOffset.iTop;
|
||||
iLeft = ( pWVT->PTEXTSIZE.x * gObj->iLeft ) + gObj->aOffset.iLeft;
|
||||
iBottom = ( pWVT->PTEXTSIZE.y * ( gObj->iBottom + 1 ) ) - 1 + gObj->aOffset.iBottom;
|
||||
iRight = ( pWVT->PTEXTSIZE.x * ( gObj->iRight + 1 ) ) - 1 + gObj->aOffset.iRight;
|
||||
}
|
||||
|
||||
switch( iObjType )
|
||||
{
|
||||
case GOBJ_OBJTYPE_BOXRAISED:
|
||||
case GOBJ_OBJTYPE_BOXRECESSED:
|
||||
@@ -1472,7 +1643,7 @@ void hb_gt_wvt_PaintGObjects( PHB_GTWVT pWVT, RECT *uRect )
|
||||
}
|
||||
else
|
||||
{
|
||||
switch( gObj->iObjType )
|
||||
switch( iObjType )
|
||||
{
|
||||
case GOBJ_OBJTYPE_BOXRAISED:
|
||||
hb_wvg_BoxRaised( pWVT, iLeft-1, iTop-1, iRight+1, iBottom+1 );
|
||||
@@ -1511,7 +1682,7 @@ void hb_gt_wvt_PaintGObjects( PHB_GTWVT pWVT, RECT *uRect )
|
||||
}
|
||||
else
|
||||
{
|
||||
switch( gObj->iObjType )
|
||||
switch( iObjType )
|
||||
{
|
||||
|
||||
case GOBJ_OBJTYPE_LINE:
|
||||
|
||||
Reference in New Issue
Block a user