Moderador: Moderadores
tal es asà que creo que su desarrollo fue abandonado
lo realmente importante en el desarrollo de una lib GUI es como recepciona los msg de Windows, los procesa y los dirige a la ventana o al control apropiado, esta es la parte más difÃcil e importante en una lib GUI
METHOD WvgTabPage:handleEvent( nMessage, aNM )
LOCAL aHdr
DO CASE
CASE nMessage == HB_GTE_SETFOCUS
IF HB_ISEVALITEM( ::sl_tabActivate )
RETURN EVENT_HANDLED
ENDIF
CASE nMessage == HB_GTE_COMMAND
CASE nMessage == HB_GTE_RESIZED
::sendMessage( WIN_WM_SIZE, 0, 0 )
RETURN EVENT_HANDLED
CASE nMessage == HB_GTE_NOTIFY
aHdr := wvg_GetNMHdrInfo( aNM[ 2 ] )
DO CASE
CASE aHdr[ NMH_code ] == -551 /* TCN_SELCHANGE */
ENDCASE
CASE nMessage == HB_GTE_CTLCOLOR
RETURN wapi_GetStockObject( WIN_NULL_BRUSH )
ENDCASE
RETURN EVENT_UNHANDLED
/* 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
DO CASE
CASE xParams[ 1 ] == WIN_WM_MOUSEHOVER
aPos := { xParams[ 3 ], xParams[ 4 ] }
CASE xParams[ 1 ] == WIN_WM_MOUSELEAVE
/* Nothing */
OTHERWISE
aPos := iif( ::mouseMode == 2, { xParams[ 3 ], xParams[ 4 ] }, { xParams[ 5 ], xParams[ 6 ] } )
ENDCASE
SWITCH xParams[ 1 ]
CASE WIN_WM_MOUSEHOVER
IF HB_ISEVALITEM( ::sl_enter )
Eval( ::sl_enter, aPos, , Self )
ENDIF
EXIT
CASE WIN_WM_MOUSELEAVE
IF HB_ISEVALITEM( ::sl_leave )
Eval( ::sl_leave, aPos, , Self )
ENDIF
EXIT
CASE WIN_WM_RBUTTONDOWN
IF HB_ISEVALITEM( ::sl_rbDown )
Eval( ::sl_rbDown, aPos, , Self )
ENDIF
EXIT
CASE WIN_WM_LBUTTONDOWN
IF HB_ISEVALITEM( ::sl_lbDown )
Eval( ::sl_lbDown, aPos, , Self )
ENDIF
EXIT
CASE WIN_WM_RBUTTONUP
IF HB_ISEVALITEM( ::sl_rbUp )
Eval( ::sl_rbUp, aPos, , Self )
ENDIF
EXIT
CASE WIN_WM_LBUTTONUP
IF HB_ISEVALITEM( ::sl_lbUp )
Eval( ::sl_lbUp, aPos, , Self )
ENDIF
EXIT
CASE WIN_WM_RBUTTONDBLCLK
IF HB_ISEVALITEM( ::sl_rbDblClick )
Eval( ::sl_rbDblClick, aPos, , Self )
ENDIF
EXIT
CASE WIN_WM_LBUTTONDBLCLK
IF HB_ISEVALITEM( ::sl_lbDblClick )
Eval( ::sl_lbDblClick, aPos, , Self )
ENDIF
EXIT
CASE WIN_WM_MBUTTONDOWN
IF HB_ISEVALITEM( ::sl_mbDown )
Eval( ::sl_mbDown, aPos, , Self )
ENDIF
EXIT
CASE WIN_WM_MBUTTONUP
IF HB_ISEVALITEM( ::sl_mbClick )
Eval( ::sl_mbClick, aPos, , Self )
ENDIF
EXIT
CASE WIN_WM_MBUTTONDBLCLK
IF HB_ISEVALITEM( ::sl_mbDblClick )
Eval( ::sl_mbDblClick, aPos, , Self )
ENDIF
EXIT
CASE WIN_WM_MOUSEMOVE
IF HB_ISEVALITEM( ::sl_motion )
Eval( ::sl_motion, aPos, , Self )
ENDIF
EXIT
CASE WIN_WM_MOUSEWHEEL
IF HB_ISEVALITEM( ::sl_wheel )
Eval( ::sl_wheel, aPos, , Self )
ENDIF
EXIT
CASE WIN_WM_NCMOUSEMOVE
EXIT
ENDSWITCH
/* 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 WIN_WM_ERASEBKGND
IF ::objType == objTypeDA .AND. ! Empty( ::hBrushBG )
::handleEvent( HB_GTE_CTLCOLOR, { wvg_n2p( nwParam ), wvg_n2p( nlParam ) } )
ENDIF
EXIT
CASE WIN_WM_COMMAND
nCtrlID := wapi_LOWORD( nwParam )
nNotifctn := wapi_HIWORD( nwParam )
hWndCtrl := wvg_n2p( nlParam )
IF Empty( hWndCtrl ) /* It is menu */
IF HB_ISOBJECT( ::oMenu )
IF ! Empty( aMenuItem := ::oMenu:FindMenuItemById( nCtrlID ) )
IF HB_ISEVALITEM( aMenuItem[ 2 ] )
Eval( aMenuItem[ 2 ], aMenuItem[ 1 ], , aMenuItem[ 4 ] )
ELSEIF HB_ISEVALITEM( aMenuItem[ 3 ] )
Eval( aMenuItem[ 3 ], aMenuItem[ 1 ], , aMenuItem[ 4 ] )
ENDIF
ENDIF
ENDIF
RETURN EVENT_HANDLED
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 EVENT_HANDLED
ENDIF
ENDIF
ENDIF
EXIT
CASE WIN_WM_NOTIFY
IF ( nObj := AScan( ::aChildren, {| o | o:nID == nwParam } ) ) > 0
nReturn := ::aChildren[ nObj ]:handleEvent( HB_GTE_NOTIFY, { nwParam, wvg_n2p( nlParam ) } )
IF HB_ISNUMERIC( nReturn ) .AND. nReturn == EVENT_HANDLED
RETURN EVENT_HANDLED
ELSEIF HB_ISLOGICAL( nReturn )
RETURN nReturn
ENDIF
ENDIF
EXIT
CASE WIN_WM_CTLCOLORLISTBOX
CASE WIN_WM_CTLCOLORMSGBOX
CASE WIN_WM_CTLCOLOREDIT
CASE WIN_WM_CTLCOLORBTN
CASE WIN_WM_CTLCOLORDLG
CASE WIN_WM_CTLCOLORSCROLLBAR
CASE WIN_WM_CTLCOLORSTATIC
oObj := ::findObjectByHandle( wvg_n2p( nlParam ) )
IF HB_ISOBJECT( oObj )
nReturn := oObj:handleEvent( HB_GTE_CTLCOLOR, { wvg_n2p( nwParam ), wvg_n2p( nlParam ) } )
IF HB_ISNUMERIC( nReturn ) .AND. nReturn == EVENT_UNHANDLED
RETURN wapi_CallWindowProc( ::nOldProc, hWnd, nMessage, nwParam, nlParam )
ELSE
RETURN nReturn
ENDIF
ENDIF
EXIT
CASE WIN_WM_HSCROLL
::handleEvent( HB_GTE_HSCROLL, { wapi_LOWORD( nwParam ), wapi_HIWORD( nwParam ), wvg_n2p( nlParam ) } )
RETURN EVENT_HANDLED
CASE WIN_WM_VSCROLL
IF ::handleEvent( HB_GTE_VSCROLL, { wapi_LOWORD( nwParam ), wapi_HIWORD( nwParam ), wvg_n2p( nlParam ) } ) == EVENT_HANDLED
RETURN EVENT_HANDLED
ENDIF
EXIT
CASE WIN_WM_CAPTURECHANGED
EXIT
#if 0
CASE WIN_WM_MOUSEMOVE
IF ::objType == objTypeScrollBar
IF ! ::lTracking
::lTracking := wvg_BeginMouseTracking( ::hWnd )
ENDIF
ENDIF
EXIT
CASE WIN_WM_MOUSEHOVER
IF ::objType == objTypeScrollBar
IF ::oParent:objType == objTypeCrt
wapi_SetFocus( ::oParent:pWnd )
ENDIF
RETURN EVENT_HANDLED
ENDIF
EXIT
CASE WIN_WM_MOUSELEAVE
IF ::objType == objTypeScrollBar
::lTracking := .F.
IF ::oParent:objType == objTypeCrt
wapi_SetFocus( ::oParent:pWnd )
ENDIF
ENDIF
EXIT
#endif
CASE WIN_WM_VKEYTOITEM
CASE WIN_WM_CHARTOITEM
::handleEvent( HB_GTE_ANY, { nMessage, nwParam, wvg_n2p( nlParam ) } )
EXIT
OTHERWISE
IF ::handleEvent( HB_GTE_ANY, { nMessage, nwParam, wvg_n2p( nlParam ) } ) == EVENT_HANDLED
RETURN EVENT_HANDLED
ENDIF
EXIT
ENDSWITCH
RETURN wapi_CallWindowProc( ::nOldProc, hWnd, nMessage, nwParam, nlParam )
es imposible crear una lib tradicional sin usar un array pública y pretender tener un control total sobre todos los componentes GUI creados
#include "hmg.ch"
Function Main
hb_gtReload( "WVG" )
SetMode( 33, 100 )
CLS
Inkey(0)
Load Window Main
Center Window Main
Activate Window Main
Return
FUNCTION hb_GtSys
REQUEST HB_GT_WVG_DEFAULT
RETURN NIL
mgcompile *.prg -b -lgtwvg -I. -gui
mgcompile *.prg -b -I. -ldebugger
Usuários vendo este fórum: Nenhum usuário registrado online e 8 visitantes