Files
harbour-core/harbour/contrib/gtwvg/parthdlr.prg
Viktor Szakats c300ba14ee 2012-07-23 17:26 UTC+0200 Viktor Szakats (harbour syenar.net)
+ contrib/gtwvg/3state.prg
  + contrib/gtwvg/activex.prg
  + contrib/gtwvg/bitmap.prg
  + contrib/gtwvg/checkbox.prg
  + contrib/gtwvg/class.prg
  + contrib/gtwvg/combobox.prg
  + contrib/gtwvg/crt.prg
  + contrib/gtwvg/dataref.prg
  + contrib/gtwvg/dialog.prg
  + contrib/gtwvg/drawarea.prg
  + contrib/gtwvg/genrc.prg
  + contrib/gtwvg/htmlview.prg
  + contrib/gtwvg/listbox.prg
  + contrib/gtwvg/menubar.prg
  + contrib/gtwvg/mle.prg
  + contrib/gtwvg/paint.prg
  + contrib/gtwvg/parthdlr.prg
  + contrib/gtwvg/pushbut.prg
  + contrib/gtwvg/radiobut.prg
  + contrib/gtwvg/scrollbr.prg
  + contrib/gtwvg/sle.prg
  + contrib/gtwvg/statbar.prg
  + contrib/gtwvg/static.prg
  + contrib/gtwvg/syswnd.prg
  + contrib/gtwvg/tabpage.prg
  + contrib/gtwvg/toolbar.prg
  + contrib/gtwvg/treeview.prg
  + contrib/gtwvg/wnd.prg
  + contrib/hbxbp/3state.prg
  + contrib/hbxbp/appevent.prg
  + contrib/hbxbp/bitmap.prg
  + contrib/hbxbp/browse.prg
  + contrib/hbxbp/checkbox.prg
  + contrib/hbxbp/clipboard.prg
  + contrib/hbxbp/combobox.prg
  + contrib/hbxbp/crt.prg
  + contrib/hbxbp/dataref.prg
  + contrib/hbxbp/dialog.prg
  + contrib/hbxbp/filedialog.prg
  + contrib/hbxbp/fontdialog.prg
  + contrib/hbxbp/generic.prg
  + contrib/hbxbp/gra.prg
  + contrib/hbxbp/htmlviewer.prg
  + contrib/hbxbp/listbox.prg
  + contrib/hbxbp/menubar.prg
  + contrib/hbxbp/mle.prg
  + contrib/hbxbp/parthandler.prg
  + contrib/hbxbp/presspace.prg
  + contrib/hbxbp/printdialog.prg
  + contrib/hbxbp/printer.prg
  + contrib/hbxbp/pushbutton.prg
  + contrib/hbxbp/radiobutton.prg
  + contrib/hbxbp/rtf.prg
  + contrib/hbxbp/scrollbar.prg
  + contrib/hbxbp/sle.prg
  + contrib/hbxbp/spinbutton.prg
  + contrib/hbxbp/static.prg
  + contrib/hbxbp/statusbar.prg
  + contrib/hbxbp/style.prg
  + contrib/hbxbp/tabpage.prg
  + contrib/hbxbp/toolbar.prg
  + contrib/hbxbp/treeview.prg
  + contrib/hbxbp/window.prg
  - contrib/gtwvg/wvg3stat.prg
  - contrib/gtwvg/wvgax.prg
  - contrib/gtwvg/wvgbitmp.prg
  - contrib/gtwvg/wvgcheck.prg
  - contrib/gtwvg/wvgclass.prg
  - contrib/gtwvg/wvgcombo.prg
  - contrib/gtwvg/wvgcrt.prg
  - contrib/gtwvg/wvgdarea.prg
  - contrib/gtwvg/wvgdatar.prg
  - contrib/gtwvg/wvgdlg.prg
  - contrib/gtwvg/wvggenrc.prg
  - contrib/gtwvg/wvghtmlv.prg
  - contrib/gtwvg/wvglistb.prg
  - contrib/gtwvg/wvgmenub.prg
  - contrib/gtwvg/wvgmle.prg
  - contrib/gtwvg/wvgpaint.prg
  - contrib/gtwvg/wvgphdlr.prg
  - contrib/gtwvg/wvgpushb.prg
  - contrib/gtwvg/wvgradio.prg
  - contrib/gtwvg/wvgscrlb.prg
  - contrib/gtwvg/wvgsle.prg
  - contrib/gtwvg/wvgstatb.prg
  - contrib/gtwvg/wvgstatc.prg
  - contrib/gtwvg/wvgsysw.prg
  - contrib/gtwvg/wvgtabpg.prg
  - contrib/gtwvg/wvgtoolb.prg
  - contrib/gtwvg/wvgtreev.prg
  - contrib/gtwvg/wvgwnd.prg
  - contrib/hbxbp/xbp3state.prg
  - contrib/hbxbp/xbpappevent.prg
  - contrib/hbxbp/xbpbitmap.prg
  - contrib/hbxbp/xbpbrowse.prg
  - contrib/hbxbp/xbpcheckbox.prg
  - contrib/hbxbp/xbpclipboard.prg
  - contrib/hbxbp/xbpcombobox.prg
  - contrib/hbxbp/xbpcrt.prg
  - contrib/hbxbp/xbpdataref.prg
  - contrib/hbxbp/xbpdialog.prg
  - contrib/hbxbp/xbpfiledialog.prg
  - contrib/hbxbp/xbpfontdialog.prg
  - contrib/hbxbp/xbpgeneric.prg
  - contrib/hbxbp/xbpgra.prg
  - contrib/hbxbp/xbphtmlviewer.prg
  - contrib/hbxbp/xbplistbox.prg
  - contrib/hbxbp/xbpmenubar.prg
  - contrib/hbxbp/xbpmle.prg
  - contrib/hbxbp/xbpparthandler.prg
  - contrib/hbxbp/xbppresspace.prg
  - contrib/hbxbp/xbpprintdialog.prg
  - contrib/hbxbp/xbpprinter.prg
  - contrib/hbxbp/xbppushbutton.prg
  - contrib/hbxbp/xbpradiobutton.prg
  - contrib/hbxbp/xbprtf.prg
  - contrib/hbxbp/xbpscrollbar.prg
  - contrib/hbxbp/xbpsle.prg
  - contrib/hbxbp/xbpspinbutton.prg
  - contrib/hbxbp/xbpstatic.prg
  - contrib/hbxbp/xbpstatusbar.prg
  - contrib/hbxbp/xbpstyle.prg
  - contrib/hbxbp/xbptabpage.prg
  - contrib/hbxbp/xbptoolbar.prg
  - contrib/hbxbp/xbptreeview.prg
  - contrib/hbxbp/xbpwindow.prg
  * contrib/gtwvg/gtwvg.hbp
  * contrib/hbxbp/hbxbp.hbp
    % deleted unnecessary prefix from .prg filenames, 
      thus making the much more easily searchable and 
      recognizable and also allowing more room for 
      the real description with much less undecipherable 
      abbreviations.
2012-07-23 15:32:39 +00:00

597 lines
17 KiB
Plaintext

/*
* $Id$
*/
/*
* Harbour Project source code:
* Source file for the Wvg*Classes
*
* Copyright 2008 Pritpal Bedi <pritpal@vouchcac.com>
* http://harbour-project.org
*
* 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 software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* 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.
*
*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*
* EkOnkar
* ( The LORD is ONE )
*
* Xbase++ Compatible xbpPartHandler Class
*
* Pritpal Bedi <pritpal@vouchcac.com>
* 08Nov2008
*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
#include "hbclass.ch"
#include "common.ch"
#include "inkey.ch"
#include "hbgtinfo.ch"
#include "hbgtwvg.ch"
#include "wvtwin.ch"
#include "wvgparts.ch"
/*----------------------------------------------------------------------*/
CLASS WvgPartHandler
DATA cargo
METHOD new( oParent, oOwner )
METHOD create( oParent, oOwner )
METHOD configure( oParent, oOwner )
METHOD destroy()
METHOD handleEvent( hEvent, mp1, mp2 )
METHOD status()
METHOD removeChild( oChild )
METHOD addChild( oWvg )
METHOD childFromName( nNameId )
METHOD childList()
METHOD delChild( oWvg )
METHOD setName( nNameId )
METHOD setOwner( oWvg )
METHOD setParent( oWvg )
METHOD notifier( nEvent, xParams )
METHOD controlWndProc( hWnd, nMessage, nwParam, nlParam )
DATA aChildren INIT {}
DATA nNameId
DATA oParent
DATA oOwner
DATA nStatus INIT 0
ENDCLASS
/*----------------------------------------------------------------------*/
METHOD WvgPartHandler:new( oParent, oOwner )
::oParent := oParent
::oOwner := oOwner
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgPartHandler:create( oParent, oOwner )
DEFAULT oParent TO ::oParent
DEFAULT oOwner TO ::oOwner
::oParent := oParent
::oOwner := oOwner
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgPartHandler:configure( oParent, oOwner )
DEFAULT oParent TO ::oParent
DEFAULT oOwner TO ::oOwner
::oParent := oParent
::oOwner := oOwner
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgPartHandler:destroy()
::hChildren := NIL
::nNameId := NIL
::oParent := NIL
::oOwner := NIL
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgPartHandler:handleEvent( hEvent, mp1, mp2 )
HB_SYMBOL_UNUSED( hEvent )
HB_SYMBOL_UNUSED( mp1 )
HB_SYMBOL_UNUSED( mp2 )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgPartHandler:status()
RETURN ::nStatus
/*----------------------------------------------------------------------*/
METHOD WvgPartHandler:addChild( oWvg )
oWvg:nNameID := oWvg:nID
aadd( ::aChildren, oWvg )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgPartHandler:childFromName( nNameId )
LOCAL i, oWvg
FOR i := 1 TO len( ::aChildren )
IF ::aChildren[ i ]:nNameID != NIL .and. ::aChildren[ i ]:nNameID == nNameID
oWvg := ::aChildren[ i ]
ENDIF
NEXT
RETURN oWvg
/*----------------------------------------------------------------------*/
METHOD WvgPartHandler:childList()
RETURN ::aChildren
/*----------------------------------------------------------------------*/
METHOD WvgPartHandler:removeChild( oChild )
LOCAL n
IF ( n := ascan( ::aChildren, {|o| o == oChild } ) ) > 0
hb_aDel( ::aChildren, n, .t. )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgPartHandler:delChild( oWvg )
LOCAL n
n := ascan( ::aChildren, {|o| o == oWvg } )
IF n > 0
oWvg:destroy()
adel( ::aChildren, n )
asize( ::aChildren, len( ::aChildren )-1 )
endif
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgPartHandler:setName( nNameId )
LOCAL nOldNameId := ::nNameId
IF Valtype( nNameId ) == "N"
::nNameID := nNameId
ENDIF
RETURN nOldNameId
/*----------------------------------------------------------------------*/
METHOD WvgPartHandler:setOwner( oWvg )
LOCAL oOldXbp := ::oOwner
IF valtype( oWvg ) == "O"
::oOwner := oWvg
ENDIF
RETURN oOldXbp
/*----------------------------------------------------------------------*/
METHOD WvgPartHandler:setParent( oWvg )
LOCAL oOldXbp := ::oParent
IF valtype( oWvg ) == "O"
::oParent := oWvg
ENDIF
RETURN oOldXbp
/*----------------------------------------------------------------------*/
/*
This will be called by the WvgCRT() console FOR various events TO be propogated TO child controls
*/
METHOD WvgPartHandler:notifier( nEvent, xParams )
Local aPos, aMenuItem, nIndex, nCtrlID, oObj
LOCAL nReturn := 0
DO CASE
CASE nEvent == HB_GTE_MOUSE
IF xParams[ 1 ] == WM_MOUSEHOVER
aPos := { xParams[ 3 ], xParams[ 4 ] }
elseif xParams[ 1 ] == WM_MOUSELEAVE
/* Nothing */
else
aPos := iif( ::mouseMode == 2, { xParams[ 3 ], xParams[ 4 ] }, { xParams[ 5 ], xParams[ 6 ] } )
ENDIF
SWITCH xParams[ 1 ]
CASE WM_MOUSEHOVER
IF HB_ISBLOCK( ::sl_enter )
eval( ::sl_enter, aPos, NIL, Self )
ENDIF
EXIT
CASE WM_MOUSELEAVE
IF HB_ISBLOCK( ::sl_leave )
eval( ::sl_leave, aPos, NIL, Self )
ENDIF
EXIT
CASE WM_RBUTTONDOWN
IF HB_ISBLOCK( ::sl_rbDown )
eval( ::sl_rbDown, aPos, NIL, Self )
ENDIF
EXIT
CASE WM_LBUTTONDOWN
IF HB_ISBLOCK( ::sl_lbDown )
eval( ::sl_lbDown, aPos, NIL, Self )
ENDIF
EXIT
CASE WM_RBUTTONUP
IF HB_ISBLOCK( ::sl_rbUp )
eval( ::sl_rbUp, aPos, NIL, Self )
ENDIF
EXIT
CASE WM_LBUTTONUP
IF HB_ISBLOCK( ::sl_lbUp )
eval( ::sl_lbUp, aPos, NIL, Self )
ENDIF
EXIT
CASE WM_RBUTTONDBLCLK
IF HB_ISBLOCK( ::sl_rbDblClick )
eval( ::sl_rbDblClick, aPos, NIL, Self )
ENDIF
EXIT
CASE WM_LBUTTONDBLCLK
IF HB_ISBLOCK( ::sl_lbDblClick )
eval( ::sl_lbDblClick, aPos, NIL, Self )
ENDIF
EXIT
CASE WM_MBUTTONDOWN
IF HB_ISBLOCK( ::sl_mbDown )
eval( ::sl_mbDown, aPos, NIL, Self )
ENDIF
EXIT
CASE WM_MBUTTONUP
IF HB_ISBLOCK( ::sl_mbClick )
eval( ::sl_mbClick, aPos, NIL, Self )
ENDIF
EXIT
CASE WM_MBUTTONDBLCLK
IF HB_ISBLOCK( ::sl_mbDblClick )
eval( ::sl_mbDblClick, aPos, NIL, Self )
ENDIF
EXIT
CASE WM_MOUSEMOVE
IF HB_ISBLOCK( ::sl_motion )
eval( ::sl_motion, aPos, NIL, Self )
ENDIF
EXIT
CASE WM_MOUSEWHEEL
IF HB_ISBLOCK( ::sl_wheel )
eval( ::sl_wheel, aPos, NIL, Self )
ENDIF
EXIT
CASE WM_NCMOUSEMOVE
EXIT
END
CASE nEvent == HB_GTE_KEYBOARD
IF HB_ISBLOCK( ::keyboard )
eval( ::keyboard, xParams, NIL, Self )
ENDIF
CASE nEvent == HB_GTE_SETFOCUS
/* aeval( ::aChildren, {|o| WVG_InvalidateRect( o:hWnd ) } ) */
IF HB_ISBLOCK( ::sl_setInputFocus )
eval( ::sl_setInputFocus, NIL, NIL, Self )
ENDIF
::lHasInputFocus := .t.
CASE nEvent == HB_GTE_KILLFOCUS
IF HB_ISBLOCK( ::sl_killInputFocus )
eval( ::sl_killInputFocus, NIL, NIL, Self )
ENDIF
::lHasInputFocus := .f.
CASE nEvent == HB_GTE_PAINT
/* aeval( ::aChildren, {|o| WVG_InvalidateRect( o:hWnd ) } ) */
CASE nEvent == HB_GTE_GUIPARTS
/* Eventally every window be checked if it falls within returned rectangle or not
* then it will avoid a lot of flickering
*/
aeval( ::aChildren, {|o| WVG_InvalidateRect( o:hWnd ) } )
CASE nEvent == HB_GTE_CLOSE
IF HB_ISBLOCK( ::close )
nReturn := eval( ::close, NIL, NIL, Self )
ENDIF
CASE nEvent == HB_GTE_MENU
DO CASE
CASE xParams[ 1 ] == 0 /* menu selected */
IF HB_ISOBJECT( ::oMenu )
IF !empty( aMenuItem := ::oMenu:FindMenuItemById( xParams[ 2 ] ) )
IF HB_ISBLOCK( aMenuItem[ 2 ] )
Eval( aMenuItem[ 2 ], aMenuItem[ 1 ], NIL, aMenuItem[ 4 ] )
ELSEIF HB_ISBLOCK( aMenuItem[ 3 ] )
Eval( aMenuItem[ 3 ], aMenuItem[ 1 ], NIL, aMenuItem[ 4 ] )
ENDIF
ENDIF
ENDIF
CASE xParams[ 1 ] == 1 .and. HB_ISOBJECT( ::oMenu ) /* enter menu loop */
IF HB_ISBLOCK( ::oMenu:sl_beginMenu )
Eval( ::oMenu:sl_beginMenu, NIL, NIL, Self )
ENDIF
CASE xParams[ 1 ] == 2 .and. HB_ISOBJECT( ::oMenu ) /* exit menu loop */
IF HB_ISBLOCK( ::oMenu:sl_endMenu )
Eval( ::oMenu:sl_endMenu, NIL, NIL, Self )
ENDIF
ENDCASE
CASE nEvent == HB_GTE_NOTIFY
nCtrlID := xParams[ 1 ]
IF ( nIndex := ascan( ::aChildren, {|o| o:nID == nCtrlID } ) ) > 0
RETURN ::aChildren[ nIndex ]:handleEvent( HB_GTE_NOTIFY, xParams )
ENDIF
CASE nEvent == HB_GTE_COMMAND
nCtrlID := xParams[ 2 ]
IF ( nIndex := ascan( ::aChildren, {|o| o:nID == nCtrlID } ) ) > 0
RETURN ::aChildren[ nIndex ]:handleEvent( HB_GTE_COMMAND, xParams )
ENDIF
CASE nEvent == HB_GTE_CTLCOLOR
oObj := ::findObjectByHandle( xParams[ 2 ] )
IF HB_ISOBJECT( oObj )
RETURN oObj:handleEvent( HB_GTE_CTLCOLOR, xParams )
ENDIF
CASE nEvent == HB_GTE_HSCROLL
IF xParams[ 3 ] == ::hWnd
RETURN ::handleEvent( HB_GTE_VSCROLL, xParams )
ELSE
oObj := ::findObjectByHandle( xParams[ 3 ] )
IF HB_ISOBJECT( oObj )
RETURN oObj:handleEvent( HB_GTE_VSCROLL, xParams )
ENDIF
ENDIF
CASE nEvent == HB_GTE_VSCROLL
IF xParams[ 3 ] == ::hWnd
RETURN ::handleEvent( HB_GTE_VSCROLL, xParams )
ELSE
oObj := ::findObjectByHandle( xParams[ 3 ] )
IF HB_ISOBJECT( oObj )
RETURN oObj:handleEvent( HB_GTE_VSCROLL, xParams )
ENDIF
ENDIF
CASE nEvent == HB_GTE_RESIZED
IF ::objType == objTypeDialog
IF ::drawingArea:objType == objTypeDA
::drawingArea:setPosAndSize( {0,0}, ::currentSize(), .f. )
ENDIF
ENDIF
IF HB_ISBLOCK( ::sl_resize )
eval( ::sl_resize, { xParams[ 1 ], xParams[ 2 ] }, { xParams[ 3 ], xParams[ 4 ] }, Self )
ENDIF
aeval( ::aChildren, {|o| o:handleEvent( HB_GTE_RESIZED, { 0, 0, 0, 0, 0 } ) } )
CASE nEvent == HB_GTE_KEYTOITEM
IF xParams[ 3 ] == ::hWnd
RETURN ::handleEvent( HB_GTE_KEYTOITEM, xParams )
ELSE
oObj := ::findObjectByHandle( xParams[ 3 ] )
IF HB_ISOBJECT( oObj )
RETURN oObj:handleEvent( HB_GTE_KEYTOITEM, xParams )
ENDIF
ENDIF
ENDCASE
RETURN nReturn
/*----------------------------------------------------------------------*/
/*
This will be called if a control is assigned its own WndProc via ::SetWindowProcCallback()
*/
METHOD WvgPartHandler:controlWndProc( hWnd, nMessage, nwParam, nlParam )
LOCAL nCtrlID, nNotifctn, hWndCtrl, nObj, aMenuItem, oObj, nReturn
SWITCH nMessage
CASE WM_ERASEBKGND
IF ::objType == objTypeDA .AND. ! empty( ::hBrushBG )
::handleEvent( HB_GTE_CTLCOLOR, { nwParam, nlParam } )
ENDIF
EXIT
CASE WM_COMMAND
nCtrlID := WVG_LOWORD( nwParam )
nNotifctn := WVG_HIWORD( nwParam )
hWndCtrl := nlParam
IF hWndCtrl == 0 /* It is menu */
IF HB_ISOBJECT( ::oMenu )
IF !empty( aMenuItem := ::oMenu:FindMenuItemById( nCtrlID ) )
IF HB_ISBLOCK( aMenuItem[ 2 ] )
Eval( aMenuItem[ 2 ], aMenuItem[ 1 ], NIL, aMenuItem[ 4 ] )
ELSEIF HB_ISBLOCK( aMenuItem[ 3 ] )
Eval( aMenuItem[ 3 ], aMenuItem[ 1 ], NIL, aMenuItem[ 4 ] )
ENDIF
ENDIF
ENDIF
RETURN 0
ELSE
IF ( nObj := ascan( ::aChildren, {|o| o:nID == nCtrlID } ) ) > 0
nReturn := ::aChildren[ nObj ]:handleEvent( HB_GTE_COMMAND, { nNotifctn, nCtrlID, hWndCtrl } )
IF HB_ISNUMERIC( nReturn ) .AND. nReturn == 0
RETURN 0
ENDIF
ENDIF
ENDIF
EXIT
CASE WM_NOTIFY
IF ( nObj := ascan( ::aChildren, {| o | o:nID == nwParam } ) ) > 0
nReturn := ::aChildren[ nObj ]:handleEvent( HB_GTE_NOTIFY, { nwParam, nlParam } )
IF HB_ISNUMERIC( nReturn ) .AND. nReturn == EVENT_HANDELLED
RETURN 0
ELSEIF HB_ISLOGICAL( nReturn )
RETURN nReturn
ENDIF
ENDIF
EXIT
CASE WM_CTLCOLORLISTBOX
CASE WM_CTLCOLORMSGBOX
CASE WM_CTLCOLOREDIT
CASE WM_CTLCOLORBTN
CASE WM_CTLCOLORDLG
CASE WM_CTLCOLORSCROLLBAR
CASE WM_CTLCOLORSTATIC
oObj := ::findObjectByHandle( nlParam )
IF HB_ISOBJECT( oObj )
nReturn := oObj:handleEvent( HB_GTE_CTLCOLOR, { nwParam, nlParam } )
IF nReturn == EVENT_UNHANDELLED
RETURN WVG_CallWindowProc( ::nOldProc, hWnd, nMessage, nwParam, nlParam )
ELSE
RETURN nReturn
ENDIF
ENDIF
EXIT
CASE WM_HSCROLL
::handleEvent( HB_GTE_HSCROLL, { WVG_LOWORD( nwParam ), WVG_HIWORD( nwParam ), nlParam } )
RETURN 0
CASE WM_VSCROLL
IF ::handleEvent( HB_GTE_VSCROLL, { WVG_LOWORD( nwParam ), WVG_HIWORD( nwParam ), nlParam } ) == EVENT_HANDELLED
RETURN 0
ENDIF
EXIT
CASE WM_CAPTURECHANGED
EXIT
#if 0
CASE WM_MOUSEMOVE
IF ::objType == objTypeScrollBar
IF ! ::lTracking
::lTracking := Wvg_BeginMouseTracking( ::hWnd )
ENDIF
ENDIF
EXIT
CASE WM_MOUSEHOVER
IF ::objType == objTypeScrollBar
IF ::oParent:objType == objTypeCrt
WAPI_SetFocus( ::oParent:pWnd )
ENDIF
RETURN 0
ENDIF
EXIT
CASE WM_MOUSELEAVE
IF ::objType == objTypeScrollBar
::lTracking := .f.
IF ::oParent:objType == objTypeCrt
WAPI_SetFocus( ::oParent:pWnd )
ENDIF
ENDIF
EXIT
#endif
CASE WM_VKEYTOITEM
CASE WM_CHARTOITEM
::handleEvent( HB_GTE_ANY, { nMessage, nwParam, nlParam } )
EXIT
OTHERWISE
IF ::handleEvent( HB_GTE_ANY, { nMessage, nwParam, nlParam } ) == EVENT_HANDELLED
RETURN 0
ENDIF
EXIT
ENDSWITCH
RETURN WVG_CallWindowProc( ::nOldProc, hWnd, nMessage, nwParam, nlParam )
/*----------------------------------------------------------------------*/