2008-06-11 12:30 UTC+0800 Pritpal Bedi (pritpal@vouchcac.com

* harbour/source/rtl/gtwvt/gtwvt.c
   * harbour/source/rtl/gtwvt/gtwvt.h
   * harbour/include/hbgtinfo.ch
     + Added HB_GTI_CLOSABLE
       Hb_GtInfo( HB_GTI_CLOSABLE, TRUE|FALSE ) -> lPrevState
       TRUE enables the "X" button, FALSE disbles it.
     + Added functionality to respond to WM_CLOSE message. 
       If application returns 1 then application is exited.
    
   * harbour/tests/wvtext.prg
     + Added functionality to demonstrate above feature.
This commit is contained in:
Pritpal Bedi
2008-06-11 19:35:37 +00:00
parent 6e2dfe8be3
commit c04afe2af3
5 changed files with 67 additions and 18 deletions

View File

@@ -8,6 +8,19 @@
2008-12-31 13:59 UTC+0100 Foo Bar <foo.bar@foobar.org>
*/
2008-06-11 12:30 UTC+0800 Pritpal Bedi (pritpal@vouchcac.com
* harbour/source/rtl/gtwvt/gtwvt.c
* harbour/source/rtl/gtwvt/gtwvt.h
* harbour/include/hbgtinfo.ch
+ Added HB_GTI_CLOSABLE
Hb_GtInfo( HB_GTI_CLOSABLE, TRUE|FALSE ) -> lPrevState
TRUE enables the "X" button, FALSE disbles it.
+ Added functionality to respond to WM_CLOSE message.
If application returns 1 then application is exited.
* harbour/tests/wvtext.prg
+ Added functionality to demonstrate above feature.
2008-06-11 19:39 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* ChangeLog
+ Marked changes merged with RC1.

View File

@@ -120,7 +120,7 @@
#define HB_GTI_SELECTCOPY 48 /* toggles screen content selection and copy to clipboard (supported by: GTWVT) */
#define HB_GTI_RESIZABLE 49 /* toggles ability to resize window (supported by: GTWVT) */
#define HB_GTI_CLOSEALLOWED 50 /* toggles ability to close window (supported by: GTWVT) */
#define HB_GTI_CLOSABLE 50 /* toggles ability to close window (supported by: GTWVT) */
/* Additional constants to enhance GT */
#define HB_GTI_NOTIFIERBLOCK 51 /* This optional codeblock gets called whenever certain events occur. See HB_GTE_* */

View File

@@ -227,6 +227,7 @@ static PHB_GTWVT hb_gt_wvt_New( PHB_GT pGT )
pWVT->bSelectCopy = TRUE;
pWVT->bResizable = TRUE;
pWVT->bClosable = TRUE;
return pWVT;
}
@@ -525,9 +526,9 @@ static void hb_gt_wvt_FitSize( PHB_GTWVT pWVT )
width = tm.tmAveCharWidth * pWVT->COLS;
height = tm.tmHeight * pWVT->ROWS;
if( width <= maxWidth &&
height <= maxHeight &&
tm.tmAveCharWidth >= 3 &&
if( width <= maxWidth &&
height <= maxHeight &&
tm.tmAveCharWidth >= 3 &&
tm.tmHeight >= 4 )
{
if( pWVT->hFont )
@@ -1427,6 +1428,7 @@ 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 )
{
PHB_GTWVT pWVT = hb_gt_wvt_Find( hWnd );
int iEvResult;
if( pWVT ) switch( message )
{
@@ -1483,10 +1485,12 @@ static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wPara
case WM_CLOSE: /* Clicked 'X' on system menu */
/* NOTE: this follows more code . will post later as it needs to be cleaned */
/* But it demonstrates the concept */
hb_gt_wvt_FireEvent( pWVT, HB_GTE_CLOSE );
if( hb_set.HB_SET_CANCEL )
hb_vmRequestCancel();
iEvResult = hb_gt_wvt_FireEvent( pWVT, HB_GTE_CLOSE );
if( iEvResult == 0 )
{
if( hb_set.HB_SET_CANCEL )
hb_vmRequestCancel();
}
return 0;
case WM_QUIT:
@@ -2273,6 +2277,22 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
}
break;
}
case HB_GTI_CLOSABLE:
{
pInfo->pResult = hb_itemPutL( pInfo->pResult, pWVT->bClosable );
if( pInfo->pNewVal )
{
BOOL bNewValue = hb_itemGetL( pInfo->pNewVal );
if( bNewValue != pWVT->bClosable )
{
HMENU hSysMenu = GetSystemMenu( pWVT->hWnd, FALSE );
EnableMenuItem( hSysMenu, SC_CLOSE, MF_BYCOMMAND | ( bNewValue ? MF_ENABLED : MF_GRAYED ) );
pWVT->bClosable = bNewValue;
}
}
break;
}
default:
return HB_GTSUPER_INFO( pGT, iType, pInfo );
}

View File

@@ -162,6 +162,7 @@ typedef struct
BOOL bResizable;
BOOL bSelectCopy;
BOOL bClosable;
} HB_GTWVT, * PHB_GTWVT;

View File

@@ -20,7 +20,7 @@
//----------------------------------------------------------------------//
FUNCTION Main()
Local nKey, lMark, lResize
Local nKey, lMark, lResize, lClose
Local nHeight := 20
Local nWidth := Int( nHeight/2 )
Local cFont
@@ -58,6 +58,10 @@ FUNCTION Main()
lResize := Hb_GtInfo( HB_GTI_RESIZABLE )
Hb_GtInfo( HB_GTI_RESIZABLE, !lResize )
CASE nKey == K_F4
lClose := Hb_GtInfo( HB_GTI_CLOSABLE )
hb_GtInfo( HB_GTI_CLOSABLE, !lClose )
ENDCASE
ENDDO
@@ -70,12 +74,12 @@ STATIC FUNCTION MyNotifier( nEvent, ... )
CASE nEvent == HB_GTE_SETFOCUS
DispScreen()
Alert( "We got focus" )
DispOutAt( maxrow(), 33, "We got focus", 'B/G*' )
CASE nEvent == HB_GTE_CLOSE
DispScreen()
if Alert( 'Close Application', {'Yes','No' } ) == 1
QUIT
if Alert( 'Close Application', {'Yes','No' } ) == 2
Return ( 1 )
endif
ENDCASE
@@ -85,15 +89,24 @@ STATIC FUNCTION MyNotifier( nEvent, ... )
//----------------------------------------------------------------------//
STATIC FUNCTION DispScreen()
Local nRow := 18, nCol := 28
Local cColor := 'N/W*'
CLS
DispOutAt( 0, 0,padc( 'Harbour GT - New Features', maxcol()+1 ), 'N/GR*' )
DispOutAt( maxrow() - 1, 0, padc( '<F2 MarkCopy:Toggle> <F3 Resize:Toggle> <Click Other Window> <Click X Button>', maxcol()+1 ), 'N/G*' )
DispOutAt( maxrow(), 0, Space( maxcol()+1 ), 'N/G*' )
DispOutAt( 0, 0, "TL" )
DispOutAt( 0, MaxCol() - 1, "TR" )
DispOutAt( MaxRow(), 0, "BL" )
DispOutAt( MaxRow(), MaxCol() - 1, "BR" )
DispOutAt( nRow+0, nCol, '< F2 MarkCopy Toggle >', cColor )
DispOutAt( nRow+1, nCol, '< F3 Resize Toggle >', cColor )
DispOutAt( nRow+2, nCol, '< F4 Closable Toggle >', cColor )
DispOutAt( nRow+3, nCol, '< Click Other Window >', cColor )
DispOutAt( nRow+4, nCol, '< Click X Button >', cColor )
DispOutAt( maxrow(), 0, Space( maxcol()+1 ), "N/G*" )
DispOutAt( 0, 0 , "TL", "N/GR*" )
DispOutAt( 0, MaxCol() - 1 , "TR", "N/GR*" )
DispOutAt( MaxRow(), 0 , "BL", "N/G*" )
DispOutAt( MaxRow(), MaxCol() - 1, "BR", "N/G*" )
RETURN NIL
@@ -104,6 +117,8 @@ PROCEDURE HB_GTSYS()
REQUEST HB_GT_WIN
RETURN
//----------------------------------------------------------------------//
PROCEDURE HB_GT_WVT_DEFAULT()
RETURN