2008-11-02 00:40 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)

* harbour/contrib/gtwvg/gtwvg.c
  * harbour/contrib/gtwvg/gtwvg.h
  * harbour/contrib/gtwvg/hbgtwvg.ch
  * harbour/contrib/gtwvg/wvgpaint.prg

    ! Synchronized with GTWVT.

    + Added HB_GTI_* hb_gtInfo() constants:
         HB_GTI_PRESPARAMS  // provides mechanism to configure windows appearance and behavior
         HB_GTI_ENABLE      // enables window to receive input focus with specified GT
         HB_GTI_DISABLE     // disables window to accept input focus with specified GT
         HB_GTI_SETFOCUS    // sets the input focus to specified GT

    + Added HB_GT_PP structure supporting design-time presentation
      parameters via HB_GTI_PRESPARAMS:
         HB_GTI_PP_EXSTYLE  // extended style of the window
         HB_GTI_PP_STYLE    // normal style of the window
         HB_GTI_PP_X        // left position by pixel | top position by row
         HB_GTI_PP_Y        // top position by pixel | left position by col
         HB_GTI_PP_WIDTH    // width of the window by pixel | number of rows in window
         HB_GTI_PP_HEIGHT   // height of the window by pixel | number of columns in window
         HB_GTI_PP_PARENT   // parent GT if window needs to be modal and/or other usage
         HB_GTI_PP_VISIBLE  // flag to specify if the window is made visible immediate after this call
         HB_GTI_PP_ROWCOLS  // flag to interpret X,Y,WIDTH,HEIGHT as Top,Left,Rows,Cols
       
      ;IMPLEMENTS the behavioral changes to current GT window invoked 
                  either by hb_gtCreate() or hb_gtSelect() functions by specifying
                  an array of 9 elements ( bound to increase in future ) via
                  hb_gtInfo( HB_GTI_PRESPARAMS, aPresParams ) where <aPresParams>
                  contains elements described as above:
                     1. ExStyle                N   [D] 0
                     2. Style                  N       WS_OVERLAPPEDWINDOW
                     3. x[pxl] top[row]        N       0
                     4. y[pxl] left[col]       N       0
                     5. width[pxl]  rows[row]  N       CW_USEDEFAULT
                     6. height[pxl] cols[col]  N       CW_USEDEFAULT
                     7. Parent GT              P       NIL
                     8. Visibility             L       FALSE
                     9. RowCols                L       FALSE
              <aPresParams> must be passed with all 9 elements even if
              you want only few to be changed.

  * harbour/contrib/gtwvg/tests/demowvg.prg
    ! Updated to demonstrate above concept to show up a modal dialog in the 
      same thread on top of a threaded window. Try to click on the parent window.
      <Traditional><Browser><F3> will show up this modal dialog. 

    ;NOTE : Please do not use literals to define members, always use
            #defines from hbgtwvg.ch as it is a work in progress and is possible
            that few of the definitions may change in future.
This commit is contained in:
Pritpal Bedi
2008-11-02 07:41:55 +00:00
parent b56888018a
commit 310c5e2b02
6 changed files with 563 additions and 253 deletions

View File

@@ -8,6 +8,58 @@
2008-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org)
*/
2008-11-02 00:40 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)
* harbour/contrib/gtwvg/gtwvg.c
* harbour/contrib/gtwvg/gtwvg.h
* harbour/contrib/gtwvg/hbgtwvg.ch
* harbour/contrib/gtwvg/wvgpaint.prg
! Synchronized with GTWVT.
+ Added HB_GTI_* hb_gtInfo() constants:
HB_GTI_PRESPARAMS // provides mechanism to configure windows appearance and behavior
HB_GTI_ENABLE // enables window to receive input focus with specified GT
HB_GTI_DISABLE // disables window to accept input focus with specified GT
HB_GTI_SETFOCUS // sets the input focus to specified GT
+ Added HB_GT_PP structure supporting design-time presentation
parameters via HB_GTI_PRESPARAMS:
HB_GTI_PP_EXSTYLE // extended style of the window
HB_GTI_PP_STYLE // normal style of the window
HB_GTI_PP_X // left position by pixel | top position by row
HB_GTI_PP_Y // top position by pixel | left position by col
HB_GTI_PP_WIDTH // width of the window by pixel | number of rows in window
HB_GTI_PP_HEIGHT // height of the window by pixel | number of columns in window
HB_GTI_PP_PARENT // parent GT if window needs to be modal and/or other usage
HB_GTI_PP_VISIBLE // flag to specify if the window is made visible immediate after this call
HB_GTI_PP_ROWCOLS // flag to interpret X,Y,WIDTH,HEIGHT as Top,Left,Rows,Cols
;IMPLEMENTS the behavioral changes to current GT window invoked
either by hb_gtCreate() or hb_gtSelect() functions by specifying
an array of 9 elements ( bound to increase in future ) via
hb_gtInfo( HB_GTI_PRESPARAMS, aPresParams ) where <aPresParams>
contains elements described as above:
1. ExStyle N [D] 0
2. Style N WS_OVERLAPPEDWINDOW
3. x[pxl] top[row] N 0
4. y[pxl] left[col] N 0
5. width[pxl] rows[row] N CW_USEDEFAULT
6. height[pxl] cols[col] N CW_USEDEFAULT
7. Parent GT P NIL
8. Visibility L FALSE
9. RowCols L FALSE
<aPresParams> must be passed with all 9 elements even if
you want only few to be changed.
* harbour/contrib/gtwvg/tests/demowvg.prg
! Updated to demonstrate above concept to show up a modal dialog in the
same thread on top of a threaded window. Try to click on the parent window.
<Traditional><Browser><F3> will show up this modal dialog.
;NOTE : Please do not use literals to define members, always use
#defines from hbgtwvg.ch as it is a work in progress and is possible
that few of the definitions may change in future.
2008-11-02 07:39 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* source/rtl/version.c
! Added missing header from previous change.

View File

@@ -97,7 +97,7 @@ static HB_CRITICAL_NEW( s_wvtMtx );
#define HB_WVT_LOCK hb_threadEnterCriticalSection( &s_wvtMtx );
#define HB_WVT_UNLOCK hb_threadLeaveCriticalSection( &s_wvtMtx );
static PHB_GTWVT s_wvtWindows[WVT_MAX_WINDOWS];
static PHB_GTWVT s_wvtWindows[ WVT_MAX_WINDOWS ];
static int s_wvtCount = 0;
static const TCHAR s_szClassName[] = TEXT( "Harbour_WVG_Class" );
@@ -129,13 +129,13 @@ static void hb_gt_wvt_RegisterClass( HINSTANCE hInstance )
memset( &wndclass, 0, sizeof( WNDCLASS ) );
wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
wndclass.lpfnWndProc = hb_gt_wvt_WndProc;
/* wndclass.cbClsExtra = 0; */
/* wndclass.cbWndExtra = 0; */
/* wndclass.cbClsExtra = 0; */
/* wndclass.cbWndExtra = 0; */
wndclass.hInstance = hInstance;
/* wndclass.hIcon = NULL; */
/* wndclass.hIcon = 0; */
wndclass.hCursor = LoadCursor( NULL, IDC_ARROW );
/* wndclass.hbrBackground = NULL; */
/* wndclass.lpszMenuName = NULL; */
/* wndclass.hbrBackground = NULL; */
/* wndclass.lpszMenuName = NULL; */
wndclass.lpszClassName = s_szClassName;
if( ! RegisterClass( &wndclass ) )
@@ -151,11 +151,11 @@ static PHB_GTWVT hb_gt_wvt_Find( HWND hWnd )
while( iCount && iPos < WVT_MAX_WINDOWS )
{
if( s_wvtWindows[iPos] )
if( s_wvtWindows[ iPos ] )
{
if( s_wvtWindows[iPos]->hWnd == hWnd )
if( s_wvtWindows[ iPos ]->hWnd == hWnd )
{
pWVT = s_wvtWindows[iPos];
pWVT = s_wvtWindows[ iPos ];
break;
}
--iCount;
@@ -179,9 +179,9 @@ static BOOL hb_gt_wvt_Alloc( PHB_GTWVT pWVT )
int iPos = 0;
do
{
if( s_wvtWindows[iPos] == NULL )
if( s_wvtWindows[ iPos ] == NULL )
{
s_wvtWindows[iPos] = pWVT;
s_wvtWindows[ iPos ] = pWVT;
pWVT->iHandle = iPos;
if( ++s_wvtCount == 1 )
hb_gt_wvt_RegisterClass( pWVT->hInstance );
@@ -204,7 +204,7 @@ static void hb_gt_wvt_Free( PHB_GTWVT pWVT )
HB_WVT_LOCK
s_wvtWindows[pWVT->iHandle] = NULL;
s_wvtWindows[ pWVT->iHandle ] = NULL;
if( --s_wvtCount == 0 )
{
@@ -238,11 +238,14 @@ static void hb_gt_wvt_Free( PHB_GTWVT pWVT )
}
}
hb_itemRelease( pWVT->pPP->pParentGT );
hb_xfree( pWVT->pPP );
if( pWVT->hWnd )
{
DestroyWindow( pWVT->hWnd );
pWVT->hWnd = NULL;
}
if( pWVT->hIcon && pWVT->bIconToFree )
DestroyIcon( pWVT->hIcon );
hb_xfree( pWVT );
}
@@ -298,8 +301,9 @@ static PHB_GTWVT hb_gt_wvt_New( PHB_GT pGT, HINSTANCE hInstance, int iCmdShow )
hb_strncpy( pWVT->fontFace, WVT_DEFAULT_FONT_NAME, sizeof( pWVT->fontFace ) - 1 );
pWVT->CaretExist = FALSE;
pWVT->CaretHidden = FALSE;
pWVT->CaretSize = HB_MAX( ( pWVT->PTEXTSIZE.y >> 2 ) - 1, 1 );
pWVT->CaretHidden = TRUE;
pWVT->CaretSize = 0;
pWVT->CaretWidth = 0;
pWVT->MousePos.x = 0;
pWVT->MousePos.y = 0;
pWVT->MouseMove = TRUE;
@@ -327,6 +331,18 @@ static PHB_GTWVT hb_gt_wvt_New( PHB_GT pGT, HINSTANCE hInstance, int iCmdShow )
pWVT->ResizeMode = HB_GTI_RESIZEMODE_FONT;
pWVT->pPP = ( HB_GT_PARAMS * ) hb_xgrab( sizeof( HB_GT_PARAMS ) );
pWVT->pPP->style = WS_THICKFRAME|WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX;
pWVT->pPP->exStyle = 0;
pWVT->pPP->x = 0;
pWVT->pPP->y = 0;
pWVT->pPP->width = CW_USEDEFAULT;
pWVT->pPP->height = CW_USEDEFAULT;
pWVT->pPP->pParentGT = NULL;
pWVT->pPP->bVisible = FALSE;
pWVT->pPP->bConfigured = FALSE;
pWVT->pPP->bRowCols = FALSE;
#ifndef HB_CDP_SUPPORT_OFF
pWVT->hostCDP = hb_vmCDP();
#if defined(UNICODE)
@@ -367,18 +383,6 @@ static int hb_gt_wvt_FireEvent( PHB_GTWVT pWVT, int nEvent )
return nResult;
}
static BOOL hb_gt_wvt_SetWindowSize( PHB_GTWVT pWVT, int iRow, int iCol )
{
if( HB_GTSELF_RESIZE( pWVT->pGT, iRow, iCol ) )
{
pWVT->ROWS = ( USHORT ) iRow;
pWVT->COLS = ( USHORT ) iCol;
return TRUE;
}
return FALSE;
}
/*
* use the standard fixed oem font, unless the caller has requested set size fonts
*/
@@ -397,11 +401,11 @@ static HFONT hb_gt_wvt_GetFont( const char * pszFace, int iHeight, int iWidth, i
logfont.lfItalic = 0;
logfont.lfUnderline = 0;
logfont.lfStrikeOut = 0;
logfont.lfCharSet = ( BYTE ) iCodePage; /* OEM_CHARSET; */
logfont.lfCharSet = ( BYTE ) iCodePage; /* OEM_CHARSET */
logfont.lfOutPrecision = 0;
logfont.lfClipPrecision = 0;
logfont.lfQuality = ( BYTE ) iQuality; /* DEFAULT_QUALITY, DRAFT_QUALITY or PROOF_QUALITY */
logfont.lfPitchAndFamily = FIXED_PITCH+FF_MODERN; /* all mapping depends on fixed width fonts! */
logfont.lfQuality = ( BYTE ) iQuality; /* DEFAULT_QUALITY, DRAFT_QUALITY or PROOF_QUALITY */
logfont.lfPitchAndFamily = FIXED_PITCH + FF_MODERN; /* all mapping depends on fixed width fonts! */
logfont.lfHeight = iHeight;
logfont.lfWidth = iWidth < 0 ? -iWidth : iWidth;
@@ -478,9 +482,11 @@ static void hb_gt_wvt_UpdateCaret( PHB_GTWVT pWVT )
}
else
{
if( iCaretSize != pWVT->CaretSize || !pWVT->CaretExist )
if( iCaretSize != pWVT->CaretSize || pWVT->PTEXTSIZE.x != pWVT->CaretWidth ||
!pWVT->CaretExist )
{
pWVT->CaretSize = iCaretSize;
pWVT->CaretWidth = pWVT->PTEXTSIZE.x;
pWVT->CaretExist = CreateCaret( pWVT->hWnd, ( HBITMAP ) NULL, pWVT->PTEXTSIZE.x,
pWVT->CaretSize < 0 ? - pWVT->CaretSize : pWVT->CaretSize );
}
@@ -505,7 +511,6 @@ static void hb_gt_wvt_KillCaret( PHB_GTWVT pWVT )
}
}
static void hb_gt_wvt_ResetWindowSize( PHB_GTWVT pWVT )
{
HDC hdc;
@@ -520,13 +525,12 @@ static void hb_gt_wvt_ResetWindowSize( PHB_GTWVT pWVT )
* set the font and get it's size to determine the size of the client area
* for the required number of rows and columns
*/
hdc = GetDC( pWVT->hWnd );
hFont = hb_gt_wvt_GetFont( pWVT->fontFace, pWVT->fontHeight, pWVT->fontWidth,
pWVT->fontWeight, pWVT->fontQuality, pWVT->CodePage );
if( pWVT->hFont )
DeleteObject( pWVT->hFont );
pWVT->hFont = hFont;
hdc = GetDC( pWVT->hWnd );
hOldFont = ( HFONT ) SelectObject( hdc, hFont );
GetTextMetrics( hdc, &tm );
SetTextCharacterExtra( hdc, 0 ); /* do not add extra char spacing even if bold */
@@ -565,9 +569,6 @@ static void hb_gt_wvt_ResetWindowSize( PHB_GTWVT pWVT )
width += ( USHORT ) ( wi.right - wi.left - ci.right );
height += ( USHORT ) ( wi.bottom - wi.top - ci.bottom );
hb_gt_wvt_KillCaret( pWVT );
hb_gt_wvt_UpdateCaret( pWVT );
/*
* Centre the window within the CLIENT area on the screen
* but only if pWVT->CentreWindow == TRUE
@@ -578,8 +579,12 @@ static void hb_gt_wvt_ResetWindowSize( PHB_GTWVT pWVT )
wi.top = rcWorkArea.top + ( ( rcWorkArea.bottom - rcWorkArea.top - height ) / 2 );
}
SetWindowPos( pWVT->hWnd, NULL, wi.left, wi.top, width, height, SWP_NOZORDER );
HB_GTSELF_EXPOSEAREA( pWVT->pGT, 0, 0, pWVT->ROWS, pWVT->COLS );
if( pWVT->CaretExist && !pWVT->CaretHidden )
hb_gt_wvt_UpdateCaret( pWVT );
if( pWVT->bGui )
{
hb_wvt_gtInitGui( pWVT );
@@ -614,7 +619,7 @@ static void hb_gt_wvt_FitRows( PHB_GTWVT pWVT )
maxHeight = ci.bottom - ci.top;
}
if ( maxHeight > 0 )
if( maxHeight > 0 )
{
BOOL bOldCentre = pWVT->CentreWindow;
pWVT->CentreWindow = pWVT->bMaximized ? TRUE : FALSE;
@@ -724,10 +729,10 @@ static void hb_gt_wvt_FitSize( PHB_GTWVT pWVT )
top = ( top < 0 ? 0 : top );
}
hb_gt_wvt_KillCaret( pWVT );
hb_gt_wvt_UpdateCaret( pWVT );
SetWindowPos( pWVT->hWnd, NULL, left, top, width, height, SWP_NOZORDER );
if( pWVT->CaretExist && !pWVT->CaretHidden )
hb_gt_wvt_UpdateCaret( pWVT );
}
else
{
@@ -767,6 +772,18 @@ static BOOL hb_gt_wvt_GetWindowTitle( HWND hWnd, char ** title )
return FALSE;
}
static BOOL hb_gt_wvt_SetWindowSize( PHB_GTWVT pWVT, int iRow, int iCol )
{
if( HB_GTSELF_RESIZE( pWVT->pGT, iRow, iCol ) )
{
pWVT->ROWS = ( USHORT ) iRow;
pWVT->COLS = ( USHORT ) iCol;
return TRUE;
}
return FALSE;
}
static BOOL hb_gt_wvt_InitWindow( PHB_GTWVT pWVT, int iRow, int iCol )
{
BOOL fRet = hb_gt_wvt_SetWindowSize( pWVT, iRow, iCol );
@@ -903,9 +920,6 @@ static void hb_gt_wvt_SetMousePos( PHB_GTWVT pWVT, int iRow, int iCol )
static void hb_gt_wvt_MouseEvent( PHB_GTWVT pWVT, UINT message, WPARAM wParam, LPARAM lParam )
{
static RECT s_rectOld = { 0, 0, 0, 0 };
static RECT s_rectNew = { 0, 0, 0, 0 };
POINT xy, colrow;
SHORT keyCode = 0;
SHORT keyState;
@@ -937,15 +951,15 @@ static void hb_gt_wvt_MouseEvent( PHB_GTWVT pWVT, UINT message, WPARAM wParam, L
{
pWVT->bBeingMarked = TRUE;
s_rectNew.left = xy.x;
s_rectNew.top = xy.y;
s_rectNew.right = xy.x;
s_rectNew.bottom = xy.y;
pWVT->sRectNew.left = xy.x;
pWVT->sRectNew.top = xy.y;
pWVT->sRectNew.right = xy.x;
pWVT->sRectNew.bottom = xy.y;
s_rectOld.left = 0;
s_rectOld.top = 0;
s_rectOld.right = 0;
s_rectOld.bottom = 0;
pWVT->sRectOld.left = 0;
pWVT->sRectOld.top = 0;
pWVT->sRectOld.right = 0;
pWVT->sRectOld.bottom = 0;
return;
}
@@ -979,10 +993,10 @@ static void hb_gt_wvt_MouseEvent( PHB_GTWVT pWVT, UINT message, WPARAM wParam, L
RECT rect = { 0, 0, 0, 0 };
RECT colrowRC = { 0, 0, 0, 0 };
rect.left = HB_MIN( s_rectNew.left, s_rectNew.right );
rect.top = HB_MIN( s_rectNew.top , s_rectNew.bottom );
rect.right = HB_MAX( s_rectNew.left, s_rectNew.right );
rect.bottom = HB_MAX( s_rectNew.top , s_rectNew.bottom );
rect.left = HB_MIN( pWVT->sRectNew.left, pWVT->sRectNew.right );
rect.top = HB_MIN( pWVT->sRectNew.top , pWVT->sRectNew.bottom );
rect.right = HB_MAX( pWVT->sRectNew.left, pWVT->sRectNew.right );
rect.bottom = HB_MAX( pWVT->sRectNew.top , pWVT->sRectNew.bottom );
colrowRC = hb_gt_wvt_GetColRowFromXYRect( pWVT, rect );
@@ -1049,25 +1063,25 @@ static void hb_gt_wvt_MouseEvent( PHB_GTWVT pWVT, UINT message, WPARAM wParam, L
RECT rect = { 0, 0, 0, 0 };
RECT colrowRC = { 0, 0, 0, 0 };
s_rectNew.right = xy.x;
s_rectNew.bottom = xy.y;
pWVT->sRectNew.right = xy.x;
pWVT->sRectNew.bottom = xy.y;
rect.left = HB_MIN( s_rectNew.left, s_rectNew.right );
rect.top = HB_MIN( s_rectNew.top , s_rectNew.bottom );
rect.right = HB_MAX( s_rectNew.left, s_rectNew.right );
rect.bottom = HB_MAX( s_rectNew.top , s_rectNew.bottom );
rect.left = HB_MIN( pWVT->sRectNew.left, pWVT->sRectNew.right );
rect.top = HB_MIN( pWVT->sRectNew.top , pWVT->sRectNew.bottom );
rect.right = HB_MAX( pWVT->sRectNew.left, pWVT->sRectNew.right );
rect.bottom = HB_MAX( pWVT->sRectNew.top , pWVT->sRectNew.bottom );
colrowRC = hb_gt_wvt_GetColRowFromXYRect( pWVT, rect );
rect = hb_gt_wvt_GetXYFromColRowRect( pWVT, colrowRC );
if( rect.left != s_rectOld.left ||
rect.top != s_rectOld.top ||
rect.right != s_rectOld.right ||
rect.bottom != s_rectOld.bottom )
if( rect.left != pWVT->sRectOld.left ||
rect.top != pWVT->sRectOld.top ||
rect.right != pWVT->sRectOld.right ||
rect.bottom != pWVT->sRectOld.bottom )
{
#if !defined(HB_WINCE) /* WinCE does not support InvertRgn */
/* Concept forwarded by Andy Wos - thanks. */
HRGN rgn1 = CreateRectRgn( s_rectOld.left, s_rectOld.top, s_rectOld.right, s_rectOld.bottom );
HRGN rgn1 = CreateRectRgn( pWVT->sRectOld.left, pWVT->sRectOld.top, pWVT->sRectOld.right, pWVT->sRectOld.bottom );
HRGN rgn2 = CreateRectRgn( rect.left, rect.top, rect.right, rect.bottom );
HRGN rgn3 = CreateRectRgn( 0, 0, 0, 0 );
@@ -1082,10 +1096,10 @@ static void hb_gt_wvt_MouseEvent( PHB_GTWVT pWVT, UINT message, WPARAM wParam, L
DeleteObject( rgn2 );
DeleteObject( rgn3 );
#endif
s_rectOld.left = rect.left;
s_rectOld.top = rect.top;
s_rectOld.right = rect.right;
s_rectOld.bottom = rect.bottom;
pWVT->sRectOld.left = rect.left;
pWVT->sRectOld.top = rect.top;
pWVT->sRectOld.right = rect.right;
pWVT->sRectOld.bottom = rect.bottom;
}
return;
}
@@ -1744,10 +1758,8 @@ static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wPara
{
pWVT->bMaximized = TRUE;
if ( pWVT->ResizeMode == HB_GTI_RESIZEMODE_FONT )
{
if( pWVT->ResizeMode == HB_GTI_RESIZEMODE_FONT )
hb_gt_wvt_FitSize( pWVT );
}
else
{
hb_gt_wvt_FitRows( pWVT );
@@ -1873,61 +1885,89 @@ static BOOL hb_gt_wvt_ValidWindowSize( HWND hWnd, int rows, int cols, HFONT hFon
return ( width <= maxWidth ) && ( height <= maxHeight );
}
static HWND hb_gt_wvt_CreateWindow( HINSTANCE hInstance, int iCmdShow )
static HWND hb_gt_wvt_CreateWindow( PHB_GTWVT pWVT )
{
HWND hWnd;
HWND hWnd, hWndParent;
LPTSTR szAppName;
/* InitCommonControls(); */
szAppName = HB_TCHAR_CONVTO( hb_cmdargARGV()[ 0 ] );
hWnd = CreateWindow(
s_szClassName, /* classname */
szAppName, /* window name */
WS_THICKFRAME|WS_OVERLAPPED|WS_CAPTION|
WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX, /* style */
0, /* x */
0, /* y */
CW_USEDEFAULT, /* width */
CW_USEDEFAULT, /* height */
NULL, /* window parent */
NULL, /* menu */
hInstance, /* instance */
NULL ); /* lpParam */
hWndParent = NULL;
if( pWVT->pPP->bConfigured )
{
PHB_GT pGTp = hb_gt_ItemBase( pWVT->pPP->pParentGT );
if( pGTp )
{
PHB_GTWVT pWVTp = HB_GTWVT_GET( pGTp );
hWndParent = pWVTp->hWnd;
hb_gt_BaseFree( pGTp );
if( hWndParent )
{
RECT rc;
POINT pt;
GetClientRect( hWndParent, &rc );
if( pWVT->pPP->bRowCols )
{
pt.x = rc.left + ( pWVTp->PTEXTSIZE.x * pWVT->pPP->y );
pt.y = rc.top + ( pWVTp->PTEXTSIZE.y * pWVT->pPP->x );
pWVT->ROWS = pWVT->pPP->width;
pWVT->COLS = pWVT->pPP->height;
}
else
{
pt.x = rc.left + pWVT->pPP->x;
pt.y = rc.top + pWVT->pPP->y;
}
ClientToScreen( hWndParent, &pt );
pWVT->pPP->x = pt.x;
pWVT->pPP->y = pt.y;
}
}
}
hWnd = CreateWindowEx(
pWVT->pPP->exStyle, /* extended style */
s_szClassName, /* classname */
szAppName, /* window name */
pWVT->pPP->style, /* style */
pWVT->pPP->x, /* x */
pWVT->pPP->y, /* y */
pWVT->pPP->width, /* width */
pWVT->pPP->height, /* height */
hWndParent, /* window parent */
NULL, /* menu */
pWVT->hInstance, /* instance */
NULL ); /* lpParam */
HB_TCHAR_FREE( szAppName );
if( hWnd )
{
/*
* 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;
}
ShowWindow( hWnd, iCmdShow );
UpdateWindow( hWnd );
}
return hWnd;
}
static BOOL hb_gt_wvt_CreateConsoleWindow( PHB_GTWVT pWVT )
{
int iCmdShow;
if( !pWVT->hWnd )
{
pWVT->hWnd = hb_gt_wvt_CreateWindow( pWVT->hInstance, pWVT->iCmdShow );
pWVT->hWnd = hb_gt_wvt_CreateWindow( pWVT );
if( !pWVT->hWnd )
hb_errInternal( 10001, "Failed to create WVT window", NULL, NULL );
hb_gt_wvt_InitWindow( pWVT, pWVT->ROWS, pWVT->COLS );
/* Set icon */
if( pWVT->hIcon )
{
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 */
}
/* Set default window title */
{
PHB_FNAME pFileName = hb_fsFNameSplit( hb_cmdargARGV()[ 0 ] );
@@ -1946,6 +1986,34 @@ 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 );
}
/* Initialize GUI base */
{
pWVT->hdc = GetDC( pWVT->hWnd );
@@ -2012,7 +2080,6 @@ static void hb_gt_wvt_Exit( PHB_GT pGT )
}
hb_gt_wvt_Free( pWVT );
}
//HB_GTSUPER_EXIT( pGT );
}
/* ********************************************************************** */
@@ -2253,7 +2320,6 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
if( pWVT->hWnd )
{
hb_gt_wvt_ResetWindowSize( pWVT );
hb_gt_wvt_UpdateCaret( pWVT );
HB_GTSELF_REFRESH( pGT );
}
DeleteObject( hFont );
@@ -2453,49 +2519,72 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
case HB_GTI_ICONFILE:
{
HICON hIcon = 0;
if( ( hb_itemType( pInfo->pNewVal ) & HB_IT_STRING ) && pWVT->hWnd )
if( ( hb_itemType( pInfo->pNewVal ) & HB_IT_STRING ) )
{
LPTSTR lpImage = HB_TCHAR_CONVTO( hb_itemGetCPtr( pInfo->pNewVal ) );
hIcon = ( HICON ) LoadImage( ( HINSTANCE ) NULL, lpImage,
IMAGE_ICON, 0, 0, LR_LOADFROMFILE );
HICON hIconToFree = ( pWVT->hIcon && pWVT->bIconToFree ) ? pWVT->hIcon : NULL;
LPTSTR lpImage;
lpImage = HB_TCHAR_CONVTO( hb_itemGetCPtr( pInfo->pNewVal ) );
pWVT->bIconToFree = TRUE;
pWVT->hIcon = ( HICON ) LoadImage( ( HINSTANCE ) NULL, lpImage,
IMAGE_ICON, 0, 0, LR_LOADFROMFILE );
HB_TCHAR_FREE( lpImage );
if( hIcon )
if( pWVT->hWnd )
{
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_SMALL, ( LPARAM ) hIcon ); /* Set Title Bar Icon */
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_BIG , ( LPARAM ) hIcon ); /* Set Task List Icon */
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 ) hIcon );
pInfo->pResult = hb_itemPutNInt( pInfo->pResult, ( HB_PTRDIFF ) pWVT->hIcon );
break;
}
case HB_GTI_ICONRES:
{
HICON hIcon = 0;
if( pWVT->hWnd )
if( hb_itemType( pInfo->pNewVal ) & HB_IT_STRING )
{
if( hb_itemType( pInfo->pNewVal ) & HB_IT_STRING )
HICON hIconToFree = ( pWVT->hIcon && pWVT->bIconToFree ) ? pWVT->hIcon : NULL;
LPTSTR lpIcon;
lpIcon = HB_TCHAR_CONVTO( hb_itemGetCPtr( pInfo->pNewVal ) );
pWVT->bIconToFree = FALSE;
pWVT->hIcon = LoadIcon( pWVT->hInstance, lpIcon );
HB_TCHAR_FREE( lpIcon );
if( pWVT->hWnd )
{
LPTSTR lpIcon = HB_TCHAR_CONVTO( hb_itemGetCPtr( pInfo->pNewVal ) );
hIcon = LoadIcon( pWVT->hInstance, lpIcon );
HB_TCHAR_FREE( lpIcon );
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 */
}
else if( hb_itemType( pInfo->pNewVal ) & HB_IT_NUMERIC )
{
hIcon = LoadIcon( pWVT->hInstance,
MAKEINTRESOURCE( ( HB_LONG )
hb_itemGetNInt( pInfo->pNewVal ) ) );
}
if( hIcon )
{
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_SMALL, ( LPARAM ) hIcon ); /* Set Title Bar Icon */
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_BIG , ( LPARAM ) hIcon ); /* Set Task List Icon */
}
pInfo->pResult = hb_itemPutNInt( pInfo->pResult, ( HB_PTRDIFF ) hIcon );
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 )
{
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;
}
case HB_GTI_VIEWMAXWIDTH:
pInfo->pResult = hb_itemPutNI( pInfo->pResult, pWVT->COLS );
break;
@@ -2566,7 +2655,6 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
}
break;
}
case HB_GTI_RESIZABLE:
pInfo->pResult = hb_itemPutL( pInfo->pResult, pWVT->bResizable );
if( pInfo->pNewVal )
@@ -2592,9 +2680,8 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
#else
SetWindowLongPtr( pWVT->hWnd, GWL_STYLE, style );
#endif
SetWindowPos( pWVT->hWnd, NULL, 0, 0, 0, 0,
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_DEFERERASE );
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_DEFERERASE );
ShowWindow( pWVT->hWnd, SW_HIDE );
ShowWindow( pWVT->hWnd, SW_NORMAL );
}
@@ -2687,7 +2774,7 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
pWVT->COLORS[ iIndex - 1 ] = hb_itemGetNL( pInfo->pNewVal2 );
if( pWVT->hWnd )
HB_GTSELF_EXPOSEAREA( pWVT->pGT, 0, 0, pWVT->ROWS, pWVT->COLS );
HB_GTSELF_EXPOSEAREA( pWVT->pGT, 0, 0, pWVT->ROWS, pWVT->COLS );
}
}
}
@@ -2710,7 +2797,7 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
pWVT->COLORS[ i ] = hb_arrayGetNL( pInfo->pNewVal, i + 1 );
if( pWVT->hWnd )
HB_GTSELF_EXPOSEAREA( pWVT->pGT, 0, 0, pWVT->ROWS, pWVT->COLS );
HB_GTSELF_EXPOSEAREA( pWVT->pGT, 0, 0, pWVT->ROWS, pWVT->COLS );
}
}
}
@@ -2733,12 +2820,15 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
RECT rect = { 0,0,0,0 };
GetWindowRect( pWVT->hWnd, &rect );
x = hb_itemGetNI( pInfo->pNewVal );
y = hb_itemGetNI( pInfo->pNewVal2 );
if ( iType == HB_GTI_SETPOS_ROWCOL )
if( iType == HB_GTI_SETPOS_ROWCOL )
{
y *= pWVT->PTEXTSIZE.x;
x *= pWVT->PTEXTSIZE.y;
y = hb_itemGetNI( pInfo->pNewVal ) * pWVT->PTEXTSIZE.y;
x = hb_itemGetNI( pInfo->pNewVal2 ) * pWVT->PTEXTSIZE.x;
}
else
{
x = hb_itemGetNI( pInfo->pNewVal );
y = hb_itemGetNI( pInfo->pNewVal2 );
}
hb_retl( SetWindowPos( pWVT->hWnd, NULL,
x,
@@ -2755,7 +2845,8 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
switch( iMessage )
{
case HB_GTS_WINDOWHANDLE:
pInfo->pResult = hb_itemPutNInt( pInfo->pResult, ( HB_PTRDIFF ) pWVT->hWnd );
if( pWVT->hWnd )
pInfo->pResult = hb_itemPutNInt( pInfo->pResult, ( HB_PTRDIFF ) pWVT->hWnd );
break;
case HB_GTS_CENTERWINDOW:
@@ -2766,13 +2857,15 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
pWVT->CentreWindow = hb_arrayGetL( pInfo->pNewVal2, 1 );
if( hb_arrayGetL( pInfo->pNewVal2, 2 ) )
{
hb_gt_wvt_ResetWindowSize( pWVT );
if( pWVT->hWnd )
hb_gt_wvt_ResetWindowSize( pWVT );
}
}
break;
}
case HB_GTS_PROCESSMESSAGES:
hb_gt_wvt_ProcessMessages( pWVT );
if( pWVT->hWnd )
hb_gt_wvt_ProcessMessages( pWVT );
break;
case HB_GTS_KEYBOARD:
@@ -2781,7 +2874,8 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
break;
case HB_GTS_RESETWINDOW:
hb_gt_wvt_ResetWindowSize( pWVT );
if( pWVT->hWnd )
hb_gt_wvt_ResetWindowSize( pWVT );
break;
case HB_GTS_SETTIMER:
@@ -2790,13 +2884,16 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
break;
case HB_GTS_KILLTIMER:
if( hb_itemType( pInfo->pNewVal2 ) & HB_IT_NUMERIC )
KillTimer( pWVT->hWnd, hb_itemGetNI( pInfo->pNewVal2 ) );
if( pWVT->hWnd )
{
if( hb_itemType( pInfo->pNewVal2 ) & HB_IT_NUMERIC )
KillTimer( pWVT->hWnd, hb_itemGetNI( pInfo->pNewVal2 ) );
}
break;
case HB_GTS_SETPOSITION:
{
if( hb_itemType( pInfo->pNewVal2 ) & HB_IT_ARRAY )
if( pWVT->hWnd && ( hb_itemType( pInfo->pNewVal2 ) & HB_IT_ARRAY ) )
{
RECT rect = { 0,0,0,0 };
GetWindowRect( pWVT->hWnd, &rect );
@@ -2810,17 +2907,21 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
break;
}
case HB_GTS_SHOWWINDOW:
if( hb_itemType( pInfo->pNewVal2 ) & HB_IT_NUMERIC )
ShowWindow( pWVT->hWnd, hb_itemGetNI( pInfo->pNewVal2 ) );
if( pWVT->hWnd )
{
if( hb_itemType( pInfo->pNewVal2 ) & HB_IT_NUMERIC )
ShowWindow( pWVT->hWnd, hb_itemGetNI( pInfo->pNewVal2 ) );
}
break;
case HB_GTS_UPDATEWINDOW:
UpdateWindow( pWVT->hWnd );
if( pWVT->hWnd )
UpdateWindow( pWVT->hWnd );
break;
case HB_GTS_SYSTRAYICON:
{
if( hb_itemType( pInfo->pNewVal2 ) & HB_IT_ARRAY )
if( pWVT->hWnd && ( hb_itemType( pInfo->pNewVal2 ) & HB_IT_ARRAY ) )
{
int mode = hb_arrayGetNI( pInfo->pNewVal2, 1 );
int iIconType = hb_arrayGetNI( pInfo->pNewVal2, 2 );
@@ -2849,7 +2950,7 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
tnid.cbSize = sizeof( NOTIFYICONDATA ) ;
tnid.hWnd = pWVT->hWnd;
tnid.uID = HB_ID_NOTIFYICON;
tnid.uFlags = NIF_MESSAGE + NIF_ICON + NIF_TIP;
tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
tnid.uCallbackMessage = HB_MSG_NOTIFYICON;
tnid.hIcon = hIcon ;
@@ -2867,90 +2968,176 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
case HB_GTS_WNDSTATE:
{
int iSpec = hb_itemGetNI( pInfo->pNewVal2 );
switch( iSpec )
if( pWVT->hWnd )
{
case WNDS_SETONTOP:
int iSpec = hb_itemGetNI( pInfo->pNewVal2 );
switch( iSpec )
{
RECT rect = { 0,0,0,0 };
GetWindowRect( pWVT->hWnd, &rect );
hb_retl( SetWindowPos( pWVT->hWnd, HWND_TOPMOST,
rect.left,
rect.top,
0,
0,
SWP_NOSIZE + SWP_NOMOVE + SWP_NOACTIVATE ) );
break;
case HB_GTS_WS_SETONTOP:
{
RECT rect = { 0,0,0,0 };
GetWindowRect( pWVT->hWnd, &rect );
hb_retl( SetWindowPos( pWVT->hWnd, HWND_TOPMOST,
rect.left,
rect.top,
0,
0,
SWP_NOSIZE + SWP_NOMOVE + SWP_NOACTIVATE ) );
break;
}
case HB_GTS_WS_SETASNORMAL:
{
RECT rect = { 0,0,0,0 };
GetWindowRect( pWVT->hWnd, &rect );
hb_retl( SetWindowPos( pWVT->hWnd, HWND_NOTOPMOST,
rect.left,
rect.top,
0,
0,
SWP_NOSIZE + SWP_NOMOVE + SWP_NOACTIVATE ) );
break;
}
case HB_GTS_WS_MINIMIZED:
ShowWindow( pWVT->hWnd, SW_MINIMIZE );
break;
case HB_GTS_WS_MAXIMIZED:
if( pWVT->bResizable )
ShowWindow( pWVT->hWnd, SW_MAXIMIZE );
else
ShowWindow( pWVT->hWnd, SW_RESTORE );
break;
case HB_GTS_WS_HIDDEN:
ShowWindow( pWVT->hWnd, SW_HIDE );
break;
case HB_GTS_WS_NORMAL:
ShowWindow( pWVT->hWnd, SW_SHOWNORMAL );
break;
}
case WNDS_SETASNORMAL:
{
RECT rect = { 0,0,0,0 };
GetWindowRect( pWVT->hWnd, &rect );
hb_retl( SetWindowPos( pWVT->hWnd, HWND_NOTOPMOST,
rect.left,
rect.top,
0,
0,
SWP_NOSIZE + SWP_NOMOVE + SWP_NOACTIVATE ) );
break;
}
case WNDS_MINIMIZED:
ShowWindow( pWVT->hWnd, SW_MINIMIZE );
break;
case WNDS_MAXIMIZED:
if( pWVT->bResizable )
ShowWindow( pWVT->hWnd, SW_MAXIMIZE );
else
ShowWindow( pWVT->hWnd, SW_RESTORE );
break;
case WNDS_HIDDEN:
ShowWindow( pWVT->hWnd, SW_HIDE );
break;
case WNDS_NORMAL:
ShowWindow( pWVT->hWnd, SW_SHOWNORMAL );
break;
}
break;
}
case HB_GTS_FACTOR:
{
if ( pWVT->pfnLayered )
if( pWVT->hWnd )
{
SetWindowLong( pWVT->hWnd,
GWL_EXSTYLE,
GetWindowLong( pWVT->hWnd, GWL_EXSTYLE ) | WS_EX_LAYERED );
if ( pWVT->pfnLayered )
{
SetWindowLong( pWVT->hWnd,
GWL_EXSTYLE,
GetWindowLong( pWVT->hWnd, GWL_EXSTYLE ) | WS_EX_LAYERED );
pWVT->pfnLayered( pWVT->hWnd,
RGB( 255,255,255 ),
hb_itemGetNI( pInfo->pNewVal2 ),
/*LWA_COLORKEY|*/ LWA_ALPHA );
pWVT->pfnLayered( pWVT->hWnd,
RGB( 255,255,255 ),
hb_itemGetNI( pInfo->pNewVal2 ),
/*LWA_COLORKEY|*/ LWA_ALPHA );
}
}
break;
}
}
break;
}
case HB_GTI_PRESPARAM:
{
case HB_GTI_PRESPARAMS:
if ( ! pWVT->hWnd )
{
if( hb_itemType( pInfo->pNewVal ) & HB_IT_ARRAY )
{
int iParam = hb_arrayLength( pInfo->nNewVal );
int iParam = hb_arrayLen( pInfo->pNewVal );
if( iParam == HB_GTI_PP_SIZE )
{
int mode = hb_arrayGetNI( pInfo->pNewVal, 1 );
PHB_ITEM pSome;
pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_EXSTYLE );
if( hb_itemType( pSome ) & HB_IT_NUMERIC )
{
pWVT->pPP->exStyle = hb_itemGetNInt( pSome );
}
pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_STYLE );
if( hb_itemType( pSome ) & HB_IT_NUMERIC )
{
pWVT->pPP->style = hb_itemGetNInt( pSome );
}
pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_X );
if( hb_itemType( pSome ) & HB_IT_NUMERIC )
{
pWVT->pPP->x = hb_itemGetNInt( pSome );
}
pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_Y );
if( hb_itemType( pSome ) & HB_IT_NUMERIC )
{
pWVT->pPP->y = hb_itemGetNInt( pSome );
}
pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_WIDTH );
if( hb_itemType( pSome ) & HB_IT_NUMERIC )
{
pWVT->pPP->width = hb_itemGetNInt( pSome );
}
pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_HEIGHT );
if( hb_itemType( pSome ) & HB_IT_NUMERIC )
{
pWVT->pPP->height = hb_itemGetNInt( pSome );
}
pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_PARENT );
if( hb_itemType( pSome ) & HB_IT_POINTER )
{
pWVT->pPP->pParentGT = hb_itemNew( hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_PARENT ) );
}
pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_VISIBLE );
if( hb_itemType( pSome ) & HB_IT_LOGICAL )
{
pWVT->pPP->bVisible = hb_itemGetL( pSome );
}
pSome = hb_arrayGetItemPtr( pInfo->pNewVal, HB_GTI_PP_ROWCOLS );
if( hb_itemType( pSome ) & HB_IT_LOGICAL )
{
pWVT->pPP->bRowCols = hb_itemGetL( pSome );
}
/* Flag that caller configured itself */
pWVT->pPP->bConfigured = TRUE;
pWVT->CentreWindow = FALSE;
}
}
}
break;
case HB_GTI_ENABLE:
{
PHB_GT pGTp = hb_gt_ItemBase( pInfo->pNewVal );
if( pGTp )
{
PHB_GTWVT pWVTp = HB_GTWVT_GET( pGTp );
EnableWindow( pWVTp->hWnd, TRUE );
hb_gt_BaseFree( pGTp );
}
break;
}
case HB_GTI_DISABLE:
{
PHB_GT pGTp = hb_gt_ItemBase( pInfo->pNewVal );
if( pGTp )
{
PHB_GTWVT pWVTp = HB_GTWVT_GET( pGTp );
EnableWindow( pWVTp->hWnd, FALSE );
hb_gt_BaseFree( pGTp );
}
break;
}
case HB_GTI_SETFOCUS:
{
PHB_GT pGTp = hb_gt_ItemBase( pInfo->pNewVal );
if( pGTp )
{
PHB_GTWVT pWVTp = HB_GTWVT_GET( pGTp );
SetFocus( pWVTp->hWnd );
hb_gt_BaseFree( pGTp );
}
break;
}
default:
return HB_GTSUPER_INFO( pGT, iType, pInfo );

View File

@@ -247,11 +247,12 @@ typedef struct
int y;
int width;
int height;
HWND hWndParent;
PHB_ITEM pParentGT;
BOOL bVisible;
BOOL byPixel;
BOOL bRowCols;
BOOL bConfigured;
} HB_GT_PARAM, * PHB_GT_PARAM;
} HB_GT_PARAMS, * PHB_GT_PARAMS;
typedef struct
{
@@ -290,7 +291,8 @@ typedef struct
BOOL CaretExist; /* TRUE if a caret has been created */
BOOL CaretHidden; /* TRUE if a caret has been hiden */
int CaretSize; /* Size of solid caret */
int CaretSize; /* Height of solid caret */
int CaretWidth; /* Width of solid caret */
POINT MousePos; /* the last mouse position */
BOOL MouseMove; /* Flag to say whether to return mouse movement events */
@@ -320,6 +322,9 @@ typedef struct
BYTE chrTransTbl[ 256 ];
#endif
HICON hIcon; /* Title Bar and Task List icon. Can be NULL. */
BOOL bIconToFree; /* Do we need to free this icon when it's not NULL? */
int CodePage; /* Code page to use for display characters */
BOOL Win9X; /* Flag to say if running on Win9X not NT/2000/XP */
BOOL AltF4Close; /* Can use Alt+F4 to close application */
@@ -337,6 +342,8 @@ typedef struct
BOOL bClosable;
int ResizeMode; /* Sets the resizing mode either to FONT or ROWS */
RECT sRectNew;
RECT sRectOld;
// To Be Split in 2 Structures <1 GUI dynamic> <2 GUI fixed> //
@@ -408,9 +415,9 @@ typedef struct
PHB_ITEM pcbFuncModal[ WVT_DLGMD_MAX ]; // codeblock for WndProc
int iTypeModal[ WVT_DLGMD_MAX ]; // Type of Function Pointers - Function 1, Block 2, Method 3
PHB_GUIDATA * pGUI; // GUI Data Structure
PHB_GUIDATA pGUI; // GUI Data Structure
PHB_GT_PARAM * pPP; // Presentation Parameters
PHB_GT_PARAMS pPP; // Presentation Parameters
} HB_GTWVT, * PHB_GTWVT;
@@ -519,6 +526,7 @@ void HB_EXPORT hb_wvt_wvtUtils( void );
PHB_GTWVT HB_EXPORT hb_wvt_gtGetWVT( void );
void HB_EXPORT hb_ToOutDebug( const char * sTraceMsg, ... );
//----------------------------------------------------------------------//
#endif /* HB_WVT_H_ */

View File

@@ -58,10 +58,28 @@
//----------------------------------------------------------------------//
#define HB_GTI_SETFONT 71
#define HB_GTI_PRESPARAMS 72
#define HB_GTI_ENABLE 73
#define HB_GTI_DISABLE 74
#define HB_GTI_SETFOCUS 75
/* Presentation Parameters | HB_GTI_PRESPARAMS */
#define HB_GTI_PP_EXSTYLE 1
#define HB_GTI_PP_STYLE 2
#define HB_GTI_PP_X 3
#define HB_GTI_PP_Y 4
#define HB_GTI_PP_WIDTH 5
#define HB_GTI_PP_HEIGHT 6
#define HB_GTI_PP_PARENT 7
#define HB_GTI_PP_VISIBLE 8
#define HB_GTI_PP_ROWCOLS 9
#define HB_GTI_PP_SIZE 9
#define HB_GTI_SPEC 1000
/* Window Specifications */
/* Window Specifications | HB_GTI_SPEC */
#define HB_GTS_WINDOWHANDLE 1
#define HB_GTS_CENTERWINDOW 2
#define HB_GTS_PROCESSMESSAGES 3
@@ -76,18 +94,28 @@
#define HB_GTS_SYSTRAYICON 12
#define HB_GTS_FACTOR 13
/* Window States */
#define WNDS_SETONTOP 1
#define WNDS_SETASNORMAL 2
#define WNDS_MINIMIZED 3
#define WNDS_MAXIMIZED 4
#define WNDS_HIDDEN 5
#define WNDS_NORMAL 6
/* SysTrayIcon Types */
#define NIT_FILE 0
#define NIT_RESOURCEBYNAME 1
#define NIT_RESOURCEBYID 2
/* Window States | HB_GTS_WNDSTATE */
#define HB_GTS_WS_SETONTOP 1
#define HB_GTS_WS_SETASNORMAL 2
#define HB_GTS_WS_MINIMIZED 3
#define HB_GTS_WS_MAXIMIZED 4
#define HB_GTS_WS_HIDDEN 5
#define HB_GTS_WS_NORMAL 6
/* SysTrayIcon Types | HB_GTS_SYSTRAYICON */
#define HB_GTS_NIT_FILE 0
#define HB_GTS_NIT_RESOURCEBYNAME 1
#define HB_GTS_NIT_RESOURCEBYID 2
/* ShowWindow modes | HB_GTS_SHOWWINDOW */
#define HB_GTS_SW_NORMAL 1
#define HB_GTS_SW_RESTORE 2
#define HB_GTS_SW_HIDE 3
#define HB_GTS_SW_MINIMIZED 4
#define HB_GTS_SW_MAXIMIZED 5
#define HB_GTI_GUI 1001
//----------------------------------------------------------------------//

View File

@@ -636,9 +636,11 @@ FUNCTION WvtMyBrowse()
Hb_ThreadStart( {|| Hb_gtReload( 'WVG' ), ;
SetMode( 35,70 ), ;
hb_gtInfo( HB_GTI_RESIZEMODE, HB_GTI_RESIZEMODE_ROWS ),;
hb_clear(), ;
hb_clear(), ;
Wvt_SetGui( .t. ), ;
Wvt_ShowWindow( SW_RESTORE ), ;
WvtMyBrowse_X() } )
WvtMyBrowse_X();
} )
#else
WvtMyBrowse_X()
#endif
@@ -646,7 +648,7 @@ FUNCTION WvtMyBrowse()
Return nil
//----------------------------------------------------------------------//
FUNCTION WvtMyBrowse_X()
LOCAL nKey, bBlock, oBrowse , aLastPaint, i
LOCAL nKey, bBlock, oBrowse , aLastPaint, i, aLastPaint1
LOCAL lEnd := .f.
LOCAL aBlocks := {}
LOCAL info_ := {}
@@ -657,11 +659,12 @@ FUNCTION WvtMyBrowse_X()
LOCAL nCursor := setCursor( 0 )
LOCAL nRow := row()
LOCAL nCol := col()
LOCAL cColor := SetColor( "N/BG,N/GR*,,,N/W*" )//SetColor( "N/W*,N/GR*,,,N/W*" )
LOCAL cColor := SetColor( "N/W*,N/GR*,,,N/W*" )
LOCAL cScr := SaveScreen( 0,0,maxrow(),maxcol() )
LOCAL aObjects:= WvtSetObjects( {} )
LOCAL hPopup := Wvt_SetPopupMenu()
LOCAL stru_:={}, cDbfFile, cSqlFile, cFileIndex, cFileDbf, cRDD, nIndex
Local pGT, pGT1, nStStyle, nExStyle
STATIC nStyle := 0
THREAD STATIC nFactor := 200
@@ -712,8 +715,9 @@ FUNCTION WvtMyBrowse_X()
nStyle++
aAdd( aBlocks, {|| Wvt_SetIcon( "dia_excl.ico" ) } )
aAdd( aBlocks, {|| Wvt_SetTitle( "WVT Gui TBrowse()" ) } )
hb_gtInfo( HB_GTI_ICONFILE, "dia_excl.ico" )
hb_gtInfo( HB_GTI_WINTITLE, "WVT Gui TBrowse()" )
aAdd( aBlocks, {|| Wvt_DrawBoxRaised( oBrowse:nTop-3, oBrowse:nLeft-2, oBrowse:nBottom+1, oBrowse:nRight+2 ) } )
aAdd( aBlocks, {|| Wvt_DrawBoxRecessed( oBrowse:nTop, oBrowse:nLeft, oBrowse:nBottom, oBrowse:nRight ) } )
aAdd( aBlocks, {|| Wvt_DrawGridHorz( oBrowse:nTop+3, oBrowse:nLeft, oBrowse:nRight, oBrowse:nBottom - oBrowse:nTop - 2 ) } )
@@ -723,6 +727,7 @@ FUNCTION WvtMyBrowse_X()
DispBox( 0, 0, maxrow(), maxcol(), " ", "N/W" )
DispOutAt( oBrowse:nTop-2, oBrowse:nleft, padc( CurDrive()+":\"+CurDir()+"\"+"test.dbf", oBrowse:nRight-oBrowse:nLeft+1 ), "W+/W" )
DispOutAt( maxrow(), 0, padc( '<F3 Modal Window> <F11 Transp++> <F12 Transp-->',maxcol()+1), 'B/W' )
While !lEnd
oBrowse:ForceStable()
@@ -731,11 +736,11 @@ FUNCTION WvtMyBrowse_X()
do case
case nKey == K_F12
nFactor -= 10
nFactor--
hb_gtInfo( HB_GTI_SPEC, HB_GTS_FACTOR, nFactor )
case nKey == K_F11
nFactor += 10
nFactor++
hb_gtInfo( HB_GTI_SPEC, HB_GTS_FACTOR, nFactor )
case BrwHandleKey( oBrowse, nKey, @lEnd )
@@ -746,7 +751,7 @@ FUNCTION WvtMyBrowse_X()
DispBox( 0, 0, maxrow(), maxcol(), " ", "N/W" )
DispOutAt( oBrowse:nTop-2, oBrowse:nleft, padc( CurDrive()+":\"+CurDir()+"\"+"test.dbf", oBrowse:nRight - oBrowse:nLeft + 1 ), "W+/W" )
DispOutAt( maxrow(), 0, padc( '<F3 Modal Window> <F11 Transp++> <F12 Transp-->',maxcol()+1), 'B/W' )
oBrowse:configure()
case nKey == K_F2
@@ -758,6 +763,36 @@ FUNCTION WvtMyBrowse_X()
Set Order To ( nIndex )
oBrowse:RefreshAll()
case nKey == K_F3
aLastPaint1 := WvtSetBlocks( {} )
pGT1 := hb_gtCreate( 'WVG' )
pGT := hb_gtSelect( pGT1 )
/* If coordinates are in row/cols */
/* Extended Style, Standard Style, Top, Left, Rows, Columns, ParentGT, Visible, RowCols */
/* If coordinates are in pixels */
/* Extended Style, Standard Style, x, y, width, height, ParentGT, Visible, RowCols */
nExStyle := WS_EX_DLGMODALFRAME
nStStyle := WS_POPUP + WS_CAPTION + WS_MINIMIZEBOX
hb_gtInfo( HB_GTI_PRESPARAMS, { nExStyle, nStStyle, 4, 8, 13, 50, pGT, .F., .T. } )
SetColor( 'W+/W' )
CLS
hb_gtInfo( HB_GTI_RESIZABLE , .F. )
Hb_GtInfo( HB_GTI_CLOSABLE , .F. )
hb_gtInfo( HB_GTI_WINTITLE , 'Information! [R:4 C:8]' )
hb_gtInfo( HB_GTI_DISABLE , pGT )
Hb_GtInfo( HB_GTI_SPEC , HB_GTS_SHOWWINDOW, SW_NORMAL )
alert( 'I am in modal window !' )
pGT1 := NIL
hb_gtSelect( pGT )
hb_gtInfo( HB_GTI_ENABLE, pGT )
hb_gtInfo( HB_GTI_SETFOCUS, pGT )
WvtSetBlocks( aLastPaint1 )
endcase
end

View File

@@ -739,37 +739,37 @@ FUNCTION Wvt_KillTimer( nTimerID )
FUNCTION Wvt_SetOnTop()
RETURN Hb_GtInfo( HB_GTI_SPEC, HB_GTS_WNDSTATE, WNDS_SETONTOP )
RETURN Hb_GtInfo( HB_GTI_SPEC, HB_GTS_WNDSTATE, HB_GTS_WS_SETONTOP )
//-------------------------------------------------------------------//
FUNCTION Wvt_SetAsNormal()
RETURN Hb_GtInfo( HB_GTI_SPEC, HB_GTS_WNDSTATE, WNDS_SETASNORMAL )
RETURN Hb_GtInfo( HB_GTI_SPEC, HB_GTS_WNDSTATE, HB_GTS_WS_SETASNORMAL )
//-------------------------------------------------------------------//
FUNCTION Wvt_Minimize()
RETURN Hb_GtInfo( HB_GTI_SPEC, HB_GTS_WNDSTATE, WNDS_MINIMIZED )
RETURN Hb_GtInfo( HB_GTI_SPEC, HB_GTS_WNDSTATE, HB_GTS_WS_MINIMIZED )
//-------------------------------------------------------------------//
FUNCTION Wvt_Maximize()
RETURN Hb_GtInfo( HB_GTI_SPEC, HB_GTS_WNDSTATE, WNDS_MAXIMIZED )
RETURN Hb_GtInfo( HB_GTI_SPEC, HB_GTS_WNDSTATE, HB_GTS_WS_MAXIMIZED )
//-------------------------------------------------------------------//
FUNCTION Wvt_Hide()
RETURN Hb_GtInfo( HB_GTI_SPEC, HB_GTS_WNDSTATE, WNDS_HIDDEN )
RETURN Hb_GtInfo( HB_GTI_SPEC, HB_GTS_WNDSTATE, HB_GTS_WS_HIDDEN )
//-------------------------------------------------------------------//
FUNCTION Wvt_Show()
RETURN Hb_GtInfo( HB_GTI_SPEC, HB_GTS_WNDSTATE, WNDS_NORMAL )
RETURN Hb_GtInfo( HB_GTI_SPEC, HB_GTS_WNDSTATE, HB_GTS_WS_NORMAL )
//-------------------------------------------------------------------//