From 3ea0411813239df327938bbe8a1ebb199e8bb959 Mon Sep 17 00:00:00 2001 From: Pritpal Bedi Date: Sat, 15 Nov 2008 16:30:12 +0000 Subject: [PATCH] 2008-11-15 08:17 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) * harbour/contrib/gtwvg/gtwvg.c * harbour/contrib/gtwvg/gtwvg.h + BOOL bDeferPaint; member. * harbour/contrib/gtwvg/hbgtwvg.ch + #define HB_GTI_DEFERPAINT Implemented hb_gtInfo( HB_GTI_DEFERPAINT, FALSE | TRUE ) For consoles hosting ActiveX controls need not be painted text buffer. :TOFIX To extend this protocol for resizing buffer too * harbour/contrib/gtwvg/wvgsink.c ! More unicode compliant. ! Fixed some errors in -DUNICODE builds, not all. ! strcat() => hb_strncat() : Viktor please check. * harbour/contrib/gtwvg/tests/demowvg.prg + Added more Active-X controls. --- harbour/ChangeLog | 18 ++++++++++ harbour/contrib/gtwvg/gtwvg.c | 27 ++++++++++++--- harbour/contrib/gtwvg/gtwvg.h | 6 ++-- harbour/contrib/gtwvg/hbgtwvg.ch | 1 + harbour/contrib/gtwvg/tests/demowvg.prg | 46 ++++++++++++++++++------- harbour/contrib/gtwvg/wvgsink.c | 36 +++++++++++-------- 6 files changed, 102 insertions(+), 32 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index d741471ead..07a2c2dcdd 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,24 @@ 2008-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org) */ +2008-11-15 08:17 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) + * harbour/contrib/gtwvg/gtwvg.c + * harbour/contrib/gtwvg/gtwvg.h + + BOOL bDeferPaint; member. + * harbour/contrib/gtwvg/hbgtwvg.ch + + #define HB_GTI_DEFERPAINT + Implemented hb_gtInfo( HB_GTI_DEFERPAINT, FALSE | TRUE ) + For consoles hosting ActiveX controls need not be painted text buffer. + :TOFIX To extend this protocol for resizing buffer too + + * harbour/contrib/gtwvg/wvgsink.c + ! More unicode compliant. + ! Fixed some errors in -DUNICODE builds, not all. + ! strcat() => hb_strncat() : Viktor please check. + + * harbour/contrib/gtwvg/tests/demowvg.prg + + Added more Active-X controls. + 2008-11-14 20:57 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) * harbour/contrib/gtwvg/gtwvg.c * harbour/contrib/gtwvg/wvgsink.c diff --git a/harbour/contrib/gtwvg/gtwvg.c b/harbour/contrib/gtwvg/gtwvg.c index 2dc88ca18e..e3d19fda63 100644 --- a/harbour/contrib/gtwvg/gtwvg.c +++ b/harbour/contrib/gtwvg/gtwvg.c @@ -1657,8 +1657,18 @@ static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wPara RECT updateRect; if( GetUpdateRect( hWnd, &updateRect, FALSE ) ) - hb_gt_wvt_PaintText( pWVT, updateRect ); - + { + if( !pWVT->bDeferPaint ) + { +//hb_ToOutDebug( "LLLLLLLLLLLLLLLLLLL hWnd=%i", hWnd ); + hb_gt_wvt_PaintText( pWVT, updateRect ); + } + else + { +//hb_ToOutDebug( "................... hWnd=%i", hWnd ); + return DefWindowProc( hWnd, message, wParam, lParam ); + } + } return 0; } @@ -3173,12 +3183,12 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) } case HB_GTS_WS_MINIMIZED: - ShowWindow( pWVT->hWnd, SW_MINIMIZE ); + SendNotifyMessage( pWVT->hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0 ); break; case HB_GTS_WS_MAXIMIZED: if( pWVT->bResizable ) - ShowWindow( pWVT->hWnd, SW_MAXIMIZE ); + SendNotifyMessage( pWVT->hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0 ); else ShowWindow( pWVT->hWnd, SW_RESTORE ); break; @@ -3314,6 +3324,14 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) } break; } + case HB_GTI_DEFERPAINT: + { + if( hb_itemType( pInfo->pNewVal ) & HB_IT_LOGICAL ) + { + pWVT->bDeferPaint = hb_itemGetL( pInfo->pNewVal ); + } + break; + } default: return HB_GTSUPER_INFO( pGT, iType, pInfo ); } @@ -3730,6 +3748,7 @@ static void hb_wvt_gtCreateObjects( PHB_GTWVT pWVT ) int iIndex; pWVT->bResizing = FALSE; + pWVT->bDeferPaint = FALSE; pWVT->penWhite = CreatePen( PS_SOLID, 0, ( COLORREF ) RGB( 255,255,255 ) ); pWVT->penBlack = CreatePen( PS_SOLID, 0, ( COLORREF ) RGB( 0, 0, 0 ) ); diff --git a/harbour/contrib/gtwvg/gtwvg.h b/harbour/contrib/gtwvg/gtwvg.h index beddc50a22..3cc737454c 100644 --- a/harbour/contrib/gtwvg/gtwvg.h +++ b/harbour/contrib/gtwvg/gtwvg.h @@ -417,9 +417,11 @@ 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_PARAMS pPP; // Presentation Parameters + PHB_GT_PARAMS pPP; // Presentation Parameters + + BOOL bDeferPaint; // To create pure Windows dialogs } HB_GTWVT, * PHB_GTWVT; diff --git a/harbour/contrib/gtwvg/hbgtwvg.ch b/harbour/contrib/gtwvg/hbgtwvg.ch index fc267fa291..6d4b7a5070 100644 --- a/harbour/contrib/gtwvg/hbgtwvg.ch +++ b/harbour/contrib/gtwvg/hbgtwvg.ch @@ -65,6 +65,7 @@ #define HB_GTI_ENABLE 73 #define HB_GTI_DISABLE 74 #define HB_GTI_SETFOCUS 75 +#define HB_GTI_DEFERPAINT 76 /* Presentation Parameters | HB_GTI_PRESPARAMS */ #define HB_GTI_PP_EXSTYLE 1 diff --git a/harbour/contrib/gtwvg/tests/demowvg.prg b/harbour/contrib/gtwvg/tests/demowvg.prg index 20b43bb645..01b424cbf9 100644 --- a/harbour/contrib/gtwvg/tests/demowvg.prg +++ b/harbour/contrib/gtwvg/tests/demowvg.prg @@ -1378,11 +1378,19 @@ FUNCTION CreateMainMenu() oMenu:AddItem( "Slide Show" ,{|| DlgSlideShow() } ) oMenu:AddItem( "-") oMenu:AddItem( "Dialog Scond" ,{|| DynDialog_1() } ) - oMenu:AddItem( "-") - oMenu:AddItem( "ActiveX - Analog Clock" , {|| Hb_ThreadStart( {|| ExecuteActiveX( 2 ) } ) } ) - oMenu:AddItem( "ActiveX - Internet Explorer", {|| Hb_ThreadStart( {|| ExecuteActiveX( 1 ) } ) } ) - oMenu:AddItem( "ActiveX - Visualize a PDF" , {|| Hb_ThreadStart( {|| ExecuteActiveX( 3 ) } ) } ) + g_oMenuBar:addItem( "",oMenu) + oMenu := wvtMenu():new():create() + oMenu:Caption:= "Active-X Controls" + oMenu:AddItem( "ActiveX - Analog Clock" , {|| Hb_ThreadStart( {|| ExecuteActiveX( 2 ) } ) } ) + oMenu:AddItem( "-") + oMenu:AddItem( "ActiveX - Internet Explorer", {|| Hb_ThreadStart( {|| ExecuteActiveX( 1 ) } ) } ) + oMenu:AddItem( "-") + oMenu:AddItem( "ActiveX - Visualize a PDF" , {|| Hb_ThreadStart( {|| ExecuteActiveX( 3 ) } ) } ) + oMenu:AddItem( "-") + oMenu:AddItem( "ActiveX - Explorer . DHTML" , {|| Hb_ThreadStart( {|| ExecuteActiveX( 11 ) } ) } ) + oMenu:AddItem( "-") + oMenu:AddItem( "ActiveX - Excel" , {|| Hb_ThreadStart( {|| ExecuteActiveX( 4 ) } ) } ) g_oMenuBar:addItem( "",oMenu) RETURN g_oMenuBar @@ -2248,11 +2256,13 @@ Function ExecuteActiveX( nActiveX ) #define evBtnUp 5 Static Function ExeActiveX( oCrt, nActiveX ) - Local oCOM, nKey + Local oCOM, nKey, cDhtml Local cServer Local cNavigate Local lEnd := .f. + hb_gtInfo( HB_GTI_DEFERPAINT, .T. ) +//hb_toOutDebug( 'oCrt:hwnd=%i', Wvt_GetWindowHandle() ) DEFAULT nActiveX TO 2 oCOM := WvgActiveXControl():New( oCrt, , { 0,0 }, { 200,200 }, , .t. ) @@ -2260,15 +2270,17 @@ Static Function ExeActiveX( oCrt, nActiveX ) do case case nActiveX == 1 hb_gtInfo( HB_GTI_WINTITLE, 'Shell.Explorer.2'+' [ '+'http://www.harbour.vouch.info'+' ]' ) - oCOM:CLSID := 'Shell.Explorer.2' - oCOM:mapEvent( 269, { {|| QOut( ' E X P L O R E R - 2 9 2' ) } } ) + oCOM:mapEvent( 269, { {|| QOut( ' E X P L O R E R - 2 6 9' ) } } ) + + case nActiveX == 11 + hb_gtInfo( HB_GTI_WINTITLE, 'Shell.Explorer.2'+' [ '+'MSHTML Demo'+' ]' ) + oCom:CLSID := "MSHTML:" + "

Stream Test

This HTML content is being loaded from a stream." case nActiveX == 2 hb_gtInfo( HB_GTI_WINTITLE, 'AnalogClockControl.AnalogClock' ) - oCOM:CLSID := 'AnalogClockControl.AnalogClock' - oCOM:Id := 5 + oCOM:Id := 5 oCOM:mapEvent( evDblClk, {|| DoModalWindow() ,; oCOM:Value := .75632 ,; oCOM:BackColor := RGB( 0,140,210 ),; @@ -2281,18 +2293,25 @@ Static Function ExeActiveX( oCrt, nActiveX ) case nActiveX == 3 hb_gtInfo( HB_GTI_WINTITLE, 'file://C:\harbour\contrib\gtwvg\tests\myharu.pdf' ) - oCOM:CLSID := 'file://C:\harbour\contrib\gtwvg\tests\myharu.pdf' + case nActiveX == 4 + hb_gtInfo( HB_GTI_WINTITLE, 'Frontpage.Application' ) + //oCom:CLSID := 'Frontpage.Application' + oCom:CLSID := 'Excel.Application' + oCom:visible := .t. endcase oCOM:create() + // After :CREATE() Messages + // if nActiveX == 1 - // After CREATE Messages - // oCOM:AddressBar := .t. oCOM:Navigate( 'http://www.harbour.vouch.info' ) + elseif nActiveX == 4 + oCom:visible := .t. + oCom:Display() endif do while !( lEnd ) @@ -2304,6 +2323,9 @@ Static Function ExeActiveX( oCrt, nActiveX ) elseif nKey == K_LBUTTONDOWN //hb_ToOutDebug( "Key is passed to the window procedure also!" ) + elseif nKey == K_F12 + oCom:Navigate( 'www.vouch.info' ) + endif if nKey == 27 diff --git a/harbour/contrib/gtwvg/wvgsink.c b/harbour/contrib/gtwvg/wvgsink.c index f1bbe64c0b..e24a710194 100644 --- a/harbour/contrib/gtwvg/wvgsink.c +++ b/harbour/contrib/gtwvg/wvgsink.c @@ -357,15 +357,12 @@ static ULONG STDMETHODCALLTYPE Invoke( IEventHandler *this, DISPID dispid, REFII { int iArg; int i; -// int iEvPos ; // = -1; -// int iEvEnum; ULONG ulRefMask = 0; ULONG ulPos; PHB_ITEM pItem; -// PHB_DYNS pSymbol; PHB_ITEM pItemArray[ 32 ]; // max 32 parameters? PHB_ITEM *pItems; - PHB_ITEM Key = hb_itemNew( NULL ); + PHB_ITEM Key; // We implement only a "default" interface if ( !IsEqualIID( riid, &IID_NULL ) ) @@ -378,7 +375,7 @@ static ULONG STDMETHODCALLTYPE Invoke( IEventHandler *this, DISPID dispid, REFII HB_SYMBOL_UNUSED( pexcepinfo ); HB_SYMBOL_UNUSED( puArgErr ); - + Key = hb_itemNew( NULL ); if ( hb_hashScan( ( ( MyRealIEventHandler * ) this )->pEvents, hb_itemPutNL( Key, dispid ), &ulPos ) ) { PHB_ITEM pArray = hb_hashGetValueAt( ( ( MyRealIEventHandler * ) this )->pEvents, ulPos ); @@ -419,7 +416,7 @@ static ULONG STDMETHODCALLTYPE Invoke( IEventHandler *this, DISPID dispid, REFII pItem = hb_itemNew( NULL ); hb_oleVariantToItem( pItem, &( params->rgvarg[ iArg-i ] ) ); // VARIANT *pVariant ) pItemArray[ i-1 ] = pItem; - ulRefMask |= ( 1L << (i-1) ); // set bit i + ulRefMask |= ( 1L << (i-1) ); // set bit i } if( iArg ) @@ -435,6 +432,9 @@ static ULONG STDMETHODCALLTYPE Invoke( IEventHandler *this, DISPID dispid, REFII { if( ( ( &( params->rgvarg[ iArg-i ] ) )->n1.n2.vt & VT_BYREF ) == VT_BYREF ) { + hb_oleItemToVariant( &( params->rgvarg[ iArg-i ] ), pItemArray[ iArg-i ] ); + + #if 0 switch( ( &( params->rgvarg[ iArg-i ] ) )->n1.n2.vt ) { case VT_I2|VT_BYREF: @@ -456,6 +456,7 @@ static ULONG STDMETHODCALLTYPE Invoke( IEventHandler *this, DISPID dispid, REFII *( ( &( params->rgvarg[ iArg-i ] ) )->n1.n2.n3.pdate ) = ( DATE ) ( double ) ( hb_itemGetDL( pItemArray[i-1] )-2415019 ); break; } + #endif } } @@ -510,10 +511,7 @@ static HRESULT SetupConnectionPoint( device_interface* pdevice_interface, REFIID HRESULT hr; IID rriid; register IEventHandler* thisobj; -// DWORD m_Points; DWORD dwCookie = 0; -// ITypeLib* pITypeLib; -// DISPID dispid; HB_SYMBOL_UNUSED( riid ); HB_SYMBOL_UNUSED( pn ); @@ -630,7 +628,7 @@ HB_FUNC( HB_AX_ATLAXWININIT ) if( !hLib ) { GetSystemDirectory( szLibName, MAX_PATH ); - strcat( szLibName, "\\atl.dll" ); + hb_strncat( szLibName, "\\atl.dll", MAX_PATH -1 ); hLib = LoadLibrary( ( LPCSTR ) szLibName ); if( hLib ) @@ -682,15 +680,20 @@ HB_FUNC( HB_AX_ATLAXCREATECONTROL ) AtlAxCreateControl = ( PATLAXCREATECONTROL ) GetProcAddress( hLib, "AtlAxCreateControl" ); if ( AtlAxCreateControl ) { - hContainer = ( HWND ) CreateWindowEx( Exstyle, class, Caption, Style, x, y, w, h, hParent, id, GetModuleHandle( NULL ), NULL ); + LPTSTR cCaption = HB_TCHAR_CONVTO( Caption ); + LPTSTR cClass = HB_TCHAR_CONVTO( class ); + hContainer = ( HWND ) CreateWindowEx( Exstyle, cClass, cCaption, Style, x, y, w, h, hParent, id, GetModuleHandle( NULL ), NULL ); + HB_TCHAR_FREE( cCaption ); + HB_TCHAR_FREE( cClass ); + if( hContainer ) { SendMessage( ( HWND ) hContainer, ( UINT ) WM_SETFONT, ( WPARAM ) GetStockObject( DEFAULT_GUI_FONT ), ( LPARAM ) ( MAKELPARAM( FALSE, 0 ) ) ); uLen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, Caption, strlen( Caption )+1, NULL, 0 ); - wString = (BSTR) malloc( uLen * sizeof(WCHAR)); + wString = ( BSTR ) malloc( uLen * sizeof( WCHAR ) ); MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, Caption, strlen( Caption )+1, wString, uLen ); - ( AtlAxCreateControl ) ( wString, hContainer,NULL, &pUnk ); + ( AtlAxCreateControl ) ( wString, hContainer, NULL, &pUnk ); free( wString ); @@ -739,7 +742,12 @@ HB_FUNC( HB_AX_ATLAXGETCONTROL ) // HWND hWnd = handle of control container wind AtlAxGetControl = ( PATLAXGETCONTROL ) GetProcAddress( hLib, "AtlAxGetControl" ); if( AtlAxGetControl ) { - hWnd = ( HWND ) CreateWindowEx( Exstyle, lpcclass, Caption, Style, x, y, w, h, hParent, id, GetModuleHandle( NULL ), NULL ); + LPTSTR cCaption = HB_TCHAR_CONVTO( Caption ); + LPTSTR cClass = HB_TCHAR_CONVTO( lpcclass ); + hWnd = ( HWND ) CreateWindowEx( Exstyle, cClass, cCaption, Style, x, y, w, h, hParent, id, GetModuleHandle( NULL ), NULL ); + HB_TCHAR_FREE( cCaption ); + HB_TCHAR_FREE( cClass ); + if( hWnd ) { SendMessage( hWnd,