Como dá pra perceber, TODOS fazem herança a tstAny, que contém rotinas comuns.
CREATE CLASS TstAny INHERIT WvgWindow
VAR autosize INIT .F.
VAR Border INIT .T.
VAR cancel INIT .F.
VAR cText
VAR default INIT .F.
VAR drawMode INIT WVG_DRAW_NORMAL
VAR preSelect INIT .F.
VAR pointerFocus INIT .F.
VAR Style INIT 0
VAR cImage
VAR nIconBitmap INIT 0
VAR lSetCallback INIT .F.
VAR cFontName
VAR nFontSize
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD destroy()
METHOD handleEvent( nMessage, aNM )
METHOD activate( xParam ) SETGET
METHOD setText()
METHOD SetImage()
METHOD draw( xParam ) SETGET
ENDCLASS
METHOD TstAny:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
RETURN Self
METHOD TstAny:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
LOCAL hOldFont
//DO CASE
//CASE ::nIconBitmap == 1 ; ::style += BS_ICON
//CASE ::nIconBitmap == 2 ; ::style += BS_BITMAP
//ENDCASE
::wvgWindow:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::oParent:AddChild( Self )
::createControl()
IF ::lSetCallback
::SetWindowProcCallback() /* Let parent take control of it */
ENDIF
IF ::cFontName != NIL
hOldFont := ::SendMessage( WIN_WM_GETFONT )
::SendMessage( WIN_WM_SETFONT, wvt_CreateFont( ::cFontName, ::nFontSize ), 0 )
wvg_DeleteObject( hOldFont )
ENDIF
::SetImage()
::SetText()
//IF ::IsCrtParent()
//hOldFont := ::oParent:SendMessage( WIN_WM_GETFONT )
//::SendMessage( WIN_WM_SETFONT, hOldFont, 0 )
//ENDIF
IF ::visible
::show()
ENDIF
::setPosAndSize()
RETURN Self
METHOD TstAny:handleEvent( nMessage, aNM )
DO CASE
CASE nMessage == HB_GTE_RESIZED
IF ::isParentCrt()
::rePosition()
ENDIF
IF ::ClassName == "SysMonthCal32"
::InvalidateRect()
ELSE
::sendMessage( WIN_WM_SIZE, 0, 0 )
IF HB_ISEVALITEM( ::sl_resize )
Eval( ::sl_resize, , , Self )
ENDIF
ENDIF
//IF ::WControlName $ "CMDBUTTON"
// ::Repaint()
//ENDIF
CASE nMessage == HB_GTE_COMMAND
IF aNM[ 1 ] == BN_CLICKED
IF HB_ISEVALITEM( ::sl_lbClick )
IF ::isParentCrt()
::oParent:setFocus()
ENDIF
Eval( ::sl_lbClick, , , Self )
IF ::pointerFocus
::setFocus()
ENDIF
ENDIF
RETURN EVENT_HANDLED
ENDIF
CASE nMessage == HB_GTE_NOTIFY
CASE nMessage == HB_GTE_CTLCOLOR
IF HB_ISNUMERIC( ::clr_FG )
wapi_SetTextColor( aNM[ 1 ], ::clr_FG )
ENDIF
IF ! Empty( ::hBrushBG )
wapi_SetBkMode( aNM[ 1 ], WIN_TRANSPARENT )
RETURN ::hBrushBG
ENDIF
CASE ::lSetCallback .AND. nMessage == HB_GTE_ANY
IF aNM[ 1 ] == WIN_WM_LBUTTONUP
IF HB_ISEVALITEM( ::sl_lbClick )
IF ::isParentCrt()
::oParent:setFocus()
ENDIF
Eval( ::sl_lbClick, , , Self )
ENDIF
ENDIF
ENDCASE
RETURN EVENT_UNHANDLED
METHOD PROCEDURE TstAny:destroy()
LOCAL hOldFont
IF ::cFontName != NIL
hOldFont := ::SendMessage( WIN_WM_GETFONT )
::wvgWindow:destroy()
::wvgWindow:destroy()
wvg_DeleteObject( hOldFont )
ENDIF
RETURN
METHOD TstAny:configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
RETURN Self
METHOD TstAny:SetText()
IF HB_ISCHAR( ::cText )
::sendMessage( WIN_WM_SETTEXT, 0, ::cText )
ENDIF
RETURN NIL
METHOD TstAny:SetImage()
IF ::cImage != NIL .AND. ( ::nIconBitmap == WIN_IMAGE_ICON .OR. ::nIconBitmap == WIN_IMAGE_BITMAP )
// BM_SETIMAGE on button, STM_SETIMAGE em outros
::sendMessage( STM_SETIMAGE, ::nIconBitmap, wvg_LoadImage( ::cImage, 1, ::nIconBitmap ) )
ENDIF
RETURN NIL
METHOD TstAny:draw( xParam )
IF HB_ISEVALITEM( xParam ) .OR. xParam == NIL
::sl_paint := xParam
ENDIF
RETURN Self
METHOD TstAny:activate( xParam )
IF HB_ISEVALITEM( xParam ) .OR. xParam == NIL
::sl_lbClick := xParam
ENDIF
RETURN Self