2008-11-30 23:05 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)
* harbour/contrib/gtwvg/makefile
* harbour/contrib/gtwvg/common.mak
+ wvgparts.ch
+ wincallb.c
+ wincback.prg
+ wvglistb.prg
+ wvgpushb.prg
+ wvgstatb.prg
+ wvgstatc.prg
+ wvgtreev.prg
* harbour/contrib/gtwvg/wvggui.c
* harbour/contrib/gtwvg/wvgsink.c
* harbour/contrib/gtwvg/wvgutils.c
* harbour/contrib/gtwvg/wvgwin.c
* harbour/contrib/gtwvg/hbgtwvg.ch
* harbour/contrib/gtwvg/wvgparts.ch
* harbour/contrib/gtwvg/wvtwin.ch
* harbour/contrib/gtwvg/wvgax.prg
* harbour/contrib/gtwvg/wvgcrt.prg
* harbour/contrib/gtwvg/wvgdlg.prg
* harbour/contrib/gtwvg/wvgmenub.prg
* harbour/contrib/gtwvg/wvgphdlr.prg
* harbour/contrib/gtwvg/wvgtoolb.prg
* harbour/contrib/gtwvg/wvgwnd.prg
! More synchronization, more events firings, etc.
+ harbour/contrib/gtwvg/wincback.prg
+ harbour/contrib/gtwvg/wincallb.c
Now PRG/C level callback procedures/code blocks/methods
are made available by Andy Wos. A big thank you.
:nWndProc := HB_AsCallBack( 'MYWNDPROC', Self )
METHOD MYWndProc( hWnd, nMessage, nwParam, nlParam )
IF nMessage == WM_LBUTTONDOWN
Win_MessageBox( , 'Prg level callback procedure!, 'Info' )
RETURN 0
ENDIF
RETURN 1
Before this mechanism was available with only C callbacks which
were of limiting nature. It has made our life so easy.
+ harbour/contrib/gtwvg/wvglistb.prg
+ harbour/contrib/gtwvg/wvgcombo.prg
+ harbour/contrib/gtwvg/wvgpushb.prg
+ harbour/contrib/gtwvg/wvgstatb.prg
+ harbour/contrib/gtwvg/wvgstatc.prg
+ harbour/contrib/gtwvg/wvgtreev.prg
+ Added Xbase++ compatible new classes.
NOTE: Still a work-in-progress, subject to heavy changes.
Basic functionality is working and class skeletons are in place.
The partially functional classes added are:
WvgStatusBar()
WvgStatic()
WvgPushButton()
* harbour/contrib/gtwvg/tests/demowvg.prg
+ Added functionality of new classes.
; TOFIX: harbour/contrib/gtwvg/wvggui.c
Przemek, can you please look into this stripped down
version of gtwvg.c. It has memory leak in inkey() and
hb_gtInfo() functions. To test, just resize the window
and exit, boooom, a big hb_out.log with above mem leak
entries. I am sure I just stripped some important loop
but am unable to locate where.
This commit is contained in:
@@ -8,6 +8,77 @@
|
||||
2008-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org)
|
||||
*/
|
||||
|
||||
2008-11-30 23:05 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)
|
||||
* harbour/contrib/gtwvg/makefile
|
||||
* harbour/contrib/gtwvg/common.mak
|
||||
+ wvgparts.ch
|
||||
+ wincallb.c
|
||||
+ wincback.prg
|
||||
+ wvglistb.prg
|
||||
+ wvgpushb.prg
|
||||
+ wvgstatb.prg
|
||||
+ wvgstatc.prg
|
||||
+ wvgtreev.prg
|
||||
|
||||
* harbour/contrib/gtwvg/wvggui.c
|
||||
* harbour/contrib/gtwvg/wvgsink.c
|
||||
* harbour/contrib/gtwvg/wvgutils.c
|
||||
* harbour/contrib/gtwvg/wvgwin.c
|
||||
* harbour/contrib/gtwvg/hbgtwvg.ch
|
||||
* harbour/contrib/gtwvg/wvgparts.ch
|
||||
* harbour/contrib/gtwvg/wvtwin.ch
|
||||
* harbour/contrib/gtwvg/wvgax.prg
|
||||
* harbour/contrib/gtwvg/wvgcrt.prg
|
||||
* harbour/contrib/gtwvg/wvgdlg.prg
|
||||
* harbour/contrib/gtwvg/wvgmenub.prg
|
||||
* harbour/contrib/gtwvg/wvgphdlr.prg
|
||||
* harbour/contrib/gtwvg/wvgtoolb.prg
|
||||
* harbour/contrib/gtwvg/wvgwnd.prg
|
||||
! More synchronization, more events firings, etc.
|
||||
|
||||
+ harbour/contrib/gtwvg/wincback.prg
|
||||
+ harbour/contrib/gtwvg/wincallb.c
|
||||
Now PRG/C level callback procedures/code blocks/methods
|
||||
are made available by Andy Wos. A big thank you.
|
||||
|
||||
:nWndProc := HB_AsCallBack( 'MYWNDPROC', Self )
|
||||
|
||||
METHOD MYWndProc( hWnd, nMessage, nwParam, nlParam )
|
||||
IF nMessage == WM_LBUTTONDOWN
|
||||
Win_MessageBox( , 'Prg level callback procedure!, 'Info' )
|
||||
RETURN 0
|
||||
ENDIF
|
||||
|
||||
RETURN 1
|
||||
|
||||
Before this mechanism was available with only C callbacks which
|
||||
were of limiting nature. It has made our life so easy.
|
||||
|
||||
+ harbour/contrib/gtwvg/wvglistb.prg
|
||||
+ harbour/contrib/gtwvg/wvgcombo.prg
|
||||
+ harbour/contrib/gtwvg/wvgpushb.prg
|
||||
+ harbour/contrib/gtwvg/wvgstatb.prg
|
||||
+ harbour/contrib/gtwvg/wvgstatc.prg
|
||||
+ harbour/contrib/gtwvg/wvgtreev.prg
|
||||
+ Added Xbase++ compatible new classes.
|
||||
NOTE: Still a work-in-progress, subject to heavy changes.
|
||||
Basic functionality is working and class skeletons are in place.
|
||||
The partially functional classes added are:
|
||||
WvgStatusBar()
|
||||
WvgStatic()
|
||||
WvgPushButton()
|
||||
|
||||
* harbour/contrib/gtwvg/tests/demowvg.prg
|
||||
+ Added functionality of new classes.
|
||||
|
||||
; TOFIX: harbour/contrib/gtwvg/wvggui.c
|
||||
Przemek, can you please look into this stripped down
|
||||
version of gtwvg.c. It has memory leak in inkey() and
|
||||
hb_gtInfo() functions. To test, just resize the window
|
||||
and exit, boooom, a big hb_out.log with above mem leak
|
||||
entries. I am sure I just stripped some important loop
|
||||
but am unable to locate where.
|
||||
|
||||
2008-11-26 18:22 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/source/vm/itemapi.c
|
||||
* changed hb_itemPutNLen() function to create integer item only
|
||||
|
||||
@@ -15,6 +15,7 @@ C_SOURCES=\
|
||||
wvgwin.c \
|
||||
wvgsink.c \
|
||||
wvggui.c \
|
||||
wincallb.c \
|
||||
|
||||
PRG_SOURCES=\
|
||||
wvgclass.prg \
|
||||
@@ -26,11 +27,19 @@ PRG_SOURCES=\
|
||||
wvgdlg.prg \
|
||||
wvgmenub.prg \
|
||||
wvgtoolb.prg \
|
||||
wvgcombo.prg \
|
||||
wvglistb.prg \
|
||||
wvgpushb.prg \
|
||||
wvgstatb.prg \
|
||||
wvgstatc.prg \
|
||||
wvgtreev.prg \
|
||||
wincback.prg \
|
||||
|
||||
|
||||
PRG_HEADERS=\
|
||||
hbgtwvg.ch \
|
||||
wvtwin.ch \
|
||||
wvgparts.ch \
|
||||
|
||||
include $(TOP)$(ROOT)config/header.cf
|
||||
INSTALL_RULE_HEADERS := $(INSTALL_RULE)
|
||||
|
||||
@@ -9,6 +9,7 @@ LIB_PATH = $(LIB_DIR)$(LIBNAME)$(LIBEXT)
|
||||
PRG_HEADERS=\
|
||||
hbgtwvg.ch \
|
||||
wvtwin.ch \
|
||||
wvgparts.ch \
|
||||
|
||||
LIB_OBJS = \
|
||||
$(OBJ_DIR)wvgclass$(OBJEXT) \
|
||||
@@ -20,6 +21,13 @@ LIB_OBJS = \
|
||||
$(OBJ_DIR)wvgdlg$(OBJEXT) \
|
||||
$(OBJ_DIR)wvgmenub$(OBJEXT) \
|
||||
$(OBJ_DIR)wvgtoolb$(OBJEXT) \
|
||||
$(OBJ_DIR)wvgcombo$(OBJEXT) \
|
||||
$(OBJ_DIR)wvglistb$(OBJEXT) \
|
||||
$(OBJ_DIR)wvgpushb$(OBJEXT) \
|
||||
$(OBJ_DIR)wvgstatb$(OBJEXT) \
|
||||
$(OBJ_DIR)wvgstatc$(OBJEXT) \
|
||||
$(OBJ_DIR)wvgtreev$(OBJEXT) \
|
||||
$(OBJ_DIR)wincback$(OBJEXT) \
|
||||
\
|
||||
$(OBJ_DIR)gtwvg$(OBJEXT) \
|
||||
$(OBJ_DIR)wvgcore$(OBJEXT) \
|
||||
@@ -27,6 +35,7 @@ LIB_OBJS = \
|
||||
$(OBJ_DIR)wvgsink$(OBJEXT) \
|
||||
$(OBJ_DIR)wvgwin$(OBJEXT) \
|
||||
$(OBJ_DIR)wvggui$(OBJEXT) \
|
||||
$(OBJ_DIR)wincallb$(OBJEXT) \
|
||||
|
||||
all: \
|
||||
$(LIB_PATH) \
|
||||
|
||||
@@ -68,6 +68,7 @@
|
||||
#define HB_GTE_TIMER 8
|
||||
#define HB_GTE_MENU 9
|
||||
#define HB_GTE_NOTIFY 10
|
||||
#define HB_GTE_COMMAND 11
|
||||
|
||||
#define HB_GTI_SETFONT 71
|
||||
#define HB_GTI_PRESPARAMS 72
|
||||
@@ -130,56 +131,6 @@
|
||||
|
||||
#define HB_GTI_GUI 1001
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
// Class Framework Constants
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
#define objTypeNone 0
|
||||
#define objTypeCrt 1
|
||||
#define objTypeWindow 2
|
||||
#define objTypeActiveX 3
|
||||
#define objTypeDialog 4
|
||||
#define objTypeToolBar 5
|
||||
#define objTypeToolBarButton 6
|
||||
#define objTypeMenu 7
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
#define WVGALIGN_TOP 0
|
||||
#define WVGALIGN_LEFT 0
|
||||
#define WVGALIGN_HCENTER 1
|
||||
#define WVGALIGN_RIGHT 2
|
||||
#define WVGALIGN_VCENTER 4
|
||||
#define WVGALIGN_BOTTOM 8
|
||||
#define WVGALIGN_WORDBREAK 16
|
||||
|
||||
#define WVGFRAME_NONE 0
|
||||
#define WVGFRAME_RECT 1
|
||||
#define WVGFRAME_BOX 2
|
||||
#define WVGFRAME_RAISED 16
|
||||
#define WVGFRAME_RECESSED 32
|
||||
#define WVGFRAME_THICK 128
|
||||
|
||||
#define WVGTOOLBAR_STYLE_STANDARD 0
|
||||
#define WVGTOOLBAR_STYLE_FLAT 1
|
||||
|
||||
#define WVGTOOLBAR_BUTTON_UNPRESSED 0
|
||||
#define WVGTOOLBAR_BUTTON_PRESSED 1
|
||||
|
||||
#define WVGTOOLBAR_BUTTON_DEFAULT 0
|
||||
#define WVGTOOLBAR_BUTTON_TOGGLE 1
|
||||
#define WVGTOOLBAR_BUTTON_BUTTONGROUP 2
|
||||
#define WVGTOOLBAR_BUTTON_SEPARATOR 3
|
||||
#define WVGTOOLBAR_BUTTON_PLACEHOLDER 4
|
||||
#define WVGTOOLBAR_BUTTON_DROPDOWN 5
|
||||
|
||||
#define WVGTOOLBAR_STDIMAGES_SMALL 0
|
||||
#define WVGTOOLBAR_STDIMAGES_LARGE 1
|
||||
#define WVGTOOLBAR_VIEWIMAGES_SMALL 4
|
||||
#define WVGTOOLBAR_VIEWIMAGES_LARGE 5
|
||||
#define WVGTOOLBAR_EXPLORERIMAGES_SMALL 8
|
||||
#define WVGTOOLBAR_EXPLORERIMAGES_LARGE 9
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
#endif // _HBGTWVG_CH
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "wvtwin.ch"
|
||||
#include "hbgtinfo.ch"
|
||||
#include "hbgtwvg.ch"
|
||||
#include "wvgparts.ch"
|
||||
|
||||
REQUEST DbfCdx
|
||||
|
||||
@@ -760,12 +761,13 @@ FUNCTION WvtMyBrowse_X( oCrt )
|
||||
LOCAL cScr := SaveScreen( 0,0,maxrow(),maxcol() )
|
||||
LOCAL aObjects:= WvtSetObjects( {} )
|
||||
LOCAL hPopup := Wvt_SetPopupMenu()
|
||||
LOCAL stru_:={}, cFileIndex, cFileDbf, cRDD, nIndex
|
||||
LOCAL stru_:={}, cFileIndex, cFileDbf, cRDD, nIndex, oTBar
|
||||
|
||||
STATIC nStyle := 0
|
||||
THREAD STATIC nFactor := 200
|
||||
|
||||
BrwBuildMenu( oCrt )
|
||||
oTBar := ActiveXBuildToolBar( oCrt )
|
||||
|
||||
pGT_[ 2 ] := hb_gtSelect()
|
||||
|
||||
@@ -2252,426 +2254,6 @@ Static Function MyFunction( nMode )
|
||||
|
||||
Return nil
|
||||
//----------------------------------------------------------------------//
|
||||
Static Function ActiveXBuildMenu( oCrt )
|
||||
Local oMenuBar, oSubMenu
|
||||
|
||||
oMenuBar := WvgMenuBar():new( oCrt ):create()
|
||||
|
||||
// Define submenu in procedural style.
|
||||
// The numeric index of the selected menu item
|
||||
// is passed to the Callback code block -> mp1
|
||||
|
||||
oSubMenu := WvgMenu():new( oMenuBar ):create()
|
||||
oSubMenu:title := "~Procedural"
|
||||
oSubMenu:addItem( { "Play Charge ~1", } )
|
||||
oSubMenu:addItem( { "Play Nannyboo ~2", } )
|
||||
oSubMenu:itemSelected := {|mp1| MyFunction( 100+mp1 ) }
|
||||
oMenuBar:addItem( { oSubMenu, NIL } )
|
||||
|
||||
|
||||
// Define submenu in the functional style:
|
||||
// A menu item executes a code block that
|
||||
// calls a function
|
||||
oSubMenu := WvgMenu():new( oMenuBar ):create()
|
||||
oSubMenu:title := "~Functional"
|
||||
oSubMenu:addItem( { "Play Opening ~1", {|| MyFunction( 1 ) } } )
|
||||
oSubMenu:addItem( { "Play Closing ~2", {|| MyFunction( 2 ) } } )
|
||||
oSubMenu:addItem( { "~MessageBox" , {|| MyFunction( 3 ) } } )
|
||||
oMenuBar:addItem( { oSubMenu, NIL } )
|
||||
|
||||
Return nil
|
||||
//----------------------------------------------------------------------//
|
||||
STATIC FUNCTION ActiveXBuildToolBar( oCrt, nActiveX )
|
||||
LOCAL oTBar
|
||||
|
||||
oTBar := WvgToolBar():new( oCrt , , { 0,0 }, { oCrt:currentSize()[ 1 ], 30 }, , .T. )
|
||||
|
||||
oTBar:borderStyle := WVGFRAME_RECT
|
||||
|
||||
oTBar:buttonWidth := 26
|
||||
oTBar:buttonHeight := 26
|
||||
|
||||
oTBar:imageWidth := 24
|
||||
oTBar:imageHeight := 24
|
||||
|
||||
IF ( nActiveX % 2 ) == 1
|
||||
oTBar:showToolTips := .f.
|
||||
ENDIF
|
||||
|
||||
// After setting properties, create toolbar.
|
||||
oTBar:create()
|
||||
|
||||
oTBar:addItem( "New" , 'c:\harbour\contrib\gtwvg\tests\v_new.bmp' )
|
||||
oTBar:addItem( "Select" , 'c:\harbour\contrib\gtwvg\tests\v_selct1.bmp' )
|
||||
oTBar:addItem( "Calendar" , 'c:\harbour\contrib\gtwvg\tests\v_calend.bmp' )
|
||||
oTBar:addItem( "Lock" , 'c:\harbour\contrib\gtwvg\tests\v_lock.bmp' )
|
||||
oTBar:addItem( "Index" , 'c:\harbour\contrib\gtwvg\tests\v_index.bmp' )
|
||||
oTBar:addItem( "Calculator", 'c:\harbour\contrib\gtwvg\tests\v_clclt.bmp' )
|
||||
oTBar:addItem( "Notes" , 'c:\harbour\contrib\gtwvg\tests\v_notes1.bmp' )
|
||||
|
||||
//oTBar:addItem("Button #2", 101)
|
||||
//oTBar:transparentColor := WVG_CLR_INVALID
|
||||
|
||||
oTBar:buttonClick := {|oButton| Win_MessageBox( , "Button [" + oButton:caption + "] clicked!" ) }
|
||||
|
||||
RETURN oTBar
|
||||
//----------------------------------------------------------------------//
|
||||
// The function has to be called via hb_threadStart( {|| ExecuteActiveX( nActiveX ) } )
|
||||
//
|
||||
Function ExecuteActiveX( nActiveX, xParam )
|
||||
Local oCrt, oTBar
|
||||
|
||||
#if 0
|
||||
oCrt := WvgCrt():New( , , { 5,5 }, { 29,59 }, , .f. )
|
||||
|
||||
oCrt:closable := .f.
|
||||
oCrt:create()
|
||||
|
||||
SetCursor( 0 )
|
||||
SetColor( 'N/W' )
|
||||
CLS
|
||||
#else
|
||||
oCrt := WvgDialog():new( , , { 30,30 }, { 500,550 }, , .f. )
|
||||
oCrt:closable := .f.
|
||||
oCrt:create()
|
||||
#endif
|
||||
|
||||
ActiveXBuildMenu( oCrt )
|
||||
oTBar := ActiveXBuildToolBar( oCrt, nActiveX )
|
||||
|
||||
oCrt:show()
|
||||
ExeActiveX( nActiveX, oCrt, oTBar, xParam )
|
||||
oCrt:Destroy()
|
||||
|
||||
Return nil
|
||||
//----------------------------------------------------------------------//
|
||||
Static Function ResizeMe( oCom, oTBar )
|
||||
Local nW, nH, aSize
|
||||
|
||||
nW := hb_gtInfo( HB_GTI_SCREENWIDTH )
|
||||
nH := hb_gtInfo( HB_GTI_SCREENHEIGHT )
|
||||
|
||||
aSize := oTBar:currentSize()
|
||||
|
||||
oTBar:SetSize( { nW, 30 }, .t. )
|
||||
|
||||
oCom:SetPosAndSize( { 0, aSize[ 2 ] }, { nW, nH - aSize[ 2 ] }, .t. )
|
||||
|
||||
Return nil
|
||||
//----------------------------------------------------------------------//
|
||||
Static Function ExeActiveX( nActiveX, oCrt, oTBar, xParam )
|
||||
Local oCom, nKey, sData
|
||||
Local lEnd := .f.
|
||||
|
||||
static nTurn := 0
|
||||
|
||||
hb_gtInfo( HB_GTI_DEFERPAINT, .T. )
|
||||
|
||||
DEFAULT nActiveX TO 2
|
||||
|
||||
oCom := WvgActiveXControl():New( oCrt, , { 0,27 }, { 200,200 }, , .t. )
|
||||
|
||||
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 6 9' ) } )
|
||||
|
||||
case nActiveX == 11
|
||||
hb_gtInfo( HB_GTI_WINTITLE, 'Shell.Explorer.2'+' [ '+'MSHTML Demo'+' ]' )
|
||||
oCom:CLSID := "MSHTML:" + "<html><h1>Stream Test</h1><p>This HTML content is being loaded from a stream.</html>"
|
||||
oCom:mapEvent( 269, {|| QOut( ' E X P L O R E R - 2 6 9' ) } )
|
||||
|
||||
case nActiveX == 2
|
||||
#define evClick 1
|
||||
#define evDblClk 2
|
||||
#define evBtnDown 3
|
||||
#define evMouseMove 4
|
||||
#define evBtnUp 5
|
||||
|
||||
hb_gtInfo( HB_GTI_WINTITLE, 'AnalogClockControl.AnalogClock' )
|
||||
oCom:CLSID := 'AnalogClockControl.AnalogClock'
|
||||
oCom:Id := 5
|
||||
|
||||
oCom:mapEvent( evDblClk, {|| oCom:Value := seconds()/86400 ,;
|
||||
oCom:BackColor := RGB( 0,140,210 ),;
|
||||
oCom:Refresh() ,;
|
||||
oCom:ShowSecondsHand := .t. ,;
|
||||
oCom:Hands3D := .t. ,;
|
||||
oCom:Refresh() ,;
|
||||
oCom:showAboutBox() ;
|
||||
} )
|
||||
|
||||
oCom:mapEvent( evBtnUp, {|nBtn| if( nBtn == 2, lEnd := .t., NIL ) } )
|
||||
|
||||
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'
|
||||
oCom:mapEvent( 269, {|| QOut( ' E X P L O R E R - 2 6 9' ) } )
|
||||
|
||||
case nActiveX == 4
|
||||
hb_gtInfo( HB_GTI_WINTITLE, 'RM Chart [ <F12> Attributes <F11> Next Charts ]' )
|
||||
oCom:CLSID := 'RMChart.RMChartX'
|
||||
|
||||
// RMChart does not have event interface.
|
||||
// Trying to set it generates GPF.
|
||||
// Please download RMChart.ocx from http://www.rmchart.com/ . It is free in everysense.
|
||||
|
||||
endcase
|
||||
|
||||
oCom:create()
|
||||
if hb_isObject( oCom )
|
||||
// After :CREATE() Messages
|
||||
//
|
||||
if nActiveX == 1
|
||||
oCom:AddressBar := .t.
|
||||
hb_gtInfo( HB_GTI_WINTITLE, IF( empty( xParam ), 'http://www.harbour.vouch.info', xParam ) )
|
||||
oCom:Navigate( IF( empty( xParam ), 'http://www.harbour.vouch.info', xParam ) )
|
||||
|
||||
elseif nActiveX == 4
|
||||
ConfigureRMChart( oCom )
|
||||
|
||||
oCom:Draw( .t. )
|
||||
oCom:Draw2Clipboard()
|
||||
|
||||
endif
|
||||
|
||||
do while !( lEnd )
|
||||
nKey := inkey( 0.1 )
|
||||
|
||||
IF nActiveX == 2
|
||||
oCom:Value := seconds()/86400
|
||||
ENDIF
|
||||
|
||||
if nKey == HB_K_RESIZE
|
||||
ResizeMe( oCom, oTBar )
|
||||
|
||||
elseif nKey == K_F12
|
||||
if nActiveX == 1
|
||||
oCom:Navigate( 'www.vouch.info' )
|
||||
|
||||
elseif nActiveX == 11
|
||||
//oCom:document( 0 ):InnerHTML := "<html><h1>Stream Test</h1><p>This HTML content in a document.</html>"
|
||||
|
||||
elseif nActiveX == 4
|
||||
oCom:RMCBackColor := 23456142
|
||||
oCom:RMCStyle := 2
|
||||
oCom:RMCUserWatermark := 'Vouch'
|
||||
|
||||
oCom:Region(1):SetProperties( 5.0,5.0,-5.0,-5.0 )
|
||||
|
||||
oCom:Draw( .t. )
|
||||
endif
|
||||
|
||||
elseif nKey == K_F11
|
||||
if nActiveX == 4
|
||||
nTurn++
|
||||
if nTurn > 6
|
||||
nTurn := 1
|
||||
endif
|
||||
sData := NIL
|
||||
sData := ''
|
||||
|
||||
do case
|
||||
case nTurn == 1
|
||||
hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] ' + 'Stacked Bars' )
|
||||
//SetMode( 30,100 )
|
||||
|
||||
sData += "00003600|00004450|000051|000061|000073|00008-6972|00009412|00011Tahoma|100011|10"
|
||||
sData += "0035|1000410|10005-5|10006-5|1000911|100101|100111|100181|100200|1002150000|1002"
|
||||
sData += "211|100238|100331|100341|100356|100378|100411|100468|100484|100494|10051-6972|10"
|
||||
sData += "052-16777216|10053-1828|100541|100558|10056-16777216|10057-16777216|10060-167772"
|
||||
sData += "16|10061-16777216|1006315|10064-32|100652|10066-16776961|10180this is the footer"
|
||||
sData += "|10181Example of stacked bars|10182Apples*Pears*Cherries*Strawberries|10183 $|10"
|
||||
sData += "184This is an optional axis text, sized 9 points and bold\9b|10187Label Nr. 1*La"
|
||||
sData += "bel Nr. 2*Label Nr. 3*Label Nr. 4*Label Nr. 5*Label Nr. 6|10196This is an option"
|
||||
sData += "al label axis text|110011|110023|110033|110045|110055|11006-1|1100923|110131|110"
|
||||
sData += "14-1|110171|11019-16777077|1102111|110221|110236|1105310000*10000*16000*12000*20"
|
||||
sData += "000*10000|120011|120023|120033|120045|120055|12006-1|1200927|120131|12014-1|1201"
|
||||
sData += "71|12019-16751616|1202111|120221|120236|120535000*7000*4000*15000*10000*10000|13"
|
||||
sData += "0011|130023|130033|130045|130055|13006-1|1300982|130131|13014-1|130171|13019-838"
|
||||
sData += "8608|1302111|130221|130236|1305310000*3000*12000*10000*5000*20000|140011|140023|"
|
||||
sData += "140033|140045|140055|14006-1|1400925|140131|14014-1|140171|14019-4684277|1402111"
|
||||
sData += "|140221|140236|140535000*9000*12000*6000*10000*5000"
|
||||
|
||||
case nTurn == 2
|
||||
hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] '+'Floating Bars' )
|
||||
//SetMode( 20,90 )
|
||||
|
||||
sData += "00003550|00004300|000051|000073|00008-2894893|00009412|00011Tahoma|100011|100035"
|
||||
sData += "|100045|10005-5|10006-5|1000911|100101|100111|100131|100181|100201|1002113|10022"
|
||||
sData += "13|100238|100331|100341|100356|100378|100411|100468|100482|10052-16777216|10053-"
|
||||
sData += "1120086|100544|100555|10056-16777216|10057-16777216|10060-16777216|10061-1677721"
|
||||
sData += "6|1006316|10064-5383962|100652|10066-16777011|10181Birth of a Killer App|10182Sc"
|
||||
sData += "hedule*Reality|10187Design*Development*Testing*Bug Fixing*Documentation*Marketin"
|
||||
sData += "g|1020104/01*04/02*04/03*04/04*04/05*04/06*04/07*04/08*04/09*04/10*04/11*04/12*0"
|
||||
sData += "5/01|110011|110026|110044|110101|110131|11019-6751336|1102111|110221|1102312|110"
|
||||
sData += "531*3*4*6*6*4*7*4*9*3*10*3|120011|120026|120044|120101|120132|12019-47872|120211"
|
||||
sData += "1|120221|1202312|120531*.5*1.5*10.5*12*1*12*1*12.5*.5*2*11"
|
||||
|
||||
case nTurn == 3
|
||||
hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] '+'Four Regions' )
|
||||
//SetMode( 40,120 )
|
||||
|
||||
sData += "00003700|00004500|000054|000061|000071|00008-984833|00009412|00011Tahoma|100011|"
|
||||
sData += "100032|100042|10005348|10006248|1000910|100101|100111|100181|100200|10021100|100"
|
||||
sData += "2211|100238|100331|100341|100355|100378|100481|100491|10051-984833|10052-1677721"
|
||||
sData += "6|10053-657956|100541|100558|10056-16777216|10057-16777216|10060-16777216|10061-"
|
||||
sData += "16777216|10187Label 1*Label 2*Label 3*Label 4*Label 5|110011|110021|110031|11004"
|
||||
sData += "6|110056|11006-1|110091|110131|11014-1|110171|1102111|110221|110235|1105330*40*7"
|
||||
sData += "0*60*20|200011|20003352|200042|20005-2|20006248|2000910|200101|200111|200181|200"
|
||||
sData += "200|20021100|2002211|200238|200331|200341|200355|200378|200484|200491|20051-9848"
|
||||
sData += "33|20052-16777216|20053-657956|200544|200555|20056-16777216|20057-16777216|20060"
|
||||
sData += "-16777216|20061-16777216|20187Label 1*Label 2*Label 3*Label 4*Label 5|210011|210"
|
||||
sData += "023|210033|210045|210055|21006-1|210091|210101|210131|21014-1|210171|2102111|210"
|
||||
sData += "221|210235|2105320*10*15*25*30|220011|220023|220033|220045|220055|22006-1|220091"
|
||||
sData += "|220101|220131|22014-1|220171|2202111|220221|220235|2205325*30*10*20*15|230011|2"
|
||||
sData += "30023|230033|230045|230055|23006-1|230091|230101|230131|23014-1|230171|2302111|2"
|
||||
sData += "30221|230235|2305310*20*40*20*30|240011|240023|240033|240045|240055|24006-1|2400"
|
||||
sData += "91|240101|240131|24014-1|240171|2402111|240221|240235|2405340*30*20*30*20|300011"
|
||||
sData += "|300032|30004252|30005348|30006-2|3000910|300101|300181|300481|300491|30051-9848"
|
||||
sData += "33|30052-16777216|30053-657956|310011|3100251|310031|3100454|310054|310071|31009"
|
||||
sData += "1|310121|310151|310161|310171|310182|310211|310221|310235|3105330*50*20*40*60|40"
|
||||
sData += "0011|40003352|40004252|40005-2|40006-2|4000910|400101|400111|400131|400181|40020"
|
||||
sData += "100|40021250|4002211|400238|400281|400292|400300|400310|400322|400331|400341|400"
|
||||
sData += "3510|400378|400482|400492|40051-984833|40052-16777216|40053-984833|400541|400558"
|
||||
sData += "|40056-16776961|40057-16777216|400592|40060-16777216|40061-16777216|40183$ |4018"
|
||||
sData += "5 %|410011|410021|410031|410043|410053|41006-1|4100950|410131|41014-1|410171|410"
|
||||
sData += "19-10496|4102111|410221|4102310|41053240*230*220*180*170*160*145*130*125*115|420"
|
||||
sData += "011|4200221|420035|4200422|420052|420061|420071|4200963|420111|420121|420131|420"
|
||||
sData += "171|42019-16744448|4202115|420221|4202310|420261|420538.1*6.2*4.3*2.2*1.2*3.1*5."
|
||||
sData += "2*11.4*7.3*4.2"
|
||||
|
||||
case nTurn == 4
|
||||
hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] '+'10 Biggest Companies' )
|
||||
//SetMode( 25,90 )
|
||||
|
||||
sData += "00003670|00004450|000051|000061|000071|00008-10185235|00009412|00011Tahoma|10001"
|
||||
sData += "1|100035|1000410|10005-5|10006-5|1000912|100101|100111|100131|100181|10020100000"
|
||||
sData += "|10021250000|1002211|100239|100281|100292|100300|100310|100322|100331|100341|100"
|
||||
sData += "3510|100378|100482|100492|10051-32944|10052-1296|10053-983041|100541|100558|1005"
|
||||
sData += "6-1828|10057-16777216|100592|10060-1828|10061-16777216|10180data source: F.A.Z|1"
|
||||
sData += "0181The world's 10 biggest industrial companies 2003|10183$ |10184Total turnover"
|
||||
sData += " in Mill. Dollar|10185 %|10186Net operating margin|10187Exxon Mobil*Royal Dutch "
|
||||
sData += "/ Shell*BP*General Motors*Daimler Chrysler*Ford Motor*Toyota Motor*General Elect"
|
||||
sData += "ric*TOTAL*Chevron Texaco|110011|110021|110031|110043|110053|11006-1|1100950|1101"
|
||||
sData += "31|11014-1|110171|11019-10496|1102111|110221|1102310|11053242365*235598*232571*1"
|
||||
sData += "85524*170457*164196*149321*132797*130067*119703|120011|1200221|120035|1200422|12"
|
||||
sData += "0052|120061|120071|1200970|120111|120121|120131|1201421|120171|12019-16744448|12"
|
||||
sData += "02115|120221|1202310|120261|120538.9*4.1*4.4*2.1*.3*.3*5.9*11.3*6.7*6"
|
||||
|
||||
case nTurn == 5
|
||||
hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] '+'Grouped Bars' )
|
||||
//SetMode( 25,80 )
|
||||
|
||||
sData += "00003600|00004450|000051|000061|000075|00008-2|00009412|00010paper.jpg|00011Taho"
|
||||
sData += "ma|100011|100035|100045|10005-5|10006-5|1000910|100101|100111|100181|100200|1002"
|
||||
sData += "1100|1002211|100238|100331|100341|100355|100378|100468|100484|10053-2|100541|100"
|
||||
sData += "558|100631|100651|10182First quarter*Second quarter*Third quarter*Fourth quarter"
|
||||
sData += "|101872000*2001*2002*2003*2004|110011|110022|110044|110131|1102111|110221|110235"
|
||||
sData += "|1105330*20*40*60*10|120011|120022|120044|120131|1202111|120221|120235|1205330*2"
|
||||
sData += "0*50*70*60|130011|130022|130044|130131|1302111|130221|130235|1305340*10*30*20*80"
|
||||
sData += "|140011|140022|140044|140131|1402111|140221|140235|1405370*50*80*40*30"
|
||||
|
||||
case nTurn == 6
|
||||
hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] '+'Flow Chart' )
|
||||
//SetMode( 30,50 )
|
||||
|
||||
sData += "00003305|00004400|000051|00008-984833|00009412|00011Tahoma|100011|100035|100045|"
|
||||
sData += "10005-5|10006-5|10180\7C|010011|010051|010072|010081|0101050|0101125|01012100|01"
|
||||
sData += "01325|01014-5952982|01015-5952982|01016255|010191|0102010|01026Start|01030-256|0"
|
||||
sData += "10012|010054|0100721|01014-16776961|010222|01024100*100|0102550*75|01026|010272|"
|
||||
sData += "010293|010013|010051|010071|010081|0101050|0101175|01012100|0101325|01014-669788"
|
||||
sData += "2|01015-6697882|01016255|010191|0102010|01026i = 1|01030-16777216|010014|010054|"
|
||||
sData += "0100721|01014-16776961|010222|01024100*100|01025100*150|01026|010272|010293|0100"
|
||||
sData += "15|010051|010073|010081|0101050|01011150|01012100|0101350|01014-65536|01015-6553"
|
||||
sData += "6|01016255|010191|0102010|01026i = 39?|01030-256|010016|010054|0100721|01014-167"
|
||||
sData += "76961|010222|01024100*100|01025200*225|01026|010272|010293|010017|010051|010071|"
|
||||
sData += "010081|0101050|01011225|01012100|0101325|01014-6697882|01015-6697882|01016255|01"
|
||||
sData += "0191|0102010|01026i = i + 1|01030-16777216|010018|010054|0100721|01014-16776961"
|
||||
sData += "|010222|01024100*100|01025250*275|01026|010272|010293|010019|010051|010073|01008"
|
||||
sData += "1|0101050|01011275|01012100|0101350|01014-65536|01015-65536|01016255|010191|0102"
|
||||
sData += "010|01026i <= 100|01030-256|0100110|010054|0100721|01014-16776961|010222|0102410"
|
||||
sData += "0*100|01025325*350|01026|010272|010293|0100111|010051|010072|010081|0101050|0101"
|
||||
sData += "1350|01012100|0101325|01014-5952982|01015-5952982|01016255|010191|0102010|01026S"
|
||||
sData += "top|01030-256|0100113|010054|0100721|01014-16776961|010222|01024150*200|01025175"
|
||||
sData += "*175|01026|010272|010293|0100114|010051|010081|01010145|01011157|0101250|01014-1"
|
||||
sData += "6776961|01015-5383962|01016255|010191|0102010|01026yes|01030-16777216|0100115|01"
|
||||
sData += "0051|010071|010081|01010200|01011162|01012100|0101325|01014-6697882|01015-669788"
|
||||
sData += "2|01016255|010191|0102010|01026i = 69|01030-16777216|0100116|010054|0100721|0101"
|
||||
sData += "4-16776961|010224|0102450*10*10*100|01025300*300*125*125|01026|010272|010293|010"
|
||||
sData += "0117|010054|0100721|01014-16776961|010223|01024250*250*100|01025162*125*125|0102"
|
||||
sData += "6|010272|010293|0100118|010051|010081|01010100|01011200|0101250|0101325|01014-16"
|
||||
sData += "776961|01016255|010191|0102010|01026no|01030-16777216|0100119|010051|010081|0101"
|
||||
sData += "010|01011280|0101240|01014-16776961|01016255|010191|0102010|01026yes|01030-16777"
|
||||
sData += "216|0100120|010051|010081|01010100|01011322|0101250|01014-16776961|01016255|0101"
|
||||
sData += "91|0102010|01026no|01030-16777216|0100120|010051|010079|01010180|01011280|010121"
|
||||
sData += "20|01013100|01015-39322|010191|010209|01026RMChart is not a flowchart tool. This"
|
||||
sData += " is just an example for the use of CustomObjects!|01030-256"
|
||||
|
||||
endcase
|
||||
|
||||
oCom:Reset()
|
||||
oCom:RMCFile := sData
|
||||
oCom:Draw( .t. )
|
||||
ResizeMe( oCom )
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
if nKey == 27
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
|
||||
oCom:Destroy()
|
||||
oCom := NIL
|
||||
endif
|
||||
|
||||
Return nil
|
||||
//----------------------------------------------------------------------//
|
||||
Function ConfigureRMChart( RMChart )
|
||||
|
||||
#define RMC_CTRLSTYLEFLAT 0
|
||||
#define RMC_PIE_GRADIENT 52
|
||||
#define RMC_FULL 1
|
||||
#define RMC_EXPLODE_NONE 0
|
||||
#define RMC_VLABEL_ABSOLUTE 6
|
||||
#define RMC_HATCHBRUSH_OFF 0
|
||||
|
||||
/* The code pulled from freewin sources */
|
||||
WITH OBJECT RMChart
|
||||
:Font := "Tahoma"
|
||||
:RMCStyle := RMC_CTRLSTYLEFLAT
|
||||
|
||||
:AddRegion()
|
||||
WITH OBJECT :Region( 1 )
|
||||
:Footer = "http://vouch.info"
|
||||
|
||||
:AddCaption()
|
||||
WITH OBJECT :Caption()
|
||||
:Titel := "GTWVG Active-X Demo"
|
||||
:FontSize := 10
|
||||
:Bold := .T.
|
||||
END
|
||||
|
||||
:AddGridlessSeries()
|
||||
|
||||
WITH OBJECT :GridLessSeries
|
||||
:SeriesStyle := RMC_PIE_GRADIENT
|
||||
:Alignment := RMC_FULL
|
||||
:Explodemode := RMC_EXPLODE_NONE
|
||||
:Lucent := .F.
|
||||
:ValueLabelOn := RMC_VLABEL_ABSOLUTE
|
||||
:HatchMode := RMC_HATCHBRUSH_OFF
|
||||
:StartAngle := 0
|
||||
:DataString := "10*5*20*25"
|
||||
END
|
||||
END
|
||||
END
|
||||
|
||||
Return nil
|
||||
//----------------------------------------------------------------------//
|
||||
Static Function DoModalWindow()
|
||||
Local oCrt, nSel
|
||||
|
||||
@@ -2756,3 +2338,476 @@ FUNCTION GoogleMap()
|
||||
|
||||
RETURN nil
|
||||
//----------------------------------------------------------------------//
|
||||
// The function has to be called via hb_threadStart( {|| ExecuteActiveX( nActiveX ) } )
|
||||
//
|
||||
Function ExecuteActiveX( nActiveX, xParam )
|
||||
Local oCrt, oTBar, oSBar, oPanel, oStatic, oCom, oXbp
|
||||
|
||||
HB_SYMBOL_UNUSED( xParam )
|
||||
HB_SYMBOL_UNUSED( oCom )
|
||||
|
||||
oCrt := WvgDialog():new( , , { 30,30 }, { 600,500 }, , .f. )
|
||||
oCrt:closable := .t.
|
||||
oCrt:create()
|
||||
|
||||
// Menu
|
||||
ActiveXBuildMenu( oCrt )
|
||||
|
||||
// Toolbar
|
||||
oTBar := ActiveXBuildToolBar( oCrt, nActiveX )
|
||||
|
||||
// Statusbar
|
||||
oSBar := WvgStatusBar():new( oCrt ):create( , , , , , .t. )
|
||||
oSBar:panelClick := {|oPanel| Win_MessageBox( , oPanel:caption ) }
|
||||
oPanel := oSBar:getItem( 1 )
|
||||
oPanel:caption := 'My Root Panel'
|
||||
oPanel := oSBar:addItem()
|
||||
oPanel:caption := 'Ready'
|
||||
oPanel := oSBar:addItem()
|
||||
oPanel:caption := 'Click on any part!'
|
||||
|
||||
// Static text
|
||||
oStatic := WvgStatic():new( oCrt )
|
||||
oStatic:caption := 'This is a Harbour dialog and is compatible with Xbase++ Parts. '+;
|
||||
'XbpDialog(), XbpMenuBar(), XbpToolBar(), XbpStatusBar(), ' +;
|
||||
'XbpStatic() classes have been implemented'
|
||||
oStatic:options := WVGSTATIC_TEXT_LEFT + WVGSTATIC_TEXT_WORDBREAK
|
||||
oStatic:create( , , { 0, oTBar:currentSize()[2] }, { 120, oCrt:currentSize()[2]-;
|
||||
oTBar:currentSize()[2]-oSBar:currentSize()[2] }, , .t. )
|
||||
oStatic:resize := {|mp1,mp2,oSelf,w,x,y| mp1 := mp1, mp2 := mp2, oSelf := oSelf, ;
|
||||
w := oCrt:currentSize() ,;
|
||||
x := oTBar:currentSize() ,;
|
||||
y := oSBar:currentSize() ,;
|
||||
oStatic:setPosAndSize( { 0, x[2]+3 }, { 120, w[2]-x[2]-y[2]-4 }, .f. ) }
|
||||
|
||||
// Pushbuttons
|
||||
oXbp := WvgPushButton():new( oStatic )
|
||||
oXbp:caption := "A"
|
||||
oXbp:create( , , { 20,250 }, {80,40} )
|
||||
oXbp:activate:= {|| Win_MessageBox( , "Pushbutton A" ) }
|
||||
// Pushbuttons
|
||||
oXbp := WvgPushButton():new( oStatic )
|
||||
oXbp:caption := "B"
|
||||
oXbp:create( , , { 20,300 }, {80,40} )
|
||||
oXbp:activate:= {|| Win_MessageBox( , "Pushbutton B" ) }
|
||||
|
||||
|
||||
#if 1
|
||||
// ActiveX Controls
|
||||
oCom := BuildActiveXControl( nActiveX, oCrt )
|
||||
oCom:resize := {|m1,m2,o,w,x,y,z| m1 := m1, m2 := m2, o := o, ;
|
||||
w := oCrt:currentSize() ,;
|
||||
x := oTBar:currentSize() ,;
|
||||
y := oSBar:currentSize() ,;
|
||||
z := oStatic:currentSize(),;
|
||||
oCom:setPosAndSize( { z[1], x[2] }, { w[1]-z[1], w[2]-x[2]-y[2] }, .t. ), 1 }
|
||||
if hb_isObject( oCom )
|
||||
oCrt:sendMessage( WM_SIZE, 0, 0 )
|
||||
oCrt:show()
|
||||
ExeActiveX( nActiveX, oCom, xParam )
|
||||
ENDIF
|
||||
#endif
|
||||
|
||||
oCrt:Destroy()
|
||||
Return nil
|
||||
//----------------------------------------------------------------------//
|
||||
STATIC FUNCTION ActiveXBuildToolBar( oCrt, nActiveX )
|
||||
LOCAL oTBar
|
||||
|
||||
DEFAULT nActiveX TO 0
|
||||
|
||||
oTBar := WvgToolBar():new( oCrt , , { 0,0 }, { oCrt:currentSize()[ 1 ], 30 }, , .T. )
|
||||
|
||||
oTBar:borderStyle := WVGFRAME_RECT
|
||||
|
||||
oTBar:buttonWidth := 28
|
||||
oTBar:buttonHeight := 26
|
||||
|
||||
oTBar:imageWidth := 26
|
||||
oTBar:imageHeight := 24
|
||||
|
||||
IF ( nActiveX % 2 ) == 1
|
||||
oTBar:showToolTips := .f.
|
||||
ENDIF
|
||||
|
||||
// After setting properties, create toolbar.
|
||||
oTBar:create()
|
||||
|
||||
oTBar:addItem( "New" , 'c:\harbour\contrib\gtwvg\tests\v_new.bmp' )
|
||||
oTBar:addItem( "Select" , 'c:\harbour\contrib\gtwvg\tests\v_selct1.bmp' )
|
||||
oTBar:addItem( "Calendar" , 'c:\harbour\contrib\gtwvg\tests\v_calend.bmp' )
|
||||
oTBar:addItem( "Lock" , 'c:\harbour\contrib\gtwvg\tests\v_lock.bmp' )
|
||||
oTBar:addItem( "Index" , 'c:\harbour\contrib\gtwvg\tests\v_index.bmp' )
|
||||
oTBar:addItem( "Calculator", 'c:\harbour\contrib\gtwvg\tests\v_clclt.bmp' )
|
||||
oTBar:addItem( "Notes" , 'c:\harbour\contrib\gtwvg\tests\v_notes1.bmp' )
|
||||
|
||||
//oTBar:addItem("Button #2", 101)
|
||||
//oTBar:transparentColor := WVG_CLR_INVALID
|
||||
|
||||
oTBar:buttonClick := {|oButton| Win_MessageBox( , "Button [" + oButton:caption + "] clicked!" ) }
|
||||
|
||||
RETURN oTBar
|
||||
//----------------------------------------------------------------------//
|
||||
Static Function ActiveXBuildMenu( oCrt )
|
||||
Local oMenuBar, oSubMenu
|
||||
|
||||
oMenuBar := WvgMenuBar():new( oCrt ):create()
|
||||
|
||||
// Define submenu in procedural style.
|
||||
// The numeric index of the selected menu item
|
||||
// is passed to the Callback code block -> mp1
|
||||
|
||||
oSubMenu := WvgMenu():new( oMenuBar ):create()
|
||||
oSubMenu:title := "~Procedural"
|
||||
oSubMenu:addItem( { "Play Charge ~1", } )
|
||||
oSubMenu:addItem( { "Play Nannyboo ~2", } )
|
||||
oSubMenu:itemSelected := {|mp1| MyFunction( 100+mp1 ) }
|
||||
oMenuBar:addItem( { oSubMenu, NIL } )
|
||||
|
||||
|
||||
// Define submenu in the functional style:
|
||||
// A menu item executes a code block that
|
||||
// calls a function
|
||||
oSubMenu := WvgMenu():new( oMenuBar ):create()
|
||||
oSubMenu:title := "~Functional"
|
||||
oSubMenu:addItem( { "Play Opening ~1", {|| MyFunction( 1 ) } } )
|
||||
oSubMenu:addItem( { "Play Closing ~2", {|| MyFunction( 2 ) } } )
|
||||
oSubMenu:addItem( { "~MessageBox" , {|| MyFunction( 3 ) } } )
|
||||
oMenuBar:addItem( { oSubMenu, NIL } )
|
||||
|
||||
Return nil
|
||||
//----------------------------------------------------------------------//
|
||||
STATIC FUNCTION BuildActiveXControl( nActiveX, oCrt )
|
||||
LOCAL oCom
|
||||
|
||||
DEFAULT nActiveX TO 2
|
||||
|
||||
oCom := WvgActiveXControl():New( oCrt, , { 0, 0 }, { 100, 100 }, , .t. )
|
||||
|
||||
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 6 9' ) } )
|
||||
|
||||
case nActiveX == 11
|
||||
hb_gtInfo( HB_GTI_WINTITLE, 'Shell.Explorer.2'+' [ '+'MSHTML Demo'+' ]' )
|
||||
oCom:CLSID := "MSHTML:" + "<html><h1>Stream Test</h1><p>This HTML content is being loaded from a stream.</html>"
|
||||
oCom:mapEvent( 269, {|| QOut( ' E X P L O R E R - 2 6 9' ) } )
|
||||
|
||||
case nActiveX == 2
|
||||
#define evClick 1
|
||||
#define evDblClk 2
|
||||
#define evBtnDown 3
|
||||
#define evMouseMove 4
|
||||
#define evBtnUp 5
|
||||
|
||||
hb_gtInfo( HB_GTI_WINTITLE, 'AnalogClockControl.AnalogClock' )
|
||||
oCom:CLSID := 'AnalogClockControl.AnalogClock'
|
||||
oCom:Id := 5
|
||||
|
||||
oCom:mapEvent( evDblClk, {|| oCom:Value := seconds()/86400 ,;
|
||||
oCom:BackColor := RGB( 0,140,210 ),;
|
||||
oCom:Refresh() ,;
|
||||
oCom:ShowSecondsHand := .t. ,;
|
||||
oCom:Hands3D := .t. ,;
|
||||
oCom:Refresh() ,;
|
||||
oCom:showAboutBox() ;
|
||||
} )
|
||||
|
||||
oCom:mapEvent( evBtnUp, {|nBtn| if( nBtn == 2, oCom:oParent:sendMessage( WM_CLOSE,0,0 ), NIL ) } )
|
||||
|
||||
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'
|
||||
oCom:mapEvent( 269, {|| QOut( ' E X P L O R E R - 2 6 9' ) } )
|
||||
|
||||
case nActiveX == 4
|
||||
hb_gtInfo( HB_GTI_WINTITLE, 'RM Chart [ <F12> Attributes <F11> Next Charts ]' )
|
||||
oCom:CLSID := 'RMChart.RMChartX'
|
||||
|
||||
// RMChart does not have event interface.
|
||||
// Trying to set it generates GPF.
|
||||
// Please download RMChart.ocx from http://www.rmchart.com/ . It is free in everysense.
|
||||
|
||||
endcase
|
||||
|
||||
oCom:create()
|
||||
|
||||
RETURN oCom
|
||||
//----------------------------------------------------------------------//
|
||||
Static Function ExeActiveX( nActiveX, oCom, xParam )
|
||||
Local nKey, sData
|
||||
|
||||
static nTurn := 0
|
||||
|
||||
// After :CREATE() Messages
|
||||
//
|
||||
if nActiveX == 1
|
||||
oCom:AddressBar := .t.
|
||||
hb_gtInfo( HB_GTI_WINTITLE, IF( empty( xParam ), 'http://www.harbour.vouch.info', xParam ) )
|
||||
oCom:Navigate( IF( empty( xParam ), 'http://www.harbour.vouch.info', xParam ) )
|
||||
|
||||
elseif nActiveX == 4
|
||||
ConfigureRMChart( oCom )
|
||||
oCom:Draw( .t. )
|
||||
oCom:Draw2Clipboard()
|
||||
|
||||
endif
|
||||
|
||||
do while .t.
|
||||
nKey := inkey()
|
||||
|
||||
IF nActiveX == 2
|
||||
oCom:Value := seconds()/86400
|
||||
ENDIF
|
||||
|
||||
if nKey == K_F12
|
||||
if nActiveX == 1
|
||||
oCom:Navigate( 'www.vouch.info' )
|
||||
|
||||
elseif nActiveX == 11
|
||||
//oCom:document( 0 ):InnerHTML := "<html><h1>Stream Test</h1><p>This HTML content in a document.</html>"
|
||||
|
||||
elseif nActiveX == 4
|
||||
oCom:RMCBackColor := 23456142
|
||||
oCom:RMCStyle := 2
|
||||
oCom:RMCUserWatermark := 'Vouch'
|
||||
|
||||
oCom:Region(1):SetProperties( 5.0,5.0,-5.0,-5.0 )
|
||||
|
||||
oCom:Draw( .t. )
|
||||
endif
|
||||
|
||||
elseif nKey == K_F11
|
||||
if nActiveX == 4
|
||||
nTurn++
|
||||
if nTurn > 6
|
||||
nTurn := 1
|
||||
endif
|
||||
sData := NIL
|
||||
sData := ''
|
||||
|
||||
do case
|
||||
case nTurn == 1
|
||||
hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] ' + 'Stacked Bars' )
|
||||
//SetMode( 30,100 )
|
||||
|
||||
sData += "00003600|00004450|000051|000061|000073|00008-6972|00009412|00011Tahoma|100011|10"
|
||||
sData += "0035|1000410|10005-5|10006-5|1000911|100101|100111|100181|100200|1002150000|1002"
|
||||
sData += "211|100238|100331|100341|100356|100378|100411|100468|100484|100494|10051-6972|10"
|
||||
sData += "052-16777216|10053-1828|100541|100558|10056-16777216|10057-16777216|10060-167772"
|
||||
sData += "16|10061-16777216|1006315|10064-32|100652|10066-16776961|10180this is the footer"
|
||||
sData += "|10181Example of stacked bars|10182Apples*Pears*Cherries*Strawberries|10183 $|10"
|
||||
sData += "184This is an optional axis text, sized 9 points and bold\9b|10187Label Nr. 1*La"
|
||||
sData += "bel Nr. 2*Label Nr. 3*Label Nr. 4*Label Nr. 5*Label Nr. 6|10196This is an option"
|
||||
sData += "al label axis text|110011|110023|110033|110045|110055|11006-1|1100923|110131|110"
|
||||
sData += "14-1|110171|11019-16777077|1102111|110221|110236|1105310000*10000*16000*12000*20"
|
||||
sData += "000*10000|120011|120023|120033|120045|120055|12006-1|1200927|120131|12014-1|1201"
|
||||
sData += "71|12019-16751616|1202111|120221|120236|120535000*7000*4000*15000*10000*10000|13"
|
||||
sData += "0011|130023|130033|130045|130055|13006-1|1300982|130131|13014-1|130171|13019-838"
|
||||
sData += "8608|1302111|130221|130236|1305310000*3000*12000*10000*5000*20000|140011|140023|"
|
||||
sData += "140033|140045|140055|14006-1|1400925|140131|14014-1|140171|14019-4684277|1402111"
|
||||
sData += "|140221|140236|140535000*9000*12000*6000*10000*5000"
|
||||
|
||||
case nTurn == 2
|
||||
hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] '+'Floating Bars' )
|
||||
//SetMode( 20,90 )
|
||||
|
||||
sData += "00003550|00004300|000051|000073|00008-2894893|00009412|00011Tahoma|100011|100035"
|
||||
sData += "|100045|10005-5|10006-5|1000911|100101|100111|100131|100181|100201|1002113|10022"
|
||||
sData += "13|100238|100331|100341|100356|100378|100411|100468|100482|10052-16777216|10053-"
|
||||
sData += "1120086|100544|100555|10056-16777216|10057-16777216|10060-16777216|10061-1677721"
|
||||
sData += "6|1006316|10064-5383962|100652|10066-16777011|10181Birth of a Killer App|10182Sc"
|
||||
sData += "hedule*Reality|10187Design*Development*Testing*Bug Fixing*Documentation*Marketin"
|
||||
sData += "g|1020104/01*04/02*04/03*04/04*04/05*04/06*04/07*04/08*04/09*04/10*04/11*04/12*0"
|
||||
sData += "5/01|110011|110026|110044|110101|110131|11019-6751336|1102111|110221|1102312|110"
|
||||
sData += "531*3*4*6*6*4*7*4*9*3*10*3|120011|120026|120044|120101|120132|12019-47872|120211"
|
||||
sData += "1|120221|1202312|120531*.5*1.5*10.5*12*1*12*1*12.5*.5*2*11"
|
||||
|
||||
case nTurn == 3
|
||||
hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] '+'Four Regions' )
|
||||
//SetMode( 40,120 )
|
||||
|
||||
sData += "00003700|00004500|000054|000061|000071|00008-984833|00009412|00011Tahoma|100011|"
|
||||
sData += "100032|100042|10005348|10006248|1000910|100101|100111|100181|100200|10021100|100"
|
||||
sData += "2211|100238|100331|100341|100355|100378|100481|100491|10051-984833|10052-1677721"
|
||||
sData += "6|10053-657956|100541|100558|10056-16777216|10057-16777216|10060-16777216|10061-"
|
||||
sData += "16777216|10187Label 1*Label 2*Label 3*Label 4*Label 5|110011|110021|110031|11004"
|
||||
sData += "6|110056|11006-1|110091|110131|11014-1|110171|1102111|110221|110235|1105330*40*7"
|
||||
sData += "0*60*20|200011|20003352|200042|20005-2|20006248|2000910|200101|200111|200181|200"
|
||||
sData += "200|20021100|2002211|200238|200331|200341|200355|200378|200484|200491|20051-9848"
|
||||
sData += "33|20052-16777216|20053-657956|200544|200555|20056-16777216|20057-16777216|20060"
|
||||
sData += "-16777216|20061-16777216|20187Label 1*Label 2*Label 3*Label 4*Label 5|210011|210"
|
||||
sData += "023|210033|210045|210055|21006-1|210091|210101|210131|21014-1|210171|2102111|210"
|
||||
sData += "221|210235|2105320*10*15*25*30|220011|220023|220033|220045|220055|22006-1|220091"
|
||||
sData += "|220101|220131|22014-1|220171|2202111|220221|220235|2205325*30*10*20*15|230011|2"
|
||||
sData += "30023|230033|230045|230055|23006-1|230091|230101|230131|23014-1|230171|2302111|2"
|
||||
sData += "30221|230235|2305310*20*40*20*30|240011|240023|240033|240045|240055|24006-1|2400"
|
||||
sData += "91|240101|240131|24014-1|240171|2402111|240221|240235|2405340*30*20*30*20|300011"
|
||||
sData += "|300032|30004252|30005348|30006-2|3000910|300101|300181|300481|300491|30051-9848"
|
||||
sData += "33|30052-16777216|30053-657956|310011|3100251|310031|3100454|310054|310071|31009"
|
||||
sData += "1|310121|310151|310161|310171|310182|310211|310221|310235|3105330*50*20*40*60|40"
|
||||
sData += "0011|40003352|40004252|40005-2|40006-2|4000910|400101|400111|400131|400181|40020"
|
||||
sData += "100|40021250|4002211|400238|400281|400292|400300|400310|400322|400331|400341|400"
|
||||
sData += "3510|400378|400482|400492|40051-984833|40052-16777216|40053-984833|400541|400558"
|
||||
sData += "|40056-16776961|40057-16777216|400592|40060-16777216|40061-16777216|40183$ |4018"
|
||||
sData += "5 %|410011|410021|410031|410043|410053|41006-1|4100950|410131|41014-1|410171|410"
|
||||
sData += "19-10496|4102111|410221|4102310|41053240*230*220*180*170*160*145*130*125*115|420"
|
||||
sData += "011|4200221|420035|4200422|420052|420061|420071|4200963|420111|420121|420131|420"
|
||||
sData += "171|42019-16744448|4202115|420221|4202310|420261|420538.1*6.2*4.3*2.2*1.2*3.1*5."
|
||||
sData += "2*11.4*7.3*4.2"
|
||||
|
||||
case nTurn == 4
|
||||
hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] '+'10 Biggest Companies' )
|
||||
//SetMode( 25,90 )
|
||||
|
||||
sData += "00003670|00004450|000051|000061|000071|00008-10185235|00009412|00011Tahoma|10001"
|
||||
sData += "1|100035|1000410|10005-5|10006-5|1000912|100101|100111|100131|100181|10020100000"
|
||||
sData += "|10021250000|1002211|100239|100281|100292|100300|100310|100322|100331|100341|100"
|
||||
sData += "3510|100378|100482|100492|10051-32944|10052-1296|10053-983041|100541|100558|1005"
|
||||
sData += "6-1828|10057-16777216|100592|10060-1828|10061-16777216|10180data source: F.A.Z|1"
|
||||
sData += "0181The world's 10 biggest industrial companies 2003|10183$ |10184Total turnover"
|
||||
sData += " in Mill. Dollar|10185 %|10186Net operating margin|10187Exxon Mobil*Royal Dutch "
|
||||
sData += "/ Shell*BP*General Motors*Daimler Chrysler*Ford Motor*Toyota Motor*General Elect"
|
||||
sData += "ric*TOTAL*Chevron Texaco|110011|110021|110031|110043|110053|11006-1|1100950|1101"
|
||||
sData += "31|11014-1|110171|11019-10496|1102111|110221|1102310|11053242365*235598*232571*1"
|
||||
sData += "85524*170457*164196*149321*132797*130067*119703|120011|1200221|120035|1200422|12"
|
||||
sData += "0052|120061|120071|1200970|120111|120121|120131|1201421|120171|12019-16744448|12"
|
||||
sData += "02115|120221|1202310|120261|120538.9*4.1*4.4*2.1*.3*.3*5.9*11.3*6.7*6"
|
||||
|
||||
case nTurn == 5
|
||||
hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] '+'Grouped Bars' )
|
||||
//SetMode( 25,80 )
|
||||
|
||||
sData += "00003600|00004450|000051|000061|000075|00008-2|00009412|00010paper.jpg|00011Taho"
|
||||
sData += "ma|100011|100035|100045|10005-5|10006-5|1000910|100101|100111|100181|100200|1002"
|
||||
sData += "1100|1002211|100238|100331|100341|100355|100378|100468|100484|10053-2|100541|100"
|
||||
sData += "558|100631|100651|10182First quarter*Second quarter*Third quarter*Fourth quarter"
|
||||
sData += "|101872000*2001*2002*2003*2004|110011|110022|110044|110131|1102111|110221|110235"
|
||||
sData += "|1105330*20*40*60*10|120011|120022|120044|120131|1202111|120221|120235|1205330*2"
|
||||
sData += "0*50*70*60|130011|130022|130044|130131|1302111|130221|130235|1305340*10*30*20*80"
|
||||
sData += "|140011|140022|140044|140131|1402111|140221|140235|1405370*50*80*40*30"
|
||||
|
||||
case nTurn == 6
|
||||
hb_gtInfo( HB_GTI_WINTITLE,'RMChart [ Next:F11 ] '+'Flow Chart' )
|
||||
//SetMode( 30,50 )
|
||||
|
||||
sData += "00003305|00004400|000051|00008-984833|00009412|00011Tahoma|100011|100035|100045|"
|
||||
sData += "10005-5|10006-5|10180\7C|010011|010051|010072|010081|0101050|0101125|01012100|01"
|
||||
sData += "01325|01014-5952982|01015-5952982|01016255|010191|0102010|01026Start|01030-256|0"
|
||||
sData += "10012|010054|0100721|01014-16776961|010222|01024100*100|0102550*75|01026|010272|"
|
||||
sData += "010293|010013|010051|010071|010081|0101050|0101175|01012100|0101325|01014-669788"
|
||||
sData += "2|01015-6697882|01016255|010191|0102010|01026i = 1|01030-16777216|010014|010054|"
|
||||
sData += "0100721|01014-16776961|010222|01024100*100|01025100*150|01026|010272|010293|0100"
|
||||
sData += "15|010051|010073|010081|0101050|01011150|01012100|0101350|01014-65536|01015-6553"
|
||||
sData += "6|01016255|010191|0102010|01026i = 39?|01030-256|010016|010054|0100721|01014-167"
|
||||
sData += "76961|010222|01024100*100|01025200*225|01026|010272|010293|010017|010051|010071|"
|
||||
sData += "010081|0101050|01011225|01012100|0101325|01014-6697882|01015-6697882|01016255|01"
|
||||
sData += "0191|0102010|01026i = i + 1|01030-16777216|010018|010054|0100721|01014-16776961"
|
||||
sData += "|010222|01024100*100|01025250*275|01026|010272|010293|010019|010051|010073|01008"
|
||||
sData += "1|0101050|01011275|01012100|0101350|01014-65536|01015-65536|01016255|010191|0102"
|
||||
sData += "010|01026i <= 100|01030-256|0100110|010054|0100721|01014-16776961|010222|0102410"
|
||||
sData += "0*100|01025325*350|01026|010272|010293|0100111|010051|010072|010081|0101050|0101"
|
||||
sData += "1350|01012100|0101325|01014-5952982|01015-5952982|01016255|010191|0102010|01026S"
|
||||
sData += "top|01030-256|0100113|010054|0100721|01014-16776961|010222|01024150*200|01025175"
|
||||
sData += "*175|01026|010272|010293|0100114|010051|010081|01010145|01011157|0101250|01014-1"
|
||||
sData += "6776961|01015-5383962|01016255|010191|0102010|01026yes|01030-16777216|0100115|01"
|
||||
sData += "0051|010071|010081|01010200|01011162|01012100|0101325|01014-6697882|01015-669788"
|
||||
sData += "2|01016255|010191|0102010|01026i = 69|01030-16777216|0100116|010054|0100721|0101"
|
||||
sData += "4-16776961|010224|0102450*10*10*100|01025300*300*125*125|01026|010272|010293|010"
|
||||
sData += "0117|010054|0100721|01014-16776961|010223|01024250*250*100|01025162*125*125|0102"
|
||||
sData += "6|010272|010293|0100118|010051|010081|01010100|01011200|0101250|0101325|01014-16"
|
||||
sData += "776961|01016255|010191|0102010|01026no|01030-16777216|0100119|010051|010081|0101"
|
||||
sData += "010|01011280|0101240|01014-16776961|01016255|010191|0102010|01026yes|01030-16777"
|
||||
sData += "216|0100120|010051|010081|01010100|01011322|0101250|01014-16776961|01016255|0101"
|
||||
sData += "91|0102010|01026no|01030-16777216|0100120|010051|010079|01010180|01011280|010121"
|
||||
sData += "20|01013100|01015-39322|010191|010209|01026RMChart is not a flowchart tool. This"
|
||||
sData += " is just an example for the use of CustomObjects!|01030-256"
|
||||
|
||||
endcase
|
||||
|
||||
oCom:Reset()
|
||||
oCom:RMCFile := sData
|
||||
oCom:Draw( .t. )
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
if nKey == 27
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
|
||||
Return nil
|
||||
//----------------------------------------------------------------------//
|
||||
Function ConfigureRMChart( RMChart )
|
||||
|
||||
#define RMC_CTRLSTYLEFLAT 0
|
||||
#define RMC_PIE_GRADIENT 52
|
||||
#define RMC_FULL 1
|
||||
#define RMC_EXPLODE_NONE 0
|
||||
#define RMC_VLABEL_ABSOLUTE 6
|
||||
#define RMC_HATCHBRUSH_OFF 0
|
||||
|
||||
/* The code pulled from freewin sources */
|
||||
WITH OBJECT RMChart
|
||||
:Font := "Tahoma"
|
||||
:RMCStyle := RMC_CTRLSTYLEFLAT
|
||||
|
||||
:AddRegion()
|
||||
WITH OBJECT :Region( 1 )
|
||||
:Footer = "http://vouch.info"
|
||||
|
||||
:AddCaption()
|
||||
WITH OBJECT :Caption()
|
||||
:Titel := "GTWVG Active-X Demo"
|
||||
:FontSize := 10
|
||||
:Bold := .T.
|
||||
END
|
||||
|
||||
:AddGridlessSeries()
|
||||
|
||||
WITH OBJECT :GridLessSeries
|
||||
:SeriesStyle := RMC_PIE_GRADIENT
|
||||
:Alignment := RMC_FULL
|
||||
:Explodemode := RMC_EXPLODE_NONE
|
||||
:Lucent := .F.
|
||||
:ValueLabelOn := RMC_VLABEL_ABSOLUTE
|
||||
:HatchMode := RMC_HATCHBRUSH_OFF
|
||||
:StartAngle := 0
|
||||
:DataString := "10*5*20*25"
|
||||
END
|
||||
END
|
||||
END
|
||||
|
||||
Return nil
|
||||
//----------------------------------------------------------------------//
|
||||
#if 0
|
||||
* harbour/contrib/gtwvg/makefile
|
||||
* harbour/contrib/gtwvg/wincallb.c
|
||||
* harbour/contrib/gtwvg/wvggui.c
|
||||
* harbour/contrib/gtwvg/wvgsink.c
|
||||
* harbour/contrib/gtwvg/wvgutils.c
|
||||
* harbour/contrib/gtwvg/wvgwin.c
|
||||
* harbour/contrib/gtwvg/hbgtwvg.ch
|
||||
* harbour/contrib/gtwvg/wvgparts.ch
|
||||
* harbour/contrib/gtwvg/wvtwin.ch
|
||||
* harbour/contrib/gtwvg/common.mak
|
||||
* harbour/contrib/gtwvg/wincback.prg
|
||||
* harbour/contrib/gtwvg/wvgax.prg
|
||||
* harbour/contrib/gtwvg/wvgcombo.prg
|
||||
* harbour/contrib/gtwvg/wvgcrt.prg
|
||||
* harbour/contrib/gtwvg/wvgdlg.prg
|
||||
* harbour/contrib/gtwvg/wvglistb.prg
|
||||
* harbour/contrib/gtwvg/wvgmenub.prg
|
||||
* harbour/contrib/gtwvg/wvgphdlr.prg
|
||||
* harbour/contrib/gtwvg/wvgpushb.prg
|
||||
* harbour/contrib/gtwvg/wvgstatb.prg
|
||||
* harbour/contrib/gtwvg/wvgstatc.prg
|
||||
* harbour/contrib/gtwvg/wvgtoolb.prg
|
||||
* harbour/contrib/gtwvg/wvgtreev.prg
|
||||
* harbour/contrib/gtwvg/wvgwnd.prg
|
||||
* harbour/contrib/gtwvg/tests/demowvg.prg
|
||||
#endif
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
712
harbour/contrib/gtwvg/wincallb.c
Normal file
712
harbour/contrib/gtwvg/wincallb.c
Normal file
@@ -0,0 +1,712 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Harbour Project source code:
|
||||
* Source file for the Wvg*Classes
|
||||
*
|
||||
* Copyright 2008 Pritpal Bedi <pritpal@vouchcac.com>
|
||||
* http://www.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.
|
||||
*
|
||||
*/
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
//
|
||||
// A Contribution from Andy Wos
|
||||
// .
|
||||
// A Big Thank You
|
||||
//
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
//
|
||||
// Calback pointer interface
|
||||
// ( to be used with wincback.prg )
|
||||
// 6 June 2004, 13 June 2004
|
||||
// 5 April 2005 - optional (void) spec added
|
||||
// January 2006 - used VirtualAlloc to overcome DEP
|
||||
// February 2006 - reworked using Przemek's brilliant ideas
|
||||
// prg no longer required.
|
||||
|
||||
|
||||
#include <windows.h>
|
||||
#include "hbapi.h"
|
||||
#include "hbvm.h"
|
||||
#include "hbstack.h"
|
||||
#include "hbapiitm.h"
|
||||
#include "hbapierr.h"
|
||||
|
||||
void extern hb_ToOutDebug( const char * sTraceMsg, ... );
|
||||
|
||||
#define MAX_FUNC_SIZE 128 // this must be higher than the largest possible generated
|
||||
// machine code plus size of CALLBACKDATA structure
|
||||
// 128 bytes is now more than enough.
|
||||
|
||||
// my virtual memory management structures:
|
||||
|
||||
// callback function pointer and status
|
||||
typedef struct _FuncData {
|
||||
LPTSTR pFunc; // the actual function pointer
|
||||
BOOL bActive; // active flag
|
||||
} FuncData, *pFuncData;
|
||||
|
||||
// page reservation and commitments
|
||||
typedef struct _PageData {
|
||||
LPTSTR lpPage; // pointer to this page
|
||||
BOOL bCommited; // pages commitment status
|
||||
pFuncData Functions; // pointer to "array" of functions
|
||||
} PageData, *pPageData;
|
||||
|
||||
// granular reservations
|
||||
typedef struct _MemReservation {
|
||||
LPVOID lpvBase ; // reserved area
|
||||
pPageData MemPages; // pointer to "array" of pages
|
||||
} MemReservation, *pMemReservation;
|
||||
|
||||
// callback info
|
||||
//(stored inside the callback function memory block beyond the function code)
|
||||
typedef struct CALLBACKDATA {
|
||||
PHB_DYNS pDynSym;
|
||||
PHB_ITEM pSelf;
|
||||
int iFormalParams;
|
||||
int iCargoParams;
|
||||
PHB_ITEM * pParams;
|
||||
BOOL bVoid;
|
||||
} CALLBACKDATA, * PCALLBACKDATA;
|
||||
|
||||
static void _udp( BYTE * pCode, ULONG ulOffset, void * Address ); // absolute
|
||||
static void _ucp( BYTE * pCode, ULONG ulOffset, void * Address, ULONG ulNext ); // relative
|
||||
static LPVOID FuncMemAlloc( void );
|
||||
static BOOL FuncMemFree( LPBYTE pMem );
|
||||
static LPVOID _GenerateCallback( CALLBACKDATA * pCallback );
|
||||
|
||||
DWORD dwPageSize = 0;
|
||||
DWORD dwMinAlloc = 0;
|
||||
DWORD dwMinReserve = 0;
|
||||
DWORD dwPagesInAlloc = 0;
|
||||
DWORD dwFuncsInPage = 0;
|
||||
DWORD dwReservedLen = 0;
|
||||
|
||||
pMemReservation pAllAllocs = NULL;
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
/*
|
||||
prepare the callback structure and save the xHarbour symbols
|
||||
*/
|
||||
// params: pbcFunc, oObj, nParams, lVoid, cargo_params...
|
||||
|
||||
HB_FUNC( _ASCALLBACK )
|
||||
{
|
||||
CALLBACKDATA Callback;
|
||||
|
||||
LPVOID pMem;
|
||||
|
||||
int i, iParam;
|
||||
|
||||
if( ISBLOCK( 1 ) )
|
||||
{
|
||||
Callback.pDynSym = hb_dynsymGet( "EVAL" );
|
||||
Callback.pSelf = hb_itemNew( hb_param( 1, HB_IT_BLOCK ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
if( ISOBJECT( 2 ) )
|
||||
{
|
||||
Callback.pSelf = hb_itemNew( hb_param( 2, HB_IT_OBJECT ) );
|
||||
}
|
||||
else
|
||||
Callback.pSelf = NULL;
|
||||
|
||||
if( ISCHAR( 1 ) )
|
||||
Callback.pDynSym = hb_dynsymGet( hb_parc( 1 ) );
|
||||
else if( ISPOINTER( 1 ) )
|
||||
Callback.pDynSym = ( ( PHB_SYMB ) hb_parptr( 1 ) )->pDynSym;
|
||||
else
|
||||
{
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 1, NULL, "AsCallback", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_retnl( 0 );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if( ! Callback.pDynSym ) // is it actually an error?
|
||||
{
|
||||
hb_errRT_BASE_SubstR( EG_ARG, 2, NULL, "AsCallback", 2, hb_paramError( 1 ), hb_paramError( 2 ) );
|
||||
hb_retnl( 0 );
|
||||
return;
|
||||
}
|
||||
|
||||
Callback.iFormalParams = ISNUM( 3 ) ? hb_parni( 3 ) : 4 ; // default to 4 formal parameters
|
||||
Callback.bVoid = ISLOG( 4 ) ? hb_parl ( 4 ) : FALSE; // default to non-void function
|
||||
Callback.iCargoParams = hb_pcount() - 4;
|
||||
|
||||
Callback.pParams = ( PHB_ITEM * ) hb_xgrab( Callback.iCargoParams * sizeof( PHB_ITEM ) );
|
||||
iParam = 5; //i + 1;
|
||||
for( i = 0; i < Callback.iCargoParams; ++i )
|
||||
{
|
||||
Callback.pParams[ i ] = hb_itemNew( hb_param( i + iParam, HB_IT_ANY ) );
|
||||
}
|
||||
|
||||
hb_retnl( ( ULONG ) ( pMem = _GenerateCallback( &Callback ) ) );
|
||||
|
||||
// debugging only
|
||||
// to see what was generated
|
||||
if ( ISBYREF( 5 ) )
|
||||
hb_storclen( ( char * ) pMem, 128, 5 );
|
||||
}
|
||||
//----------------------------------------------------------------------//
|
||||
// the actual processing of the callbacks
|
||||
//
|
||||
LRESULT __CallbackDispatcher( PCALLBACKDATA pCallback, ... )
|
||||
{
|
||||
int i;
|
||||
long lResult;
|
||||
|
||||
// save state?
|
||||
hb_vmPushState();
|
||||
|
||||
hb_vmPushSymbol( hb_dynsymSymbol( pCallback->pDynSym ) );
|
||||
if( pCallback->pSelf )
|
||||
hb_vmPush( pCallback->pSelf );
|
||||
else
|
||||
hb_vmPushNil();
|
||||
|
||||
// first push the formal parameters
|
||||
if ( pCallback->iFormalParams )
|
||||
{
|
||||
va_list va;
|
||||
va_start( va, pCallback );
|
||||
|
||||
for( i = 1; i <= pCallback->iFormalParams; i++ )
|
||||
{
|
||||
hb_vmPushLong( va_arg( va, DWORD ) );
|
||||
}
|
||||
va_end( va );
|
||||
}
|
||||
|
||||
// then push cargo params
|
||||
for( i = 0; i < pCallback->iCargoParams; ++i )
|
||||
{
|
||||
hb_vmPush( pCallback->pParams[ i ] );
|
||||
}
|
||||
|
||||
// execute
|
||||
if( pCallback->pSelf )
|
||||
hb_vmSend( pCallback->iFormalParams + pCallback->iCargoParams );
|
||||
else
|
||||
hb_vmDo( pCallback->iFormalParams + pCallback->iCargoParams );
|
||||
|
||||
lResult = hb_parnl( -1 ) ;
|
||||
|
||||
hb_vmPopState();
|
||||
|
||||
return lResult;
|
||||
}
|
||||
//----------------------------------------------------------------------//
|
||||
/*
|
||||
//i tylko jedna wersje funkcji callback od dynamicznej allokacji:
|
||||
|
||||
LRESULT CALLBACK CallbackTestFunc( LONG hWnd, long nMsg, WPARAM wParam, LPARAM lParam )
|
||||
{
|
||||
int iHandle = 0; // to podmieniasz na numer hanldera
|
||||
// own address
|
||||
|
||||
return CallbackDispacher( iHandle, hWnd, nMsg, wParam, lParam );
|
||||
}
|
||||
|
||||
//Zas CallbackDispacher() wygladalby tak:
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
purpose of this function:
|
||||
- allocate enough memory for the function itself and the CALLBACK structure
|
||||
- store pointer to self (to read the callback structure)
|
||||
- pass the above pointer to the dispatcher plus the formal parameters
|
||||
- either return a value, or void
|
||||
|
||||
The generated code is equivalent to:
|
||||
------------------------------------
|
||||
|
||||
LRESULT CALLBACK GeneratedCode( formal params.... )
|
||||
{
|
||||
PCALLBACKDATA pCallback = [actual real address]
|
||||
|
||||
return ( __CallbackDispatcher( pCallback, formal params ) );
|
||||
}
|
||||
|
||||
void and no void generate the same code, so, it does not matter
|
||||
except in the universal handler
|
||||
|
||||
if no formal params expected the code is very simple
|
||||
|
||||
68 .. .. .. .. // push long (constant)
|
||||
E8 .. .. .. .. // call function
|
||||
59 // pop
|
||||
C3 // return
|
||||
90 90 90 // padding
|
||||
|
||||
|
||||
if parameters are passed, there is a prolog,
|
||||
|
||||
55
|
||||
8B EC
|
||||
|
||||
pushing params back to front
|
||||
4 bytes per parameter:
|
||||
|
||||
1: 8B
|
||||
2: 45->55->4D->45...
|
||||
3: 08+(nParams-nCurrentParam )*4 // 1 based
|
||||
4: 50->52->51->50...
|
||||
|
||||
push long constant
|
||||
68 .. .. .. .. // push long (constant)
|
||||
|
||||
call function
|
||||
E8 .. .. .. .. // call function
|
||||
|
||||
clean up after the function call
|
||||
83 C4 08 // where 08 is param count dependent -> as per first param
|
||||
|
||||
and epilog+padding
|
||||
5D
|
||||
C2 04 00 // where 04 is paramater count dependent
|
||||
90 90 90
|
||||
*/
|
||||
|
||||
static LPVOID _GenerateCallback( CALLBACKDATA * pCallback )
|
||||
{
|
||||
byte * pMem;
|
||||
//int nFuncSize;
|
||||
PCALLBACKDATA pCallbackRecord;
|
||||
int iOffset;
|
||||
int i;
|
||||
int iParVal1;
|
||||
int iParVal2;
|
||||
|
||||
pMem = FuncMemAlloc();
|
||||
|
||||
if( pMem )
|
||||
{
|
||||
pCallbackRecord = ( PCALLBACKDATA ) ( pMem + MAX_FUNC_SIZE - sizeof( CALLBACKDATA )-1 );
|
||||
memcpy( pCallbackRecord, pCallback, sizeof( CALLBACKDATA ) );
|
||||
|
||||
if ( pCallback->iFormalParams == 0 )
|
||||
{
|
||||
|
||||
BYTE pFuncBody[] = { 0x68, 0x00, 0x00, 0x00, 0x00, // push long (constant)
|
||||
0xE8, 0x00, 0x00, 0x00, 0x00, // call function
|
||||
0x59, // pop cx
|
||||
0xC3, 0x90, 0x90, 0x90 }; // return
|
||||
// size: 15
|
||||
|
||||
memcpy( pMem, pFuncBody, 15 );
|
||||
_udp( pMem, 1, pCallbackRecord ) ; // update callbackdata pointer
|
||||
_ucp( pMem, 6, __CallbackDispatcher, 10 ); // update code pointer
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
BYTE pFuncProlog[] = { 0x55, // push bp
|
||||
0x8B, 0xEC }; // mov bp,sp
|
||||
|
||||
BYTE pFuncEpilog[] = { 0x68, 0x00, 0x00, 0x00, 0x00, // push long (constant)
|
||||
0xE8, 0x00, 0x00, 0x00, 0x00, // call function
|
||||
0x83, 0xC4, 0x00,
|
||||
0x5D, // pop bp
|
||||
0xC2, 0x00, 0x00,
|
||||
0x90, 0x90, 0x90 }; // size: 20
|
||||
|
||||
BYTE pParamData[] = { 0x8B, 0x00, 0x00, 0x00 };
|
||||
|
||||
memcpy( pMem, pFuncProlog, 3 );
|
||||
iOffset = 3;
|
||||
|
||||
// add formal parameters
|
||||
|
||||
iParVal1 = 0x45;
|
||||
iParVal2 = 0x50;
|
||||
for ( i = 1; i <= pCallback->iFormalParams; i++ )
|
||||
{
|
||||
pParamData[1] = iParVal1;
|
||||
pParamData[2] = 0x08 + ( ( pCallback->iFormalParams - i )* 4 );
|
||||
pParamData[3] = iParVal2;
|
||||
memcpy( pMem+iOffset, pParamData, 4 );
|
||||
iOffset += 4;
|
||||
|
||||
iParVal1 -= 8;
|
||||
if ( iParVal1 < 0x45 )
|
||||
iParVal1 = 0x55;
|
||||
|
||||
iParVal2 --;
|
||||
if ( iParVal2 < 0x50 )
|
||||
iParVal2 = 0x52;
|
||||
}
|
||||
|
||||
memcpy( pMem+iOffset, pFuncEpilog, 20 );
|
||||
_udp( pMem, iOffset+1, pCallbackRecord ) ; // update callbackdata pointer
|
||||
_ucp( pMem, iOffset+6, __CallbackDispatcher, iOffset+ 10 ); // update code pointer
|
||||
pMem[ iOffset+12 ] = 0x08 + ( ( pCallback->iFormalParams - 1 )* 4 );
|
||||
pMem[ iOffset+15 ] = pCallback->iFormalParams * 4;
|
||||
}
|
||||
}
|
||||
return pMem;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( _FREECALLBACK )
|
||||
{
|
||||
void* ptr = ( void* ) hb_parnl( 1 );
|
||||
|
||||
hb_retl( FuncMemFree( ptr ) );
|
||||
return;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
// Intel specific ?? Patch an address relative to the next instruction
|
||||
//
|
||||
static void _ucp( BYTE * pCode, ULONG ulOffset, void * Address, ULONG ulNext )
|
||||
{
|
||||
ULONG ulBase;
|
||||
ULONG ulRelative;
|
||||
|
||||
ulBase = ( ULONG ) pCode + ulNext;
|
||||
// Relative to next instruction
|
||||
ulRelative = ( ULONG ) Address - ulBase;
|
||||
|
||||
pCode[ ulOffset ] = ( BYTE ) ( ( ulRelative ) & 0xFF );
|
||||
pCode[ ulOffset + 1 ] = ( BYTE ) ( ( ulRelative >> 8 ) & 0xFF );
|
||||
pCode[ ulOffset + 2 ] = ( BYTE ) ( ( ulRelative >> 16 ) & 0xFF );
|
||||
pCode[ ulOffset + 3 ] = ( BYTE ) ( ( ulRelative >> 24 ) & 0xFF );
|
||||
}
|
||||
//----------------------------------------------------------------------//
|
||||
// Patch an address of the dynamic function
|
||||
//
|
||||
static void _udp( BYTE * pCode, ULONG ulOffset, void * Address )
|
||||
{
|
||||
pCode[ ulOffset ] = ( BYTE ) ( ( ( ULONG ) Address ) & 0xFF );
|
||||
pCode[ ulOffset + 1 ] = ( BYTE ) ( ( ( ULONG ) Address >> 8 ) & 0xFF );
|
||||
pCode[ ulOffset + 2 ] = ( BYTE ) ( ( ( ULONG ) Address >> 16 ) & 0xFF );
|
||||
pCode[ ulOffset + 3 ] = ( BYTE ) ( ( ( ULONG ) Address >> 24 ) & 0xFF );
|
||||
}
|
||||
//----------------------------------------------------------------------//
|
||||
// allocate memory for a function
|
||||
// it is assumed that in the worst case scenario the function body requires
|
||||
// 256 bytes. The tests shown that it is in fact 159 bytes, but it has been
|
||||
// increased to be on the safe side and provide for future expansion of the
|
||||
// code.
|
||||
|
||||
// on my PC:
|
||||
// dwPageSize = 4096
|
||||
// dwAllocationGranularity = 65536
|
||||
|
||||
// one page may contain 4096/256 = 16 callback functions
|
||||
// one min allocation can contain 65536/4096 = 16 pages, and 16*16 = 256 callback functions
|
||||
|
||||
// Note to self:
|
||||
// it may be required to remove READWRITE flag for systems above Win9*
|
||||
// use VirtualProtect to change the comitted memory protection scheme
|
||||
// Note: VirtualProtect is not supported on Win9* systems
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
static LPVOID FuncMemAlloc( void )
|
||||
{
|
||||
|
||||
SYSTEM_INFO sSysInfo; // useful information about the system
|
||||
LPVOID lpvBase;
|
||||
//LPVOID lpvResult;
|
||||
DWORD i,j,k,l;
|
||||
BOOL bFound;
|
||||
char * lpPage;
|
||||
BOOL bError;
|
||||
LPVOID lpReturn;
|
||||
|
||||
if( dwPageSize == 0 )
|
||||
{
|
||||
GetSystemInfo( &sSysInfo ); // populate the system information structure
|
||||
dwPageSize = sSysInfo.dwPageSize;
|
||||
dwMinAlloc = sSysInfo.dwAllocationGranularity;
|
||||
dwMinReserve = max( dwPageSize, dwMinAlloc );
|
||||
dwPagesInAlloc = dwMinReserve/dwPageSize;
|
||||
dwFuncsInPage = dwPageSize/MAX_FUNC_SIZE;
|
||||
}
|
||||
|
||||
bFound = FALSE;
|
||||
bError = FALSE;
|
||||
lpReturn = NULL;
|
||||
|
||||
// first time called?
|
||||
if( pAllAllocs == NULL )
|
||||
{
|
||||
// allocate space for the structure
|
||||
pAllAllocs = ( MemReservation* ) malloc( sizeof( MemReservation ) );
|
||||
|
||||
// reserve the minimum
|
||||
lpvBase = VirtualAlloc(
|
||||
NULL, // system selects address
|
||||
dwMinReserve, // size of allocation
|
||||
MEM_RESERVE, // allocate reserved pages
|
||||
PAGE_NOACCESS ); // protection = no access
|
||||
|
||||
pAllAllocs->lpvBase = lpvBase; // save the reservation
|
||||
pAllAllocs->MemPages = ( PageData* ) malloc( dwPagesInAlloc * sizeof( PageData ) );
|
||||
|
||||
for( l = 0 ; l < dwPagesInAlloc ; l++ )
|
||||
{
|
||||
( ( pAllAllocs )->MemPages+l )->bCommited = FALSE;
|
||||
}
|
||||
dwReservedLen = 1;
|
||||
j = 0;
|
||||
k = 0;
|
||||
|
||||
}
|
||||
|
||||
//find empty slot
|
||||
for( i = 0 ; i < dwReservedLen ; i++ ) // each reservation
|
||||
{
|
||||
lpPage = ( pAllAllocs+i )->lpvBase;
|
||||
|
||||
for( j = 0 ; j < dwPagesInAlloc ; j++ ) // each reserved page
|
||||
{
|
||||
if( ( ( pAllAllocs+i )->MemPages+j )->bCommited ) // if committed
|
||||
{
|
||||
for( k = 0 ; k < dwFuncsInPage ; k++ )
|
||||
{
|
||||
if( ! ( ( ( pAllAllocs+i )->MemPages+j )->Functions+k )->bActive ) // function slot not active
|
||||
{
|
||||
bFound = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
lpPage += dwPageSize;
|
||||
}
|
||||
else // found uncommited page
|
||||
{
|
||||
|
||||
lpvBase = VirtualAlloc(
|
||||
lpPage, // system selects address
|
||||
dwPageSize, // size of allocation
|
||||
MEM_COMMIT, // allocate reserved pages
|
||||
PAGE_EXECUTE_READWRITE ); // protection = no access
|
||||
if( lpvBase == NULL )
|
||||
{
|
||||
// error commiting mem page
|
||||
//hb_ToOutDebug( "error committing memory" );
|
||||
bError = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
( ( pAllAllocs+i )->MemPages+j )->lpPage = lpvBase;
|
||||
( ( pAllAllocs+i )->MemPages+j )->bCommited = TRUE;
|
||||
( ( pAllAllocs+i )->MemPages+j )->Functions = ( FuncData* ) malloc( dwFuncsInPage * sizeof( FuncData ) );
|
||||
|
||||
for( l = 0 ; l < dwFuncsInPage ; l++ )
|
||||
{
|
||||
( ( ( pAllAllocs+i )->MemPages+j )->Functions+l )->bActive = FALSE;
|
||||
( ( ( pAllAllocs+i )->MemPages+j )->Functions+l )->pFunc =
|
||||
( LPTSTR ) ( ( ( LPSTR ) lpvBase) + ( l*MAX_FUNC_SIZE ) );
|
||||
}
|
||||
|
||||
j--; // to repeat
|
||||
}
|
||||
|
||||
if( bFound || bError )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( bError || bFound )
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
// need to reseve more memory (allocate another block)
|
||||
if( i == dwReservedLen-1 )
|
||||
{
|
||||
// allocate space for the structure
|
||||
pAllAllocs = ( MemReservation* ) realloc( pAllAllocs, ( dwReservedLen+1 ) * sizeof( MemReservation ) );
|
||||
|
||||
// reserve the minimum
|
||||
lpvBase = VirtualAlloc(
|
||||
NULL, // system selects address
|
||||
dwMinReserve, // size of allocation
|
||||
MEM_RESERVE, // allocate reserved pages
|
||||
PAGE_NOACCESS ); // protection = no access
|
||||
|
||||
if( lpvBase == NULL )
|
||||
{
|
||||
// error commiting mem page
|
||||
//hb_ToOutDebug( "error reserving memory" );
|
||||
bError = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
( pAllAllocs+i+1 )->lpvBase = lpvBase; // save the reservation
|
||||
( pAllAllocs+i+1 )->MemPages = ( PageData* ) malloc( dwPagesInAlloc * sizeof( PageData ) );
|
||||
|
||||
for( l = 0 ; l < dwPagesInAlloc ; l++ )
|
||||
{
|
||||
( ( pAllAllocs+i+1 )->MemPages+l )->bCommited = FALSE;
|
||||
}
|
||||
dwReservedLen++;
|
||||
}
|
||||
}
|
||||
|
||||
if( bError )
|
||||
{
|
||||
//hb_ToOutDebug( "error" );
|
||||
}
|
||||
else if( bFound )
|
||||
{
|
||||
( ( ( pAllAllocs+i )->MemPages+j )->Functions+k )->bActive = TRUE;
|
||||
lpReturn = ( ( ( pAllAllocs+i )->MemPages+j )->Functions+k )->pFunc;
|
||||
}
|
||||
|
||||
return lpReturn;
|
||||
}
|
||||
//----------------------------------------------------------------------//
|
||||
// free the allocated CALLBACKDATA structure
|
||||
//
|
||||
static void FreeCallbackRecord( PCALLBACKDATA pCallback )
|
||||
{
|
||||
int i;
|
||||
|
||||
if ( pCallback->pSelf )
|
||||
hb_itemRelease( pCallback->pSelf );
|
||||
|
||||
if ( pCallback->iCargoParams )
|
||||
{
|
||||
for ( i = 0; i < pCallback->iCargoParams; ++i )
|
||||
{
|
||||
hb_itemRelease( pCallback->pParams[ i ] );
|
||||
}
|
||||
hb_xfree( pCallback->pParams );
|
||||
}
|
||||
}
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
static BOOL FuncMemFree( LPBYTE pMem )
|
||||
{
|
||||
DWORD i,j,k;
|
||||
//pPageData lpPage;
|
||||
BOOL bSuccess = FALSE;
|
||||
|
||||
for( i = 0 ; i < dwReservedLen ; i++ ) // each reservation
|
||||
{
|
||||
for( j = 0 ; j < dwPagesInAlloc ; j++ ) // each reserved page
|
||||
{
|
||||
if( ( (pAllAllocs+i )->MemPages+j )->bCommited ) // if committed
|
||||
{
|
||||
for( k = 0 ; k < dwFuncsInPage ; k++ )
|
||||
{
|
||||
if( ( ( ( pAllAllocs+i )->MemPages+j )->Functions+k )->bActive ) // function slot active
|
||||
{
|
||||
if( pMem == ( LPBYTE ) ( ( ( pAllAllocs+i )->MemPages+j )->Functions+k )->pFunc )
|
||||
{
|
||||
FreeCallbackRecord( ( PCALLBACKDATA ) ( pMem + MAX_FUNC_SIZE - sizeof( CALLBACKDATA )-1 ) );
|
||||
( ( ( pAllAllocs+i )->MemPages+j )->Functions+k )->bActive = FALSE;
|
||||
bSuccess = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return bSuccess;
|
||||
}
|
||||
//----------------------------------------------------------------------//
|
||||
// according to MSDN all memory is freed automatically
|
||||
// perhaps this function is not required at all?
|
||||
//
|
||||
static void FuncMemFreeAll( void )
|
||||
{
|
||||
DWORD i,j,k;
|
||||
//pPageData lpPage;
|
||||
LPBYTE pMem;
|
||||
|
||||
if( pAllAllocs != NULL )
|
||||
{
|
||||
for( i = 0 ; i < dwReservedLen ; i++ ) // each reservation
|
||||
{
|
||||
for( j = 0 ; j < dwPagesInAlloc ; j++ ) // each reserved page
|
||||
{
|
||||
if( ( ( pAllAllocs+i )->MemPages+j )->bCommited ) // if committed
|
||||
{
|
||||
for( k = 0 ; k < dwFuncsInPage ; k++ )
|
||||
{
|
||||
if( ( ( ( pAllAllocs+i )->MemPages+j )->Functions+k )->bActive ) // function slot not active
|
||||
{
|
||||
pMem = ( LPBYTE ) ( ( ( pAllAllocs+i )->MemPages+j )->Functions+k )->pFunc;
|
||||
FreeCallbackRecord( ( PCALLBACKDATA ) ( pMem + MAX_FUNC_SIZE - sizeof( CALLBACKDATA )-1 ) );
|
||||
( ( ( pAllAllocs+i )->MemPages+j )->Functions+k )->bActive = FALSE;
|
||||
}
|
||||
}
|
||||
free( ( ( pAllAllocs+i )->MemPages+j )->Functions );
|
||||
( ( pAllAllocs+i )->MemPages+j )->bCommited = FALSE;
|
||||
}
|
||||
}
|
||||
free( ( pAllAllocs+i )->MemPages );
|
||||
VirtualFree( ( pAllAllocs+1 )->lpvBase, 0, MEM_RELEASE );
|
||||
}
|
||||
free( pAllAllocs );
|
||||
pAllAllocs = NULL;
|
||||
dwReservedLen = 0;
|
||||
}
|
||||
return;
|
||||
}
|
||||
//----------------------------------------------------------------------//
|
||||
// as exit procedure
|
||||
//
|
||||
HB_FUNC( _FREEALLCALLBACKS )
|
||||
{
|
||||
FuncMemFreeAll();
|
||||
}
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
|
||||
144
harbour/contrib/gtwvg/wincback.prg
Normal file
144
harbour/contrib/gtwvg/wincback.prg
Normal file
@@ -0,0 +1,144 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Harbour Project source code:
|
||||
* Source file for the Wvg*Classes
|
||||
*
|
||||
* Copyright 2008 Pritpal Bedi <pritpal@vouchcac.com>
|
||||
* http://www.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.
|
||||
*
|
||||
*/
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
//
|
||||
// A Contribution from Andy Wos
|
||||
// .
|
||||
// A Big Thank You
|
||||
//
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
#include 'common.ch'
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
//
|
||||
// Calback pointer interface
|
||||
// ( to be used with _winccback.c )
|
||||
// 6 June 2004, 13 June 2004
|
||||
// 5 April 2005 (added VOID return option)
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
// Universal 32 bit callback procedure interface
|
||||
//
|
||||
// Syntax:
|
||||
// AsCallback( <@MyFunc()>, , [<nQtyParams>], [<xCargo>], [<lVoid>] ) => pProcPtr
|
||||
// or
|
||||
// AsCallback( <bBlock>, , [<nQtyParams>], [<xCargo>], [<lVoid>] ) => pProcPtr
|
||||
// or
|
||||
// AsCallback( <MethPtr>, <oObject>, [<nQtyParams>], [<xCargo>], [<lVoid>] ) => pProcPtr
|
||||
// or
|
||||
// you can replace <@MyFunc()> or <MethPtr> with the acual name, eg: "MYFUNC", MYMETH"
|
||||
|
||||
// Returns: <pProcPtr> - true callback function pointer, or 0 on failure
|
||||
//
|
||||
|
||||
// Note: Must call FreeCallback( <pProcPtr> ), when no longer needed
|
||||
// or memory leak will occur on the application exit.
|
||||
// All parameters are treated as LONG (32bit) values.
|
||||
// Also the return value is treated as a numerical LONG (32bit), unless <lVoid> is TRUE.
|
||||
//
|
||||
// [<nQtyParams>] - optional number of formal parameters (not incl. <xCargo>)
|
||||
// as passed by the caller, eg. Windows, the default is 4.
|
||||
// The number of parameters must be exactly as specified.
|
||||
// Min value is 0, and the maximum is 10.
|
||||
//
|
||||
// [<xCargo>] - any extra value to pass to the callback procedure
|
||||
// (if you intend to change it, it has to be passed by
|
||||
// reference). It will be passed to the procedure, after
|
||||
// all formal parameters.
|
||||
//
|
||||
// [<lVoid>] - an optional indication that the callback function is not to return
|
||||
// any value (void) to the calling process (default FALSE).
|
||||
|
||||
// [<cDebug>] - debugging only (not to be used in normal operation)
|
||||
// if passed by reference, it returns the actual generated
|
||||
// assembler code for inspection and debugging
|
||||
//
|
||||
FUNCTION HB_AsCallback( pbcFunc, oObj, nNumParam, xCargo, lVoid, cDebug )
|
||||
LOCAL pCallback
|
||||
LOCAL nPos := 0
|
||||
|
||||
HB_SYMBOL_UNUSED( xCargo )
|
||||
|
||||
pCallback := _AsCallback( pbcFunc, oObj, nNumParam, lVoid, @cDebug )
|
||||
|
||||
RETURN pCallback
|
||||
//----------------------------------------------------------------------//
|
||||
// Syntax: FreeCallback( < nProcPtr > ) => lSuccess
|
||||
//
|
||||
// Note: The callback procedure must have been obtained
|
||||
// through the AsCallback() function
|
||||
// You should not call this function from within
|
||||
// the callback function itself !!!!!!
|
||||
// If it is a window procedure, the window must be
|
||||
// destroyed first, or it must be "unsubclassed"
|
||||
//
|
||||
FUNCTION HB_FreeCallback( pCallback )
|
||||
LOCAL lSuccess := .F.
|
||||
|
||||
lSuccess := _FreeCallback( pCallback )
|
||||
|
||||
RETURN .T. //lSuccess
|
||||
//----------------------------------------------------------------------//
|
||||
// free all oustanding unreleased callback pointers on exit from the application
|
||||
// could be changed to EXIT PROCEDURE
|
||||
//
|
||||
PROCEDURE _ExitCallbacks
|
||||
|
||||
_FreeAllCallbacks()
|
||||
|
||||
RETURN
|
||||
//----------------------------------------------------------------------//
|
||||
@@ -66,10 +66,14 @@
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
#include "hbclass.ch"
|
||||
#include "common.ch"
|
||||
#include "hbgtwvg.ch"
|
||||
#include "wvtwin.ch"
|
||||
#include 'hbclass.ch'
|
||||
#include 'common.ch'
|
||||
#include 'inkey.ch'
|
||||
#include 'hbgtinfo.ch'
|
||||
|
||||
#include 'hbgtwvg.ch'
|
||||
#include 'wvtwin.ch'
|
||||
#include 'wvgparts.ch'
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
@@ -107,7 +111,6 @@ CLASS WvgActiveXControl FROM TOleAuto, WvgWindow
|
||||
DATA lSubStdEvents INIT .f.
|
||||
|
||||
DATA hEvents INIT hb_hash()
|
||||
DATA Id INIT 0
|
||||
DATA hContainer
|
||||
DATA hSink
|
||||
|
||||
@@ -143,7 +146,9 @@ METHOD New( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgActiv
|
||||
|
||||
::wvgWindow:init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
::style := WS_CHILD + WS_VISIBLE + WS_CLIPCHILDREN + WS_CLIPSIBLINGS
|
||||
::style := WS_CHILD + WS_VISIBLE + WS_CLIPCHILDREN + WS_CLIPSIBLINGS
|
||||
::objType := objTypeActiveX
|
||||
::className := 'WVGACTIVEX'
|
||||
|
||||
RETURN Self
|
||||
//----------------------------------------------------------------------//
|
||||
@@ -158,9 +163,6 @@ METHOD Create( oParent, oOwner, aPos, aSize, aPresParams, lVisible, cCLSID, cLic
|
||||
::CLSID := cCLSID
|
||||
::license := cLicense
|
||||
|
||||
::objType := objTypeActiveX
|
||||
::className := 'WVGACTIVEX'
|
||||
|
||||
::hObj := 0
|
||||
::hSink := 0
|
||||
|
||||
@@ -172,13 +174,15 @@ METHOD Create( oParent, oOwner, aPos, aSize, aPresParams, lVisible, cCLSID, cLic
|
||||
nRef++
|
||||
ENDIF
|
||||
|
||||
::hObj := HB_AX_AtlAxGetControl( "ATLAXWin", ::hContainer, ::CLSID, ::Id, ;
|
||||
::aPos[ 1 ], ::aPos[ 2 ], ::aSize[ 1 ], ::aSize[ 2 ], ::style, ::exStyle, @hx )
|
||||
::nID := ::oParent:GetControlId()
|
||||
|
||||
::hObj := HB_AX_AtlAxGetControl( "ATLAXWin", ::hContainer, ::CLSID, ::nID, ;
|
||||
::aPos[ 1 ], ::aPos[ 2 ], ::aSize[ 1 ], ::aSize[ 2 ], ::style, ::exStyle, @hx )
|
||||
if ::hObj == 0
|
||||
Return NIL
|
||||
endif
|
||||
|
||||
::oParent:addChild( SELF )
|
||||
::hWnd := hx
|
||||
|
||||
IF ::hObj <> 0 .AND. !Empty( ::hEvents )
|
||||
@@ -192,10 +196,11 @@ METHOD Create( oParent, oOwner, aPos, aSize, aPresParams, lVisible, cCLSID, cLic
|
||||
RETURN Self
|
||||
//----------------------------------------------------------------------//
|
||||
METHOD Destroy() CLASS WvgActiveXControl
|
||||
LOCAL bError := ErrorBlock()
|
||||
|
||||
BEGIN SEQUENCE
|
||||
|
||||
IF hb_IsNumeric( ::hObj ) .and. ::hObj <> 0
|
||||
//hb_ToOutDebug( '......................Release....................' )
|
||||
|
||||
IF Win_IsWindow( ::hWnd )
|
||||
Win_DestroyWindow( ::hWnd )
|
||||
@@ -209,11 +214,10 @@ METHOD Destroy() CLASS WvgActiveXControl
|
||||
IF --nRef == 0
|
||||
// HB_AX_AtlAxWinTerm()
|
||||
ENDIF
|
||||
//hb_ToOutDebug( '<< Release >>' )
|
||||
ENDIF
|
||||
|
||||
ENDSEQUENCE
|
||||
|
||||
ErrorBlock( bError )
|
||||
RETURN NIL
|
||||
//----------------------------------------------------------------------//
|
||||
METHOD adviseEvents() CLASS WvgActiveXControl
|
||||
|
||||
640
harbour/contrib/gtwvg/wvgcombo.prg
Normal file
640
harbour/contrib/gtwvg/wvgcombo.prg
Normal file
@@ -0,0 +1,640 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Harbour Project source code:
|
||||
* Source file for the Wvg*Classes
|
||||
*
|
||||
* Copyright 2008 Pritpal Bedi <pritpal@vouchcac.com>
|
||||
* http://www.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++ xbpTreeView compatible Class
|
||||
//
|
||||
// Pritpal Bedi <pritpal@vouchcac.com>
|
||||
// 26Nov2008
|
||||
//
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
#include 'hbclass.ch'
|
||||
#include 'common.ch'
|
||||
#include 'inkey.ch'
|
||||
#include 'hbgtinfo.ch'
|
||||
|
||||
#include 'hbgtwvg.ch'
|
||||
#include 'wvtwin.ch'
|
||||
#include 'wvgparts.ch'
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
CLASS WvgComboBox INHERIT WvgListBox // WvgSLE
|
||||
|
||||
|
||||
METHOD new()
|
||||
METHOD create()
|
||||
METHOD configure()
|
||||
METHOD destroy()
|
||||
|
||||
ENDCLASS
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgComboBox
|
||||
|
||||
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
::WvgActiveXControl:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
::style := WS_CHILD
|
||||
::className := 'BUTTON'
|
||||
::objType := objTypePushButton
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgComboBox
|
||||
|
||||
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
IF ::visible
|
||||
::style += WS_VISIBLE
|
||||
ENDIF
|
||||
|
||||
::oParent:AddChild( SELF )
|
||||
|
||||
::createControl()
|
||||
|
||||
IF ::visible
|
||||
::show()
|
||||
ENDIF
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgComboBox
|
||||
|
||||
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD destroy() CLASS WvgComboBox
|
||||
|
||||
RETURN NIL
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
// MSDN on ComboBox Control
|
||||
//----------------------------------------------------------------------//
|
||||
#if 0
|
||||
|
||||
Functions
|
||||
=========
|
||||
|
||||
DlgDirListComboBox
|
||||
Replaces the contents of a combo box with the names of the subdirectories and files
|
||||
in a specified directory. You can filter the list of names by specifying a set of file
|
||||
attributes. The list of names can include mapped drive letters.
|
||||
|
||||
DlgDirSelectComboBoxEx
|
||||
Retrieves the current selection from a combo box filled by using the
|
||||
DlgDirListComboBox function. The selection is interpreted as a drive letter, a file,
|
||||
or a directory name.
|
||||
|
||||
GetComboBoxInfo
|
||||
Retrieves information about the specified combo box.
|
||||
|
||||
|
||||
Macros
|
||||
======
|
||||
|
||||
ComboBox_AddItemData
|
||||
Adds item data to the list in a combo box at the specified location.
|
||||
You can use this macro or send the CB_ADDSTRING message explicitly.
|
||||
|
||||
ComboBox_AddString
|
||||
Adds a string to a list in a combo box. If the combo box does not have the CBS_SORT style,
|
||||
the string is added to the end of the list. Otherwise, the string is inserted into the
|
||||
list and the list is sorted. You can use this macro or send the CB_ADDSTRING message explicitly.
|
||||
|
||||
ComboBox_DeleteString
|
||||
Deletes the item at the specified location in a list in a combo box. You can use
|
||||
this macro or send the CB_DELETESTRING message explicitly.
|
||||
|
||||
ComboBox_Dir
|
||||
Adds names to the list displayed by a combo box. The macro adds the names of
|
||||
directories and files that match a specified string and set of file attributes.
|
||||
It can also add mapped drive letters to the list in a combo box. You can use this
|
||||
macro or send the CB_DIR message explicitly.
|
||||
|
||||
ComboBox_Enable
|
||||
Enables or disables a combo box control.
|
||||
|
||||
ComboBox_FindItemData
|
||||
Finds the first item in a combo box list that has the specified item data. You can use
|
||||
this macro or send the CB_FINDSTRING message explicitly.
|
||||
|
||||
ComboBox_FindString
|
||||
Finds the first string in a combo box list that begins with the specified string.
|
||||
You can use this macro or send the CB_FINDSTRING message explicitly.
|
||||
|
||||
ComboBox_FindStringExact
|
||||
Finds the first string in a combo box list that exactly matches the specified string,
|
||||
except that the search is not case sensitive. You can use this macro or send the
|
||||
CB_FINDSTRINGEXACT message explicitly.
|
||||
|
||||
ComboBox_GetCount
|
||||
Gets the number of items in the list box of a combo box. You can use this macro or
|
||||
send the CB_GETCOUNT message explicitly.
|
||||
|
||||
ComboBox_GetCueBannerText
|
||||
Gets the cue banner text displayed in the edit control of a combo box. Use this
|
||||
macro or send the CB_GETCUEBANNER message explicitly.
|
||||
|
||||
ComboBox_GetCurSel
|
||||
Gets the index of the currently selected item in a combo box. You can use this
|
||||
macro or send the CB_GETCURSEL message explicitly.
|
||||
|
||||
ComboBox_GetDroppedControlRect
|
||||
Retrieves the screen coordinates of a combo box in its dropped-down state.
|
||||
You can use this macro or send the CB_GETDROPPEDCONTROLRECT message explicitly.
|
||||
|
||||
ComboBox_GetExtendedUI
|
||||
Ascertains whether a combo box is using the default user interface (UI) or the extended UI.
|
||||
You can use this macro or send the CB_GETEXTENDEDUI message explicitly.
|
||||
|
||||
ComboBox_GetGetDroppedState
|
||||
Ascertains whether the drop list in a combo box control is visible.
|
||||
You can use this macro or send the CB_GETDROPPEDSTATE message explicitly.
|
||||
|
||||
ComboBox_GetItemData
|
||||
Gets the application-defined value associated with the specified list item in a combo box.
|
||||
You can use this macro or send the CB_GETITEMDATA message explicitly.
|
||||
|
||||
ComboBox_GetItemHeight
|
||||
Retrieves the height of list items in a combo box.
|
||||
You can use this macro or send the CB_GETITEMHEIGHT message explicitly.
|
||||
|
||||
ComboBox_GetLBText
|
||||
Gets a string from a list in a combo box.
|
||||
You can use this macro or send the CB_GETLBTEXT message explicitly.
|
||||
|
||||
ComboBox_GetLBTextLen
|
||||
Gets the length of a string in the list in a combo box.
|
||||
You can use this macro or send the CB_GETLBTEXTLEN message explicitly.
|
||||
|
||||
ComboBox_GetMinVisible
|
||||
Gets the minimum number of visible items in the drop-down list of a combo box.
|
||||
|
||||
ComboBox_GetText
|
||||
Retrieves the text from a combo box control.
|
||||
|
||||
ComboBox_GetTextLength
|
||||
Gets the number of characters in the text of a combo box.
|
||||
|
||||
ComboBox_InsertItemData
|
||||
Inserts item data in a list in a combo box at the specified location.
|
||||
You can use this macro or send the CB_INSERTSTRING message explicitly.
|
||||
|
||||
ComboBox_InsertString
|
||||
Adds a string to a list in a combo box at the specified location.
|
||||
You can use this macro or send the CB_INSERTSTRING message explicitly.
|
||||
|
||||
ComboBox_LimitText
|
||||
Limits the length of the text the user may type into the edit control of a combo box.
|
||||
You can use this macro or send the CB_LIMITTEXT message explicitly.
|
||||
|
||||
ComboBox_ResetContent
|
||||
Removes all items from the list box and edit control of a combo box.
|
||||
You can use this macro or send the CB_RESETCONTENT message explicitly.
|
||||
|
||||
ComboBox_SelectItemData
|
||||
Searches a list in a combo box for an item that has the specified item data.
|
||||
If a matching item is found, the item is selected. You can use this macro or send the
|
||||
CB_SELECTSTRING message explicitly.
|
||||
|
||||
ComboBox_SelectString
|
||||
Searches a list in a combo box for an item that begins with the characters in a specified string.
|
||||
If a matching item is found, the item is selected. You can use this macro or send the
|
||||
CB_SELECTSTRING message explicitly.
|
||||
|
||||
ComboBox_SetCueBannerText
|
||||
Sets the cue banner text that is displayed for the edit control of a combo box.
|
||||
|
||||
ComboBox_SetCurSel
|
||||
Sets the currently selected item in a combo box. You can use this macro or send the
|
||||
CB_SETCURSEL message explicitly.
|
||||
|
||||
ComboBox_SetExtendedUI
|
||||
Selects either the default user interface (UI) or the extended UI for a combo box that has the
|
||||
CBS_DROPDOWN or CBS_DROPDOWNLIST style. You can use this macro or send the
|
||||
CB_SETEXTENDEDUI message explicitly.
|
||||
|
||||
ComboBox_SetItemData
|
||||
Sets the application-defined value associated with the specified list item in a combo box.
|
||||
You can use this macro or send the CB_SETITEMDATA message explicitly.
|
||||
|
||||
ComboBox_SetItemHeight
|
||||
Sets the height of list items or the selection field in a combo box.
|
||||
You can use this macro or send the CB_SETITEMHEIGHT message explicitly.
|
||||
|
||||
ComboBox_SetMinVisible
|
||||
Sets the minimum number of visible items in the drop-down list of a combo box.
|
||||
|
||||
SetText
|
||||
Sets the text of a combo box.
|
||||
|
||||
ComboBox_ShowDropdown
|
||||
Shows or hides the list in a combo box.
|
||||
You can use this macro or send the CB_RESETCONTENT message explicitly.
|
||||
|
||||
ListBox_AddItemData
|
||||
Adds item data to the list box at the specified location.
|
||||
You can use this macro or send the LB_ADDSTRING message explicitly.
|
||||
|
||||
|
||||
|
||||
Messages
|
||||
========
|
||||
|
||||
CB_ADDSTRING
|
||||
Adds a string to the list box of a combo box. If the combo box does not have the CBS_SORT style,
|
||||
the string is added to the end of the list. Otherwise, the string is inserted into the list,
|
||||
and the list is sorted.
|
||||
|
||||
CB_DELETESTRING
|
||||
Deletes a string in the list box of a combo box.
|
||||
|
||||
CB_DIR
|
||||
Adds names to the list displayed by the combo box. The message adds the names of directories and files that match a specified string and set of file attributes. CB_DIR can also add mapped drive letters to the list.
|
||||
|
||||
CB_FINDSTRING
|
||||
Searches the list box of a combo box for an item beginning with the characters in a specified string.
|
||||
|
||||
CB_FINDSTRINGEXACT
|
||||
Finds the first list box string in a combo box that matches the string specified in the lParam parameter.
|
||||
|
||||
CB_GETCOMBOBOXINFO
|
||||
Gets information about the specified combo box.
|
||||
|
||||
CB_GETCOUNT
|
||||
Gets the number of items in the list box of a combo box.
|
||||
|
||||
CB_GETCUEBANNER
|
||||
Gets the cue banner text displayed in the edit control of a combo box.
|
||||
Send this message explicitly or by using the ComboBox_GetCueBannerText macro.
|
||||
|
||||
CB_GETCURSEL
|
||||
An application sends a CB_GETCURSEL message to retrieve the index of the currently selected item,
|
||||
if any, in the list box of a combo box.
|
||||
|
||||
CB_GETDROPPEDCONTROLRECT
|
||||
An application sends a CB_GETDROPPEDCONTROLRECT message to retrieve the screen coordinates of a
|
||||
combo box in its dropped-down state.
|
||||
|
||||
CB_GETDROPPEDSTATE
|
||||
Determines whether the list box of a combo box is dropped down.
|
||||
|
||||
CB_GETDROPPEDWIDTH
|
||||
Gets the minimum allowable width, in pixels, of the list box of a combo box with the
|
||||
CBS_DROPDOWN or CBS_DROPDOWNLIST style.
|
||||
|
||||
CB_GETEDITSEL
|
||||
Gets the starting and ending character positions of the current selection in the edit
|
||||
control of a combo box.
|
||||
|
||||
CB_GETEXTENDEDUI
|
||||
Determines whether a combo box has the default user interface or the extended user interface.
|
||||
|
||||
CB_GETHORIZONTALEXTENT
|
||||
Gets the width, in pixels, that the list box can be scrolled horizontally (the scrollable width).
|
||||
This is applicable only if the list box has a horizontal scroll bar.
|
||||
|
||||
CB_GETITEMDATA
|
||||
An application sends a CB_GETITEMDATA message to a combo box to retrieve the
|
||||
application-supplied value associated with the specified item in the combo box.
|
||||
|
||||
CB_GETITEMHEIGHT
|
||||
Determines the height of list items or the selection field in a combo box.
|
||||
|
||||
CB_GETLBTEXT
|
||||
Gets a string from the list of a combo box.
|
||||
|
||||
CB_GETLBTEXTLEN
|
||||
Gets the length, in characters, of a string in the list of a combo box.
|
||||
|
||||
CB_GETLOCALE
|
||||
Gets the current locale of the combo box. The locale is used to determine the
|
||||
correct sorting order of displayed text for combo boxes with the CBS_SORT style and
|
||||
text added by using the CB_ADDSTRING message.
|
||||
|
||||
CB_GETMINVISIBLE
|
||||
Gets the minimum number of visible items in the drop-down list of a combo box.
|
||||
|
||||
CB_GETTOPINDEX
|
||||
An application sends the CB_GETTOPINDEX message to retrieve the zero-based index of
|
||||
the first visible item in the list box portion of a combo box. Initially, the item with
|
||||
index 0 is at the top of the list box, but if the list box contents have been scrolled,
|
||||
another item may be at the top.
|
||||
|
||||
CB_INITSTORAGE
|
||||
An application sends the CB_INITSTORAGE message before adding a large number of items
|
||||
to the list box portion of a combo box. This message allocates memory for storing list box items.
|
||||
|
||||
CB_INSERTSTRING
|
||||
Inserts a string or item data into the list of a combo box. Unlike the CB_ADDSTRING message,
|
||||
the CB_INSERTSTRING message does not cause a list with the CBS_SORT style to be sorted.
|
||||
|
||||
CB_LIMITTEXT
|
||||
Limits the length of the text the user may type into the edit control of a combo box.
|
||||
|
||||
CB_RESETCONTENT
|
||||
Removes all items from the list box and edit control of a combo box.
|
||||
|
||||
CB_SELECTSTRING
|
||||
Searches the list of a combo box for an item that begins with the characters in a specified string.
|
||||
If a matching item is found, it is selected and copied to the edit control.
|
||||
|
||||
CB_SETCUEBANNER
|
||||
Sets the cue banner text that is displayed for the edit control of a combo box.
|
||||
|
||||
CB_SETCURSEL
|
||||
An application sends a CB_SETCURSEL message to select a string in the list of a combo box.
|
||||
If necessary, the list scrolls the string into view. The text in the edit control of the
|
||||
combo box changes to reflect the new selection, and any previous selection in the list is removed.
|
||||
|
||||
CB_SETDROPPEDWIDTH
|
||||
An application sends the CB_SETDROPPEDWIDTH message to set the maximum allowable width,
|
||||
in pixels, of the list box of a combo box with the CBS_DROPDOWN or CBS_DROPDOWNLIST style.
|
||||
|
||||
CB_SETEDITSEL
|
||||
An application sends a CB_SETEDITSEL message to select characters in the edit control of a combo box.
|
||||
|
||||
CB_SETEXTENDEDUI
|
||||
An application sends a CB_SETEXTENDEDUI message to select either the default user
|
||||
interface (UI) or the extended UI for a combo box that has the CBS_DROPDOWN or CBS_DROPDOWNLIST style.
|
||||
|
||||
CB_SETHORIZONTALEXTENT
|
||||
An application sends the CB_SETHORIZONTALEXTENT message to set the width, in pixels,
|
||||
by which a list box can be scrolled horizontally (the scrollable width). If the width of
|
||||
the list box is smaller than this value, the horizontal scroll bar horizontally scrolls items
|
||||
in the list box. If the width of the list box is equal to or greater than this value, the horizontal
|
||||
scroll bar is hidden or, if the combo box has the CBS_DISABLENOSCROLL style, disabled.
|
||||
|
||||
CB_SETITEMDATA
|
||||
An application sends a CB_SETITEMDATA message to set the value associated with the specified
|
||||
item in a combo box.
|
||||
|
||||
CB_SETITEMHEIGHT
|
||||
An application sends a CB_SETITEMHEIGHT message to set the height of list items or the
|
||||
selection field in a combo box.
|
||||
|
||||
CB_SETLOCALE
|
||||
An application sends a CB_SETLOCALE message to set the current locale of the combo box.
|
||||
If the combo box has the CBS_SORT style and strings are added using CB_ADDSTRING, the locale
|
||||
of a combo box affects how list items are sorted.
|
||||
|
||||
CB_SETMINVISIBLE
|
||||
An application sends a CB_SETMINVISIBLE message to set the minimum number of visible items
|
||||
in the drop-down list of a combo box.
|
||||
|
||||
CB_SETTOPINDEX
|
||||
An application sends the CB_SETTOPINDEX message to ensure that a particular item is visible
|
||||
in the list box of a combo box. The system scrolls the list box contents so that either the
|
||||
specified item appears at the top of the list box or the maximum scroll range has been reached.
|
||||
|
||||
CB_SHOWDROPDOWN
|
||||
An application sends a CB_SHOWDROPDOWN message to show or hide the list box of a combo box
|
||||
that has the CBS_DROPDOWN or CBS_DROPDOWNLIST style.
|
||||
|
||||
|
||||
|
||||
Notifications
|
||||
=============
|
||||
|
||||
CBN_CLOSEUP
|
||||
The CBN_CLOSEUP notification message is sent when the list box of a combo box has been closed.
|
||||
The parent window of the combo box receives this notification message through the WM_COMMAND message.
|
||||
|
||||
CBN_DBLCLK
|
||||
The CBN_DBLCLK notification message is sent when the user double-clicks a string in the list
|
||||
box of a combo box. The parent window of the combo box receives this notification message
|
||||
through the WM_COMMAND message.
|
||||
|
||||
CBN_DROPDOWN
|
||||
The CBN_DROPDOWN notification message is sent when the list box of a combo box is about to
|
||||
be made visible. The parent window of the combo box receives this notification message
|
||||
through the WM_COMMAND message.
|
||||
|
||||
CBN_EDITCHANGE
|
||||
The CBN_EDITCHANGE notification message is sent after the user has taken an action that may
|
||||
have altered the text in the edit control portion of a combo box. Unlike the
|
||||
CBN_EDITUPDATE notification message, this notification message is sent after the system
|
||||
updates the screen. The parent window of the combo box receives this notification message
|
||||
through the WM_COMMAND message.
|
||||
|
||||
CBN_EDITUPDATE
|
||||
The CBN_EDITUPDATE notification message is sent when the edit control portion of a combo
|
||||
box is about to display altered text. This notification message is sent after the control
|
||||
has formatted the text, but before it displays the text. The parent window of the combo box
|
||||
receives this notification message through the WM_COMMAND message.
|
||||
|
||||
CBN_ERRSPACE
|
||||
The CBN_ERRSPACE notification message is sent when a combo box cannot allocate enough
|
||||
memory to meet a specific request. The parent window of the combo box receives this
|
||||
notification message through the WM_COMMAND message.
|
||||
|
||||
CBN_KILLFOCUS
|
||||
The CBN_KILLFOCUS notification message is sent when a combo box loses the keyboard focus.
|
||||
The parent window of the combo box receives this notification message through the WM_COMMAND message.
|
||||
|
||||
CBN_SELCHANGE
|
||||
The CBN_SELCHANGE notification message is sent when the user changes the current selection
|
||||
in the list box of a combo box. The user can change the selection by clicking in the list
|
||||
box or by using the arrow keys. The parent window of the combo box receives this
|
||||
notification in the form of a WM_COMMAND message with CBN_SELCHANGE in the high-order
|
||||
word of the wParam parameter.
|
||||
|
||||
CBN_SELENDCANCEL
|
||||
The CBN_SELENDCANCEL notification message is sent when the user selects an item,
|
||||
but then selects another control or closes the dialog box. It indicates the user
|
||||
s initial selection is to be ignored. The parent window of the combo box receives
|
||||
this notification message through the WM_COMMAND message.
|
||||
|
||||
CBN_SELENDOK
|
||||
The CBN_SELENDOK notification message is sent when the user selects a list item,
|
||||
or selects an item and then closes the list. It indicates that the user s selection
|
||||
is to be processed. The parent window of the combo box receives this notification
|
||||
message through the WM_COMMAND message.
|
||||
|
||||
CBN_SETFOCUS
|
||||
The CBN_SETFOCUS notification message is sent when a combo box receives the keyboard focus.
|
||||
The parent window of the combo box receives this notification message through the WM_COMMAND message.
|
||||
|
||||
WM_COMPAREITEM
|
||||
The system sends the WM_COMPAREITEM message to determine the relative position of a new
|
||||
item in the sorted list of an owner-drawn combo box or list box. Whenever the application
|
||||
adds a new item, the system sends this message to the owner of a combo box or list box created
|
||||
with the CBS_SORT or LBS_SORT style.
|
||||
|
||||
WM_DRAWITEM
|
||||
|
||||
The WM_DRAWITEM message is sent to the parent window of an owner-drawn button, combo box,
|
||||
list box, or menu when a visual aspect of the button, combo box, list box, or menu has changed.
|
||||
A window receives this message through its WindowProc function.
|
||||
|
||||
WM_MEASUREITEM
|
||||
The WM_MEASUREITEM message is sent to the owner window of a combo box, list box,
|
||||
list view control, or menu item when the control or menu is created.
|
||||
A window receives this message through its WindowProc function.
|
||||
|
||||
Structures
|
||||
==========
|
||||
|
||||
COMBOBOXINFO
|
||||
Contains combo box status information.
|
||||
|
||||
COMPAREITEMSTRUCT
|
||||
|
||||
Supplies the identifiers and application-supplied data for two items in a sorted,
|
||||
owner-drawn list box or combo box.
|
||||
|
||||
Whenever an application adds a new item to an owner-drawn list box or combo box
|
||||
created with the CBS_SORT or LBS_SORT style, the system sends the owner a
|
||||
WM_COMPAREITEM message. The lParam parameter of the message contains a long pointer
|
||||
to a COMPAREITEMSTRUCT structure. Upon receiving the message, the owner compares
|
||||
the two items and returns a value indicating which item sorts before the other.
|
||||
|
||||
DRAWITEMSTRUCT
|
||||
Provides necessary information the owner window to determine how to paint an owner-drawn
|
||||
control or menu item. The owner window of the owner-drawn control or menu item receives a
|
||||
pointer to this structure as the lParam parameter of the WM_DRAWITEM message.
|
||||
|
||||
MEASUREITEMSTRUCT
|
||||
Informs the system of the dimensions of an owner-drawn control or menu item.
|
||||
This allows the system to process user interaction with the control correctly.
|
||||
|
||||
|
||||
|
||||
Combo Box Styles
|
||||
To create a combo box using the CreateWindow or CreateWindowEx function, specify
|
||||
the COMBOBOX class, appropriate window style constants, and a combination of the
|
||||
following combo box styles.
|
||||
|
||||
Constants
|
||||
|
||||
CBS_AUTOHSCROLL
|
||||
Automatically scrolls the text in an edit control to the right when the user types a
|
||||
character at the end of the line. If this style is not set, only text that fits within
|
||||
the rectangular boundary is allowed.
|
||||
|
||||
CBS_DISABLENOSCROLL
|
||||
Shows a disabled vertical scroll bar in the list box when the box does not contain
|
||||
enough items to scroll. Without this style, the scroll bar is hidden when the list box
|
||||
does not contain enough items.
|
||||
|
||||
CBS_DROPDOWN
|
||||
Similar to CBS_SIMPLE, except that the list box is not displayed unless the user selects
|
||||
an icon next to the edit control.
|
||||
|
||||
CBS_DROPDOWNLIST
|
||||
Similar to CBS_DROPDOWN, except that the edit control is replaced by a static text
|
||||
item that displays the current selection in the list box.
|
||||
|
||||
CBS_HASSTRINGS
|
||||
Specifies that an owner-drawn combo box contains items consisting of strings.
|
||||
The combo box maintains the memory and address for the strings so the application
|
||||
can use the CB_GETLBTEXT message to retrieve the text for a particular item.
|
||||
For accessibility issues, see Exposing Owner-Drawn Combo Box Items
|
||||
|
||||
|
||||
CBS_LOWERCASE
|
||||
Converts to lowercase all text in both the selection field and the list.
|
||||
|
||||
CBS_NOINTEGRALHEIGHT
|
||||
Specifies that the size of the combo box is exactly the size specified by the
|
||||
application when it created the combo box. Normally, the system sizes a combo box
|
||||
so that it does not display partial items.
|
||||
|
||||
CBS_OEMCONVERT
|
||||
Converts text entered in the combo box edit control from the Windows character
|
||||
set to the OEM character set and then back to the Windows character set.
|
||||
This ensures proper character conversion when the application calls the
|
||||
CharToOem function to convert a Windows string in the combo box to OEM characters.
|
||||
This style is most useful for combo boxes that contain file names and applies only
|
||||
to combo boxes created with the CBS_SIMPLE or CBS_DROPDOWN style.
|
||||
|
||||
CBS_OWNERDRAWFIXED
|
||||
Specifies that the owner of the list box is responsible for drawing its contents
|
||||
and that the items in the list box are all the same height. The owner window
|
||||
receives a WM_MEASUREITEM message when the combo box is created and a WM_DRAWITEM
|
||||
message when a visual aspect of the combo box has changed.
|
||||
|
||||
CBS_OWNERDRAWVARIABLE
|
||||
Specifies that the owner of the list box is responsible for drawing its contents
|
||||
and that the items in the list box are variable in height. The owner window receives
|
||||
a WM_MEASUREITEM message for each item in the combo box when you create the combo box
|
||||
and a WM_DRAWITEM message when a visual aspect of the combo box has changed.
|
||||
|
||||
CBS_SIMPLE
|
||||
Displays the list box at all times. The current selection in the list box is displayed
|
||||
in the edit control.
|
||||
|
||||
CBS_SORT
|
||||
Automatically sorts strings added to the list box.
|
||||
|
||||
CBS_UPPERCASE
|
||||
Converts to uppercase all text in both the selection field and the list.
|
||||
|
||||
#endif
|
||||
//----------------------------------------------------------------------//
|
||||
@@ -67,10 +67,12 @@
|
||||
|
||||
#include 'hbclass.ch'
|
||||
#include 'common.ch'
|
||||
#include 'inkey.ch'
|
||||
#include 'hbgtinfo.ch'
|
||||
|
||||
#include 'hbgtwvg.ch'
|
||||
#include 'wvtwin.ch'
|
||||
#include 'inkey.ch'
|
||||
#include 'wvgparts.ch'
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
@@ -247,7 +249,6 @@ EXPORTED:
|
||||
METHOD setFocus()
|
||||
METHOD sendMessage()
|
||||
|
||||
PROTECTED:
|
||||
DATA hWnd
|
||||
DATA aPos INIT { 0,0 }
|
||||
DATA aSize INIT { 24,79 }
|
||||
@@ -256,6 +257,11 @@ PROTECTED:
|
||||
DATA lHasInputFocus INIT .F.
|
||||
DATA nFrameState INIT 0 // normal
|
||||
|
||||
DATA nID INIT 0
|
||||
DATA nControlID INIT 200
|
||||
METHOD createControl()
|
||||
METHOD getControlID() INLINE ++::nControlID
|
||||
|
||||
ENDCLASS
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
@@ -367,6 +373,12 @@ METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS Wv
|
||||
DEFAULT aPresParams TO ::aPresParams
|
||||
DEFAULT lVisible TO ::visible
|
||||
|
||||
::oParent := oParent
|
||||
::oOwner := oOwner
|
||||
::aPos := aPos
|
||||
::aSize := aSize
|
||||
::aPresParams := aPresParams
|
||||
::visible := lVisible
|
||||
|
||||
RETURN Self
|
||||
|
||||
@@ -378,6 +390,10 @@ METHOD destroy() CLASS WvgCrt
|
||||
::oMenu:destroy()
|
||||
ENDIF
|
||||
|
||||
IF Len( ::aChildren ) > 0
|
||||
aeval( ::aChildren, {|o| o:destroy() } )
|
||||
ENDIF
|
||||
|
||||
if ::lModal
|
||||
::pGT := NIL
|
||||
hb_gtSelect( ::pGTp )
|
||||
@@ -1129,3 +1145,57 @@ METHOD sendMessage( nMessage, nlParam, nwParam ) CLASS WvgCrt
|
||||
|
||||
RETURN Self
|
||||
//----------------------------------------------------------------------//
|
||||
METHOD createControl() CLASS WvgCrt
|
||||
LOCAL hWnd
|
||||
|
||||
DO CASE
|
||||
|
||||
CASE ::objType == objTypeToolBar
|
||||
|
||||
::nID := ::oParent:GetControlId()
|
||||
|
||||
#if 1
|
||||
hWnd := Win_CreateToolBarEx( ::oParent:hWnd,; // hWnd - window handle hosting the toolbar
|
||||
::style,; // ws - style of the toolbar
|
||||
::nID,; // wID - control identifier supplied with WM_COMMAND
|
||||
0,; // nBitmaps - number of button images
|
||||
NIL,; // hBMInst - mudule instance which hosts the bitmap resource
|
||||
NIL,; // wBPID - resource identifier of the bitmap
|
||||
NIL,; // lpButton - TBUTTON structure
|
||||
0,; // number of buttons
|
||||
::buttonWidth,; //
|
||||
::buttonHeight,;
|
||||
::imageWidth,;
|
||||
::imageHeight )
|
||||
//Win_SendMessage( hWnd, TB_AUTOSIZE, 0, 0 )
|
||||
#else
|
||||
hWnd := Win_CreateWindowEx( ::exStyle, ;
|
||||
TOOLBARCLASSNAME, ;
|
||||
NIL, ; // window name
|
||||
::style, ;
|
||||
::aPos[ 1 ], ::aPos[ 2 ],;
|
||||
::aSize[ 1 ], ::aSize[ 2 ],;
|
||||
::oParent:hWnd,;
|
||||
NIL,; // hMenu
|
||||
NIL,; // hInstance
|
||||
NIL ) // lParam
|
||||
#endif
|
||||
OTHERWISE
|
||||
hWnd := Win_CreateWindowEx( ::exStyle, ;
|
||||
::className, ;
|
||||
"", ; // window name
|
||||
::style, ;
|
||||
::aPos[ 1 ], ::aPos[ 2 ],;
|
||||
::aSize[ 1 ], ::aSize[ 2 ],;
|
||||
::oParent:hWnd,;
|
||||
NIL,; // hMenu
|
||||
NIL,; // hInstance
|
||||
NIL ) // lParam
|
||||
ENDCASE
|
||||
|
||||
IF ( hWnd <> 0 )
|
||||
::hWnd := hWnd
|
||||
ENDIF
|
||||
|
||||
RETURN Self
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
@@ -67,10 +67,12 @@
|
||||
|
||||
#include 'hbclass.ch'
|
||||
#include 'common.ch'
|
||||
#include 'inkey.ch'
|
||||
#include 'hbgtinfo.ch'
|
||||
|
||||
#include 'hbgtwvg.ch'
|
||||
#include 'wvtwin.ch'
|
||||
#include 'inkey.ch'
|
||||
#include 'wvgparts.ch'
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
CLASS WvgDialog FROM WvgWindow
|
||||
@@ -157,17 +159,23 @@ METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS Wv
|
||||
RETURN Self
|
||||
//----------------------------------------------------------------------//
|
||||
METHOD destroy() CLASS WvgDialog
|
||||
LOCAL bError := ErrorBlock()
|
||||
|
||||
//BEGIN SEQUENCE
|
||||
|
||||
IF hb_isObject( ::oMenu )
|
||||
::oMenu:destroy()
|
||||
ENDIF
|
||||
|
||||
IF Len( ::aChildren ) > 0
|
||||
aeval( ::aChildren, {|o| o:destroy() } )
|
||||
aeval( ::aChildren, {|o| hb_toOutDebug( o:className ), o:destroy() } )
|
||||
ENDIF
|
||||
|
||||
::pGT := NIL
|
||||
::pGTp := NIL
|
||||
|
||||
//END SEQUENCE
|
||||
|
||||
ErrorBlock( bError )
|
||||
RETURN Self
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
@@ -126,7 +126,7 @@ static void hb_gt_wvt_RegisterClass( HINSTANCE hInstance )
|
||||
wndclass.hInstance = hInstance;
|
||||
/* wndclass.hIcon = NULL; */
|
||||
wndclass.hCursor = LoadCursor( NULL, IDC_ARROW );
|
||||
wndclass.hbrBackground = NULL; /* ( HBRUSH ) ( COLOR_BTNFACE + 1 ) */;
|
||||
wndclass.hbrBackground = ( HBRUSH ) ( COLOR_BTNFACE + 1 );
|
||||
/* wndclass.lpszMenuName = NULL; */
|
||||
wndclass.lpszClassName = s_szClassName;
|
||||
|
||||
@@ -346,14 +346,14 @@ static void hb_gt_wvt_FireMenuEvent( PHB_GTWVT pWVT, int iMode, int menuIndex )
|
||||
static void hb_gt_wvt_AddCharToInputQueue( PHB_GTWVT pWVT, int iKey )
|
||||
{
|
||||
int iPos = pWVT->keyPointerIn;
|
||||
|
||||
#if 1
|
||||
if( iKey == K_MOUSEMOVE || iKey == K_NCMOUSEMOVE )
|
||||
{
|
||||
/* Clipper strips repeated mouse movemnt - let's do the same */
|
||||
if( pWVT->keyLast == iKey && pWVT->keyPointerIn != pWVT->keyPointerOut )
|
||||
return;
|
||||
}
|
||||
|
||||
#endif
|
||||
/*
|
||||
* When the buffer is full new event overwrite the last one
|
||||
* in the buffer - it's Clipper behavior, [druzus]
|
||||
@@ -363,7 +363,7 @@ static void hb_gt_wvt_AddCharToInputQueue( PHB_GTWVT pWVT, int iKey )
|
||||
iPos = 0;
|
||||
if( iPos != pWVT->keyPointerOut )
|
||||
pWVT->keyPointerIn = iPos;
|
||||
|
||||
#if 0
|
||||
/* Fire event to be trapped by the application */
|
||||
{
|
||||
PHB_ITEM pEvParams = hb_itemNew( NULL );
|
||||
@@ -371,6 +371,7 @@ static void hb_gt_wvt_AddCharToInputQueue( PHB_GTWVT pWVT, int iKey )
|
||||
hb_gt_wvt_FireEvent( pWVT, HB_GTE_KEYBOARD, pEvParams );
|
||||
hb_itemRelease( pEvParams );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static BOOL hb_gt_wvt_GetCharFromInputQueue( PHB_GTWVT pWVT, int * iKey )
|
||||
@@ -440,7 +441,7 @@ static int hb_gt_wvt_SizeChanged( PHB_GTWVT pWVT )
|
||||
hb_arraySetNI( pEvParams, 3, rc.right - rc.left );
|
||||
hb_arraySetNI( pEvParams, 4, rc.bottom - rc.top );
|
||||
|
||||
hb_gt_wvt_AddCharToInputQueue( pWVT, HB_K_RESIZE );
|
||||
//hb_gt_wvt_AddCharToInputQueue( pWVT, HB_K_RESIZE );
|
||||
|
||||
hb_gt_wvt_FireEvent( pWVT, HB_GTE_RESIZED, pEvParams );
|
||||
|
||||
@@ -934,7 +935,7 @@ static BOOL hb_gt_wvt_KeyEvent( PHB_GTWVT pWVT, UINT message, WPARAM wParam, LPA
|
||||
static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
|
||||
{
|
||||
PHB_GTWVT pWVT = hb_gt_wvt_Find( hWnd );
|
||||
|
||||
//hb_ToOutDebug( "h=%i m=%i w=%i l=%i", hWnd, message, wParam, lParam );
|
||||
if( pWVT ) switch( message )
|
||||
{
|
||||
case WM_PAINT:
|
||||
@@ -1009,7 +1010,8 @@ static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wPara
|
||||
case WM_SIZING:
|
||||
case WM_SIZE:
|
||||
{
|
||||
return( hb_gt_wvt_SizeChanged( pWVT ) );
|
||||
hb_gt_wvt_SizeChanged( pWVT );
|
||||
return DefWindowProc( hWnd, message, wParam, lParam );
|
||||
}
|
||||
case WM_SYSCOMMAND:
|
||||
{
|
||||
@@ -1047,9 +1049,30 @@ static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wPara
|
||||
}
|
||||
case WM_COMMAND:
|
||||
{
|
||||
if( HIWORD( wParam ) == 0 )
|
||||
if( ( int ) lParam == 0 )
|
||||
{
|
||||
hb_gt_wvt_FireMenuEvent( pWVT, 0, ( int ) LOWORD( wParam ) );
|
||||
// Menu command
|
||||
if( HIWORD( wParam ) == 0 )
|
||||
{
|
||||
hb_gt_wvt_FireMenuEvent( pWVT, 0, ( int ) LOWORD( wParam ) );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PHB_ITEM pEvParams = hb_itemNew( NULL );
|
||||
int iLo, iHi;
|
||||
|
||||
iLo = LOWORD( wParam );
|
||||
iHi = HIWORD( wParam );
|
||||
hb_ToOutDebug( "%i %i %i", iHi, iLo, lParam );
|
||||
hb_arrayNew( pEvParams, 3 );
|
||||
hb_arraySetNI( pEvParams, 1, iHi ); // Notification Code
|
||||
hb_arraySetNI( pEvParams, 2, iLo ); // Control identifier
|
||||
hb_arraySetNInt( pEvParams, 3, ( HB_PTRDIFF ) ( HWND ) lParam ); // Controls hWnd
|
||||
|
||||
hb_gt_wvt_FireEvent( pWVT, HB_GTE_COMMAND, pEvParams );
|
||||
|
||||
hb_itemRelease( pEvParams );
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -1097,7 +1120,7 @@ static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wPara
|
||||
PHB_ITEM pEvParams = hb_itemNew( NULL );
|
||||
LPNMMOUSE nmm = ( LPNMMOUSE ) lParam;
|
||||
NMHDR nmh = nmm->hdr;
|
||||
|
||||
//hb_ToOutDebug( "WM_NOTIFY" );
|
||||
if( nmh.code == NM_CLICK )
|
||||
{
|
||||
hb_arrayNew( pEvParams, 5 );
|
||||
@@ -1305,7 +1328,7 @@ static int hb_gt_wvt_ReadKey( PHB_GT pGT, int iEventMask )
|
||||
hb_gt_wvt_ProcessMessages( pWVT );
|
||||
|
||||
fKey = hb_gt_wvt_GetCharFromInputQueue( pWVT, &c );
|
||||
|
||||
//hb_ToOutDebug( "fKey = %i ", fKey );
|
||||
return fKey ? c : 0;
|
||||
}
|
||||
|
||||
|
||||
479
harbour/contrib/gtwvg/wvglistb.prg
Normal file
479
harbour/contrib/gtwvg/wvglistb.prg
Normal file
@@ -0,0 +1,479 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Harbour Project source code:
|
||||
* Source file for the Wvg*Classes
|
||||
*
|
||||
* Copyright 2008 Pritpal Bedi <pritpal@vouchcac.com>
|
||||
* http://www.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++ xbpTreeView compatible Class
|
||||
//
|
||||
// Pritpal Bedi <pritpal@vouchcac.com>
|
||||
// 26Nov2008
|
||||
//
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
#include 'hbclass.ch'
|
||||
#include 'common.ch'
|
||||
#include 'inkey.ch'
|
||||
#include 'hbgtinfo.ch'
|
||||
|
||||
#include 'hbgtwvg.ch'
|
||||
#include 'wvtwin.ch'
|
||||
#include 'wvgparts.ch'
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
CLASS WvgListBox INHERIT WvgWindow
|
||||
|
||||
|
||||
METHOD new()
|
||||
METHOD create()
|
||||
METHOD configure()
|
||||
METHOD destroy()
|
||||
|
||||
ENDCLASS
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgListBox
|
||||
|
||||
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
::WvgActiveXControl:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
::style := WS_CHILD
|
||||
::className := 'BUTTON'
|
||||
::objType := objTypePushButton
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgListBox
|
||||
|
||||
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
IF ::visible
|
||||
::style += WS_VISIBLE
|
||||
ENDIF
|
||||
|
||||
::oParent:AddChild( SELF )
|
||||
|
||||
::createControl()
|
||||
|
||||
IF ::visible
|
||||
::show()
|
||||
ENDIF
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgListBox
|
||||
|
||||
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD destroy() CLASS WvgListBox
|
||||
|
||||
RETURN NIL
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
// MSDN on ListBox Control
|
||||
//----------------------------------------------------------------------//
|
||||
#if 0
|
||||
|
||||
Functions
|
||||
=========
|
||||
|
||||
DlgDirList
|
||||
Replaces the contents of a list box with the names of the subdirectories and files in a
|
||||
specified directory. You can filter the list of names by specifying a set of file attributes.
|
||||
The list can optionally include mapped drives.
|
||||
|
||||
DlgDirSelectEx
|
||||
Retrieves the current selection from a single-selection list box. It assumes that the
|
||||
list box has been filled by the DlgDirList function and that the selection is a drive letter,
|
||||
filename, or directory name.
|
||||
|
||||
GetListBoxInfo
|
||||
Retrieves information about the specified list box.
|
||||
|
||||
|
||||
|
||||
Messages
|
||||
========
|
||||
|
||||
LB_ADDFILE
|
||||
Adds the specified filename to a list box that contains a directory listing.
|
||||
|
||||
LB_ADDSTRING
|
||||
Adds a string to a list box. If the list box does not have the LBS_SORT style,
|
||||
the string is added to the end of the list. Otherwise, the string is inserted into the list
|
||||
and the list is sorted.
|
||||
|
||||
LB_DELETESTRING
|
||||
Deletes a string in a list box.
|
||||
|
||||
LB_DIR
|
||||
Adds names to the list displayed by a list box. The message adds the names of directories
|
||||
and files that match a specified string and set of file attributes. LB_DIR can also add
|
||||
mapped drive letters to the list box.
|
||||
|
||||
LB_FINDSTRING
|
||||
Finds the first string in a list box that begins with the specified string.
|
||||
|
||||
LB_FINDSTRINGEXACT
|
||||
Finds the first list box string that exactly matches the specified string, except that
|
||||
the search is not case sensitive.
|
||||
|
||||
LB_GETANCHORINDEX
|
||||
Gets the index of the anchor item
|
||||
|
||||
LB_GETCARETINDEX
|
||||
Retrieves the index of the item that has the focus rectangle in a multiple-selection list box.
|
||||
The item may or may not be selected.
|
||||
|
||||
LB_GETCOUNT
|
||||
Gets the number of items in a list box.
|
||||
|
||||
LB_GETCURSEL
|
||||
Gets the index of the currently selected item, if any, in a single-selection list box.
|
||||
|
||||
LB_GETHORIZONTALEXTENT
|
||||
Gets the width, in pixels, that a list box can be scrolled horizontally (the scrollable width)
|
||||
if the list box has a horizontal scroll bar.
|
||||
|
||||
LB_GETITEMDATA
|
||||
Gets the application-defined value associated with the specified list box item.
|
||||
|
||||
LB_GETITEMHEIGHT
|
||||
Gets the height of items in a list box.
|
||||
|
||||
LB_GETITEMRECT
|
||||
Gets the dimensions of the rectangle that bounds a list box item as it is currently displayed
|
||||
in the list box.
|
||||
|
||||
LB_GETLISTBOXINFO
|
||||
Gets the number of items per column in a specified list box.
|
||||
|
||||
LB_GETLOCALE
|
||||
Gets the current locale of the list box. You can use the locale to determine the correct
|
||||
sorting order of displayed text (for list boxes with the LBS_SORT style) and of text
|
||||
added by the LB_ADDSTRING message.
|
||||
|
||||
LB_GETSEL
|
||||
Gets the selection state of an item.
|
||||
|
||||
LB_GETSELCOUNT
|
||||
Gets the total number of selected items in a multiple-selection list box.
|
||||
|
||||
LB_GETSELITEMS
|
||||
Fills a buffer with an array of integers that specify the item numbers of selected items in
|
||||
a multiple-selection list box.
|
||||
|
||||
LB_GETTEXT
|
||||
Gets a string from a list box.
|
||||
|
||||
LB_GETTEXTLEN
|
||||
Gets the length of a string in a list box.
|
||||
|
||||
LB_GETTOPINDEX
|
||||
Gets the index of the first visible item in a list box. Initially the item with index 0
|
||||
is at the top of the list box, but if the list box contents have been scrolled another item
|
||||
may be at the top.
|
||||
|
||||
LB_INITSTORAGE
|
||||
Allocates memory for storing list box items. This message is used before an application adds
|
||||
a large number of items to a list box.
|
||||
|
||||
LB_INSERTSTRING
|
||||
Inserts a string or item data into a list box. Unlike the LB_ADDSTRING message,
|
||||
the LB_INSERTSTRING message does not cause a list with the LBS_SORT style to be sorted.
|
||||
|
||||
LB_ITEMFROMPOINT
|
||||
Gets the zero-based index of the item nearest the specified point in a list box.
|
||||
|
||||
LB_RESETCONTENT
|
||||
Removes all items from a list box.
|
||||
|
||||
LB_SELECTSTRING
|
||||
Searches a list box for an item that begins with the characters in a specified string.
|
||||
If a matching item is found, the item is selected.
|
||||
|
||||
LB_SELITEMRANGE
|
||||
Selects or deselects one or more consecutive items in a multiple-selection list box.
|
||||
|
||||
LB_SELITEMRANGEEX
|
||||
Selects one or more consecutive items in a multiple-selection list box.
|
||||
|
||||
LB_SETANCHORINDEX
|
||||
Sets the anchor item
|
||||
|
||||
LB_SETCARETINDEX
|
||||
Sets the focus rectangle to the item at the specified index in a multiple-selection list box.
|
||||
If the item is not visible, it is scrolled into view.
|
||||
|
||||
LB_SETCOLUMNWIDTH
|
||||
Sets the width, in pixels, of all columns in a multiple-column list box.
|
||||
|
||||
LB_SETCOUNT
|
||||
Sets the count of items in a list box created with the LBS_NODATA style and not created with
|
||||
the LBS_HASSTRINGS style.
|
||||
|
||||
LB_SETCURSEL
|
||||
Selects a string and scrolls it into view, if necessary. When the new string is selected,
|
||||
the list box removes the highlight from the previously selected string.
|
||||
|
||||
LB_SETHORIZONTALEXTENT
|
||||
Sets the width, in pixels, by which a list box can be scrolled horizontally (the scrollable width).
|
||||
If the width of the list box is smaller than this value, the horizontal scroll bar horizontally
|
||||
scrolls items in the list box. If the width of the list box is equal to or greater than this value,
|
||||
the horizontal scroll bar is hidden.
|
||||
|
||||
LB_SETITEMDATA
|
||||
Sets a value associated with the specified item in a list box.
|
||||
|
||||
LB_SETITEMHEIGHT
|
||||
Sets the height, in pixels, of items in a list box. If the list box has the
|
||||
LBS_OWNERDRAWVARIABLE style, this message sets the height of the item specified
|
||||
by the wParam parameter. Otherwise, this message sets the height of all items in the list box.
|
||||
|
||||
LB_SETLOCALE
|
||||
Sets the current locale of the list box. You can use the locale to determine the
|
||||
correct sorting order of displayed text (for list boxes with the LBS_SORT style)
|
||||
and of text added by the LB_ADDSTRING message.
|
||||
|
||||
LB_SETSEL
|
||||
Selects a string in a multiple-selection list box.
|
||||
|
||||
LB_SETTABSTOPS
|
||||
Sets the tab-stop positions in a list box.
|
||||
|
||||
LB_SETTOPINDEX
|
||||
Ensures that the specified item in a list box is visible.
|
||||
|
||||
|
||||
|
||||
Notifications
|
||||
=============
|
||||
|
||||
LBN_DBLCLK
|
||||
Notifies the application that the user has double-clicked an item in a list box.
|
||||
The parent window of the list box receives this notification message through the WM_COMMAND message.
|
||||
|
||||
LBN_ERRSPACE
|
||||
Notifies the application that the list box cannot allocate enough memory to meet a specific request.
|
||||
The parent window of the list box receives this notification message through the WM_COMMAND message.
|
||||
|
||||
LBN_KILLFOCUS
|
||||
Notifies the application that the list box has lost the keyboard focus. The parent window of the
|
||||
list box receives this notification message through the WM_COMMAND message.
|
||||
|
||||
LBN_SELCANCEL
|
||||
Notifies the application that the user has canceled the selection in a list box. The parent
|
||||
window of the list box receives this notification message through the WM_COMMAND message.
|
||||
|
||||
LBN_SELCHANGE
|
||||
Notifies the application that the selection in a list box has changed. The parent window of
|
||||
the list box receives this notification message through the WM_COMMAND message.
|
||||
|
||||
LBN_SETFOCUS
|
||||
Notifies the application that the list box has received the keyboard focus. The parent window
|
||||
of the list box receives this notification message through the WM_COMMAND message.
|
||||
|
||||
WM_CHARTOITEM
|
||||
Sent by a list box with the LBS_WANTKEYBOARDINPUT style to its owner in response to a WM_CHAR message.
|
||||
|
||||
WM_CTLCOLORLISTBOX
|
||||
Sent to the parent window of a list box before the system draws the list box.
|
||||
By responding to this message, the parent window can set the text and background colors
|
||||
of the list box by using the specified display device context handle.
|
||||
|
||||
WM_DELETEITEM
|
||||
Sent to the owner of a list box or combo box when the list box or combo box is destroyed
|
||||
or when items are removed by the LB_DELETESTRING, LB_RESETCONTENT, CB_DELETESTRING,
|
||||
or CB_RESETCONTENT message. The system sends a WM_DELETEITEM message for each deleted item.
|
||||
The system sends the WM_DELETEITEM message for any deleted list box or combo box item with
|
||||
nonzero item data.
|
||||
|
||||
WM_VKEYTOITEM
|
||||
Sent by a list box with the LBS_WANTKEYBOARDINPUT style to its owner in response
|
||||
to a WM_KEYDOWN message.
|
||||
|
||||
|
||||
|
||||
Structures
|
||||
==========
|
||||
|
||||
DELETEITEMSTRUCT
|
||||
Describes a deleted list box or combo box item. The lParam parameter of a
|
||||
WM_DELETEITEM message contains a pointer to this structure. When an item is removed from a
|
||||
list box or combo box or when a list box or combo box is destroyed, the system sends the
|
||||
WM_DELETEITEM message to the owner for each deleted item.
|
||||
|
||||
Windows NT/2000/XP: The system sends a WM_DELETEITEM message only for items deleted from
|
||||
an owner-drawn list box (with the LBS_OWNERDRAWFIXED or LBS_OWNERDRAWVARIABLE style) or
|
||||
owner-drawn combo box (with the CBS_OWNERDRAWFIXED or CBS_OWNERDRAWVARIABLE style).
|
||||
|
||||
Windows 95/98/Me: The system sends the WM_DELETEITEM message for any deleted list box
|
||||
or combo box item with nonzero item data.
|
||||
|
||||
|
||||
|
||||
List Box Styles
|
||||
===============
|
||||
|
||||
To create a list box by using the CreateWindow or CreateWindowEx function,
|
||||
use the LISTBOX class, appropriate window style constants, and the following style constants to
|
||||
define the list box. After the control has been created, these styles cannot be modified, except as noted.
|
||||
|
||||
Constants
|
||||
|
||||
LBS_COMBOBOX
|
||||
Notifies a list box that it is part of a combo box. This allows coordination between the
|
||||
two controls so that they present a unified user interface (UI). The combo box itself
|
||||
must set this style. If the style is set by anything but the combo box, the list box
|
||||
will regard itself incorrectly as a child of a combo box and a failure will result.
|
||||
|
||||
LBS_DISABLENOSCROLL
|
||||
Shows a disabled vertical scroll bar for the list box when the box does not contain
|
||||
enough items to scroll. If you do not specify this style, the scroll bar is hidden
|
||||
when the list box does not contain enough items.
|
||||
|
||||
LBS_EXTENDEDSEL
|
||||
Allows multiple items to be selected by using the SHIFT key and the mouse or special key combinations.
|
||||
|
||||
LBS_HASSTRINGS
|
||||
Specifies that a list box contains items consisting of strings. The list box maintains
|
||||
the memory and addresses for the strings so that the application can use the LB_GETTEXT message
|
||||
to retrieve the text for a particular item. By default, all list boxes except owner-drawn list
|
||||
boxes have this style. You can create an owner-drawn list box either with or without this style.
|
||||
|
||||
LBS_MULTICOLUMN
|
||||
Specifies a multi-columnn list box that is scrolled horizontally. The LB_SETCOLUMNWIDTH message
|
||||
sets the width of the columns.
|
||||
|
||||
LBS_MULTIPLESEL
|
||||
Turns string selection on or off each time the user clicks or double-clicks a string in the list box.
|
||||
The user can select any number of strings.
|
||||
|
||||
LBS_NODATA
|
||||
Specifies a no-data list box. Specify this style when the count of items in the list box
|
||||
will exceed one thousand. A no-data list box must also have the LBS_OWNERDRAWFIXED style,
|
||||
but must not have the LBS_SORT or LBS_HASSTRINGS style.
|
||||
A no-data list box resembles an owner-drawn list box except that it contains no string or
|
||||
bitmap data for an item. Commands to add, insert, or delete an item always ignore any
|
||||
specified item data; requests to find a string within the list box always fail.
|
||||
The system sends the WM_DRAWITEM message to the owner window when an item must be drawn.
|
||||
The itemID member of the DRAWITEMSTRUCT structure passed with the WM_DRAWITEM message
|
||||
specifies the line number of the item to be drawn. A no-data list box does not send a
|
||||
WM_DELETEITEM message.
|
||||
|
||||
|
||||
LBS_NOINTEGRALHEIGHT
|
||||
Specifies that the size of the list box is exactly the size specified by the application
|
||||
when it created the list box. Normally, the system sizes a list box so that the list box
|
||||
does not display partial items.
|
||||
|
||||
LBS_NOREDRAW
|
||||
Specifies that the list box s appearance is not updated when changes are made.
|
||||
To change the redraw state of the control, use the WM_SETREDRAW message.
|
||||
|
||||
|
||||
LBS_NOSEL
|
||||
Specifies that the list box contains items that can be viewed but not selected.
|
||||
|
||||
LBS_NOTIFY
|
||||
Notifies the parent window with an input message whenever the user clicks or double-clicks
|
||||
a string in the list box.
|
||||
|
||||
LBS_OWNERDRAWFIXED
|
||||
Specifies that the owner of the list box is responsible for drawing its contents and that
|
||||
the items in the list box are the same height. The owner window receives a
|
||||
WM_MEASUREITEM message when the list box is created and a WM_DRAWITEM message when
|
||||
a visual aspect of the list box has changed.
|
||||
|
||||
LBS_OWNERDRAWVARIABLE
|
||||
Specifies that the owner of the list box is responsible for drawing its contents and that
|
||||
the items in the list box are variable in height. The owner window receives a
|
||||
WM_MEASUREITEM message for each item in the combo box when the combo box is created and a
|
||||
WM_DRAWITEM message when a visual aspect of the combo box has changed.
|
||||
|
||||
LBS_SORT
|
||||
Sorts strings in the list box alphabetically.
|
||||
|
||||
LBS_STANDARD
|
||||
Sorts strings in the list box alphabetically. The parent window receives an input
|
||||
message whenever the user clicks or double-clicks a string. The list box has borders on all sides.
|
||||
|
||||
LBS_USETABSTOPS
|
||||
Enables a list box to recognize and expand tab characters when drawing its strings.
|
||||
You can use the LB_SETTABSTOPS message to specify tab stop positions. The default tab positions
|
||||
are 32 dialog template units apart. Dialog template units are the device-independent units used
|
||||
in dialog box templates. To convert measurements from dialog template units to screen units (pixels),
|
||||
use the MapDialogRect function.
|
||||
|
||||
LBS_WANTKEYBOARDINPUT
|
||||
Specifies that the owner of the list box receives WM_VKEYTOITEM messages whenever
|
||||
the user presses a key and the list box has the input focus. This enables an application
|
||||
to perform special processing on the keyboard input.
|
||||
|
||||
|
||||
#endif
|
||||
//----------------------------------------------------------------------//
|
||||
@@ -67,10 +67,12 @@
|
||||
|
||||
#include 'hbclass.ch'
|
||||
#include 'common.ch'
|
||||
#include 'inkey.ch'
|
||||
#include 'hbgtinfo.ch'
|
||||
|
||||
#include 'hbgtwvg.ch'
|
||||
#include 'wvtwin.ch'
|
||||
#include 'inkey.ch'
|
||||
#include 'wvgparts.ch'
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
|
||||
164
harbour/contrib/gtwvg/wvgparts.ch
Normal file
164
harbour/contrib/gtwvg/wvgparts.ch
Normal file
@@ -0,0 +1,164 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Harbour Project source code:
|
||||
* Header file for the WVT*Classes
|
||||
*
|
||||
* Copyright 2008 Pritpal Bedi <pritpal@vouchcac.com>
|
||||
* www - http://www.xharbour.org http://www.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.
|
||||
*
|
||||
*/
|
||||
//----------------------------------------------------------------------//
|
||||
// WvgParts.ch
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
#ifndef _WVG_CH
|
||||
|
||||
#define _WVG_CH
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
#define objTypeNone 0
|
||||
#define objTypeCrt 1
|
||||
#define objTypeWindow 2
|
||||
#define objTypeActiveX 3
|
||||
#define objTypeDialog 4
|
||||
#define objTypeToolBar 5
|
||||
#define objTypeToolBarButton 6
|
||||
#define objTypeMenu 7
|
||||
#define objTypeStatusBar 8
|
||||
#define objTypePushButton 9
|
||||
#define objTypeComboBox 10
|
||||
#define objTypeListBox 11
|
||||
#define objTypeStatic 12
|
||||
#define objTypeTreeView 13
|
||||
#define objTypeTreeViewItem 14
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
/* Constants identifying WM_NOTIFY members fired as HB_GTE_NOTIFY */
|
||||
#define NM_controlID 1
|
||||
#define NM_hWnd 2
|
||||
#define NM_idFrom 3
|
||||
#define NM_code 4
|
||||
#define NM_dwItemSpec 5
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
#define WVG_AUTOSIZE -1
|
||||
|
||||
#define WVGALIGN_TOP 0
|
||||
#define WVGALIGN_LEFT 0
|
||||
#define WVGALIGN_BOTTOM 8
|
||||
#define WVGALIGN_RIGHT 2
|
||||
#define WVGALIGN_HCENTER 1
|
||||
#define WVGALIGN_VCENTER 4
|
||||
#define WVGALIGN_WORDBREAK 16
|
||||
|
||||
#define WVGFRAME_NONE 0
|
||||
#define WVGFRAME_RECT 1
|
||||
#define WVGFRAME_BOX 2
|
||||
#define WVGFRAME_RAISED 16
|
||||
#define WVGFRAME_RECESSED 32
|
||||
#define WVGFRAME_THICK 128
|
||||
#define WVGFRAME_DASHED 256
|
||||
#define WVGFRAME_DOTTED 512
|
||||
|
||||
#define WVGTOOLBAR_STYLE_STANDARD 0
|
||||
#define WVGTOOLBAR_STYLE_FLAT 1
|
||||
|
||||
#define WVGTOOLBAR_BUTTON_DEFAULT 0
|
||||
|
||||
/* Statusbar Manipulation Constants */
|
||||
#define WVGSTATUSBAR_AUTOSIZE_NONE 0
|
||||
#define WVGSTATUSBAR_AUTOSIZE_SPRING 1
|
||||
#define WVGSTATUSBAR_AUTOSIZE_CONTENTS 2
|
||||
|
||||
#define WVGSTATUSBAR_BEVEL_NONE 0
|
||||
#define WVGSTATUSBAR_BEVEL_INSET 1
|
||||
#define WVGSTATUSBAR_BEVEL_RAISED 2
|
||||
|
||||
#define WVGSTATUSBAR_PANEL_TEXT 0
|
||||
#define WVGSTATUSBAR_PANEL_CAPSLOCK 1
|
||||
#define WVGSTATUSBAR_PANEL_NUMLOCK 2
|
||||
#define WVGSTATUSBAR_PANEL_INSERT 3
|
||||
#define WVGSTATUSBAR_PANEL_SCROLL 4
|
||||
#define WVGSTATUSBAR_PANEL_TIME 5
|
||||
#define WVGSTATUSBAR_PANEL_DATE 6
|
||||
#define WVGSTATUSBAR_PANEL_KANA 7
|
||||
|
||||
#define WVGSTATIC_TYPE_TEXT 1
|
||||
#define WVGSTATIC_TYPE_GROUPBOX 2
|
||||
#define WVGSTATIC_TYPE_ICON 3
|
||||
#define WVGSTATIC_TYPE_SYSICON 4
|
||||
#define WVGSTATIC_TYPE_BITMAP 5
|
||||
#define WVGSTATIC_TYPE_FGNDRECT 6
|
||||
#define WVGSTATIC_TYPE_BGNDRECT 7
|
||||
#define WVGSTATIC_TYPE_FGNDFRAME 8
|
||||
#define WVGSTATIC_TYPE_BGNDFRAME 9
|
||||
#define WVGSTATIC_TYPE_HALFTONERECT 10
|
||||
#define WVGSTATIC_TYPE_HALFTONEFRAME 11
|
||||
#define WVGSTATIC_TYPE_RAISEDBOX 12
|
||||
#define WVGSTATIC_TYPE_RECESSEDBOX 13
|
||||
#define WVGSTATIC_TYPE_RAISEDRECT 14
|
||||
#define WVGSTATIC_TYPE_RECESSEDRECT 15
|
||||
#define WVGSTATIC_TYPE_RAISEDLINE 16
|
||||
#define WVGSTATIC_TYPE_RECESSEDLINE 17
|
||||
|
||||
#define WVGSTATIC_FRAMETHIN 1
|
||||
#define WVGSTATIC_FRAMETHICK 2
|
||||
|
||||
#define WVGSTATIC_TEXT_LEFT WVGALIGN_LEFT
|
||||
#define WVGSTATIC_TEXT_RIGHT WVGALIGN_RIGHT
|
||||
#define WVGSTATIC_TEXT_CENTER WVGALIGN_HCENTER
|
||||
#define WVGSTATIC_TEXT_TOP WVGALIGN_TOP
|
||||
#define WVGSTATIC_TEXT_VCENTER WVGALIGN_VCENTER
|
||||
#define WVGSTATIC_TEXT_BOTTOM WVGALIGN_BOTTOM
|
||||
#define WVGSTATIC_TEXT_WORDBREAK WVGALIGN_WORDBREAK
|
||||
|
||||
#define WVGSTATIC_BITMAP_TILED 1
|
||||
#define WVGSTATIC_BITMAP_SCALED 2
|
||||
|
||||
#endif // #ifndef _WVG_CH
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
@@ -67,10 +67,12 @@
|
||||
|
||||
#include 'hbclass.ch'
|
||||
#include 'common.ch'
|
||||
#include 'inkey.ch'
|
||||
#include 'hbgtinfo.ch'
|
||||
|
||||
#include 'hbgtwvg.ch'
|
||||
#include 'wvtwin.ch'
|
||||
#include 'inkey.ch'
|
||||
#include 'wvgparts.ch'
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
@@ -341,14 +343,30 @@ METHOD notifier( nEvent, xParams ) CLASS WvgPartHandler
|
||||
eval( ::sl_resize, { xParams[ 1 ], xParams[ 2 ] }, { xParams[ 3 ], xParams[ 4 ] }, Self )
|
||||
ENDIF
|
||||
|
||||
FOR nObj := 1 TO len( ::aChildren )
|
||||
|
||||
IF ::aChildren[ nObj ]:objType == objTypeToolBar
|
||||
::aChildren[ nObj ]:sendMessage( WM_SIZE, 0, 0 )
|
||||
|
||||
ELSEIF ::aChildren[ nObj ]:objType == objTypeStatusBar
|
||||
::aChildren[ nObj ]:sendMessage( WM_SIZE, 0, 0 )
|
||||
|
||||
ELSEIF hb_isBlock( ::aChildren[ nObj ]:sl_resize )
|
||||
eval( ::aChildren[ nObj ]:sl_resize, { xParams[ 1 ], xParams[ 2 ] }, ;
|
||||
{ xParams[ 3 ], xParams[ 4 ] }, ::aChildren[ nObj ] )
|
||||
|
||||
ENDIF
|
||||
NEXT
|
||||
|
||||
CASE nEvent == HB_GTE_CLOSE
|
||||
IF hb_isBlock( ::close )
|
||||
nReturn := eval( ::close, NIL, NIL, Self )
|
||||
ENDIF
|
||||
|
||||
CASE nEvent == HB_GTE_MENU
|
||||
DO CASE
|
||||
hb_ToOutDebug( " CASE nEvent == HB_GTE_MENU" )
|
||||
|
||||
DO CASE
|
||||
CASE xParams[ 1 ] == 0 // menu selected
|
||||
IF hb_isObject( ::oMenu )
|
||||
IF !empty( aMenuItem := ::oMenu:FindMenuItemById( xParams[ 2 ] ) )
|
||||
@@ -375,20 +393,43 @@ METHOD notifier( nEvent, xParams ) CLASS WvgPartHandler
|
||||
ENDCASE
|
||||
|
||||
CASE nEvent == HB_GTE_NOTIFY
|
||||
nCtrlID := xParams[ 1 ]
|
||||
nCtrlID := xParams[ NM_controlID ]
|
||||
|
||||
nIndex := ascan( ::aChildren, {|o| o:nID == nCtrlID } )
|
||||
IF nIndex > 0
|
||||
DO CASE
|
||||
|
||||
CASE xParams[ 4 ] == NM_CLICK
|
||||
IF hb_isBlock( ::aChildren[ nIndex ]:sl_buttonClick )
|
||||
nObj := ascan( ::aChildren[ nIndex ]:aItems, {|e_| e_[ 1 ] == xParams[ 5 ] } )
|
||||
Eval( ::aChildren[ nIndex ]:sl_buttonClick, ::aChildren[ nIndex ]:aItems[ nObj,2 ] )
|
||||
CASE xParams[ NM_code ] == NM_CLICK
|
||||
IF hb_isBlock( ::aChildren[ nIndex ]:sl_lbClick )
|
||||
|
||||
DO CASE
|
||||
CASE ::aChildren[ nIndex ]:objType == objTypeToolBar
|
||||
nObj := ascan( ::aChildren[ nIndex ]:aItems, {|e_| e_[ 1 ] == xParams[ NM_dwItemSpec ] } )
|
||||
Eval( ::aChildren[ nIndex ]:sl_lbClick, ::aChildren[ nIndex ]:aItems[ nObj,2 ], ;
|
||||
NIL, ::aChildren[ nIndex ] )
|
||||
|
||||
CASE ::aChildren[ nIndex ]:objType == objTypeStatusBar
|
||||
IF xParams[ NM_dwItemSpec ] >= 0
|
||||
nObj := xParams[ NM_dwItemSpec ] + 1 // zero based
|
||||
Eval( ::aChildren[ nIndex ]:sl_lbClick, ::aChildren[ nIndex ]:aItems[ nObj ], ;
|
||||
NIL, ::aChildren[ nIndex ] )
|
||||
ENDIF
|
||||
ENDCASE
|
||||
ENDIF
|
||||
|
||||
ENDCASE
|
||||
ENDIF
|
||||
|
||||
CASE nEvent == HB_GTE_COMMAND
|
||||
nCtrlID := xParams[ 2 ] // Control Identifier
|
||||
|
||||
nIndex := ascan( ::aChildren, {|o| o:nID == nCtrlID } ) // Theoretically it must be present
|
||||
IF nIndex > 0
|
||||
DO CASE
|
||||
CASE xParams[ 1 ] == BN_CLICKED
|
||||
IF hb_isBlock( ::aChildren[ nIndex ]:sl_lbClick )
|
||||
eval( ::aChildren[ nIndex ]:sl_lbClick, NIL, NIL, ::aChildren[ nIndex ] )
|
||||
ENDIF
|
||||
ENDCASE
|
||||
ENDIF
|
||||
|
||||
|
||||
524
harbour/contrib/gtwvg/wvgpushb.prg
Normal file
524
harbour/contrib/gtwvg/wvgpushb.prg
Normal file
@@ -0,0 +1,524 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Harbour Project source code:
|
||||
* Source file for the Wvg*Classes
|
||||
*
|
||||
* Copyright 2008 Pritpal Bedi <pritpal@vouchcac.com>
|
||||
* http://www.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++ xbpPushButton Compatible Class
|
||||
//
|
||||
// Pritpal Bedi <pritpal@vouchcac.com>
|
||||
// 26Nov2008
|
||||
//
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
#include 'hbclass.ch'
|
||||
#include 'common.ch'
|
||||
#include 'inkey.ch'
|
||||
#include 'hbgtinfo.ch'
|
||||
|
||||
#include 'hbgtwvg.ch'
|
||||
#include 'wvtwin.ch'
|
||||
#include 'wvgparts.ch'
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
CLASS WvgPushButton INHERIT WvgWindow
|
||||
|
||||
DATA autosize INIT .F.
|
||||
DATA border INIT .T.
|
||||
DATA caption INIT ''
|
||||
DATA pointerFocus INIT .T.
|
||||
DATA preSelect INIT .F.
|
||||
DATA drawMode INIT 0 //WVG_DRAW_NORMAL
|
||||
DATA default INIT .F.
|
||||
DATA cancel INIT .F.
|
||||
|
||||
METHOD new()
|
||||
METHOD create()
|
||||
METHOD configure()
|
||||
METHOD destroy()
|
||||
|
||||
METHOD setCaption()
|
||||
|
||||
METHOD activate() SETGET
|
||||
METHOD draw() SETGET
|
||||
|
||||
DATA nWndProc
|
||||
METHOD PBWndProc()
|
||||
|
||||
ENDCLASS
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgPushButton
|
||||
|
||||
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
::style := WS_CHILD
|
||||
::className := 'BUTTON'
|
||||
::objType := objTypePushButton
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgPushButton
|
||||
|
||||
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
IF ::visible
|
||||
::style += WS_VISIBLE
|
||||
ENDIF
|
||||
|
||||
::oParent:AddChild( SELF )
|
||||
|
||||
::createControl()
|
||||
|
||||
IF ::visible
|
||||
::show()
|
||||
ENDIF
|
||||
|
||||
::setCaption( ::caption )
|
||||
|
||||
::nWndProc := HB_AsCallBack( 'PBWNDPROC', Self )
|
||||
|
||||
Win_SetWndProc( ::hWnd, ::nWndProc )
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgPushButton
|
||||
|
||||
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD destroy() CLASS WvgPushButton
|
||||
|
||||
IF len( ::aChildren ) > 0
|
||||
aeval( ::aChildren, {|o| o:destroy() } )
|
||||
ENDIF
|
||||
|
||||
IF Win_IsWindow( ::hWnd )
|
||||
Win_DestroyWindow( ::hWnd )
|
||||
ENDIF
|
||||
|
||||
HB_FreeCallback( ::nWndProc )
|
||||
|
||||
RETURN NIL
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD setCaption( xCaption, cDll ) CLASS WvgPushButton
|
||||
|
||||
HB_SYMBOL_UNUSED( cDll )
|
||||
|
||||
IF hb_isChar( xCaption )
|
||||
::caption := xCaption
|
||||
Win_SendMessageText( ::hWnd, WM_SETTEXT, 0, ::caption )
|
||||
ENDIF
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD activate( xParam ) CLASS WvgPushButton
|
||||
|
||||
IF hb_isBlock( xParam ) .or. ( xParam == NIL )
|
||||
::sl_lbClick := xParam
|
||||
ENDIF
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD draw( xParam ) CLASS WvgPushButton
|
||||
|
||||
IF hb_isBlock( xParam ) .or. ( xParam == NIL )
|
||||
::sl_paint := xParam
|
||||
ENDIF
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD PBWndProc( h,m,w,l ) CLASS WvgPushButton
|
||||
|
||||
HB_SYMBOL_UNUSED( h )
|
||||
HB_SYMBOL_UNUSED( w )
|
||||
HB_SYMBOL_UNUSED( l )
|
||||
|
||||
DO CASE
|
||||
CASE m == WM_LBUTTONUP
|
||||
Win_MessageBox( ::hWnd, "Hiding the Parent", "Info" )
|
||||
Win_ShowWindow( ::oParent:hWnd, SW_HIDE )
|
||||
RETURN 0
|
||||
|
||||
ENDCASE
|
||||
|
||||
RETURN Win_DefWindowProc( h, m, w, l )
|
||||
//----------------------------------------------------------------------//
|
||||
// MSDN on Button Control
|
||||
//----------------------------------------------------------------------//
|
||||
#if 0
|
||||
|
||||
Functions
|
||||
=========
|
||||
|
||||
CheckDlgButton
|
||||
Changes the check state of a button control.
|
||||
|
||||
CheckRadioButton
|
||||
Adds a check mark to (checks) a specified radio button in a group and removes a check mark from
|
||||
(clears) all other radio buttons in the group.
|
||||
|
||||
IsDlgButtonChecked
|
||||
The IsDlgButtonChecked function determines whether a button control is checked or whether a
|
||||
three-state button control is checked, unchecked, or indeterminate.
|
||||
|
||||
|
||||
Macros
|
||||
======
|
||||
|
||||
Button_Enable
|
||||
Enables or disables a button.
|
||||
|
||||
Button_GetCheck
|
||||
Gets the check state of a radio button or check box. You can use this macro or send the BM_GETCHECK
|
||||
message explicitly.
|
||||
|
||||
Button_GetIdealSize
|
||||
Gets the size of the button that best fits the text and image, if an image list is present.
|
||||
You can use this macro or send the BCM_GETIDEALSIZE message explicitly.
|
||||
|
||||
Button_GetImageList
|
||||
Gets the BUTTON_IMAGELIST structure that describes the image list that is set for a button control.
|
||||
You can use this macro or send the BCM_GETIMAGELIST message explicitly.
|
||||
|
||||
Button_GetNote
|
||||
Gets the text of the note associated with a command link button. You can use this macro or send
|
||||
the BCM_GETNOTE message explicitly.
|
||||
|
||||
Button_GetNoteLength
|
||||
Gets the length of the note text that may be displayed in the description for a command link.
|
||||
Use this macro or send the BCM_GETNOTELENGTH message explicitly.
|
||||
|
||||
Button_GetSplitInfo
|
||||
Gets information for a specified split button control. Use this macro or send the
|
||||
BCM_GETSPLITINFO message explicitly.
|
||||
|
||||
Button_GetState
|
||||
Gets the check state of a radio button or check box. You can use this macro or send the
|
||||
BM_GETSTATE message explicitly.
|
||||
|
||||
Button_GetText
|
||||
Gets the text of a button.
|
||||
|
||||
Button_GetTextLength
|
||||
Gets the number of characters in the text of a button.
|
||||
|
||||
Button_GetTextMargin
|
||||
Gets the margins used to draw text in a button control. You can use this macro or send the
|
||||
BCM_GETTEXTMARGIN message explicitly.
|
||||
|
||||
Button_SetCheck
|
||||
Sets the check state of a radio button or check box. You can use this macro or send the
|
||||
BM_SETCHECK message explicitly.
|
||||
|
||||
Button_SetDropDownState
|
||||
Sets the drop down state for a specified button with style of BS_SPLITBUTTON.
|
||||
Use this macro or send the BCM_SETDROPDOWNSTATE message explicitly.
|
||||
|
||||
Button_SetElevationRequiredState
|
||||
Sets the elevation required state for a specified button or command link to display an elevated icon.
|
||||
Use this macro or send the BCM_SETSHIELD message explicitly.
|
||||
|
||||
Button_SetImageList
|
||||
Assigns an image list to a button control. You can use this macro or send the
|
||||
BCM_SETIMAGELIST message explicitly.
|
||||
|
||||
Button_SetNote
|
||||
Sets the text of the note associated with a specified command link button.
|
||||
You can use this macro or send the BCM_SETNOTE message explicitly.
|
||||
|
||||
Button_SetSplitInfo
|
||||
Sets information for a specified split button control. Use this macro or send the
|
||||
BCM_SETSPLITINFO message explicitly.
|
||||
|
||||
Button_SetState
|
||||
Sets the highlight state of a button. The highlight state indicates whether the button
|
||||
is highlighted as if the user had pushed it. You can use this macro or send the
|
||||
BM_SETSTATE message explicitly.
|
||||
|
||||
Button_SetStyle
|
||||
Sets the style of a button. You can use this macro or send the BM_SETSTYLE message explicitly.
|
||||
|
||||
Button_SetText
|
||||
Sets the text of a button.
|
||||
|
||||
Button_SetTextMargin
|
||||
Sets the margins for drawing text in a button control. You can use this macro or send the
|
||||
BCM_SETTEXTMARGIN message explicitly.
|
||||
|
||||
|
||||
Messages
|
||||
========
|
||||
|
||||
BCM_GETIDEALSIZE
|
||||
Gets the size of the button that best fits its text and image, if an image list is present.
|
||||
You can send this message explicitly or use the Button_GetIdealSize macro.
|
||||
|
||||
BCM_GETIMAGELIST
|
||||
Gets the BUTTON_IMAGELIST structure that describes the image list assigned to a button control.
|
||||
You can send this message explicitly or use the Button_GetImageList macro.
|
||||
|
||||
BCM_GETNOTE
|
||||
Gets the text of the note associated with a command link button. You can send this message
|
||||
explicitly or use the Button_GetNote macro.
|
||||
|
||||
BCM_GETNOTELENGTH
|
||||
Gets the length of the note text that may be displayed in the description for a command link button.
|
||||
Send this message explicitly or by using the Button_GetNoteLength macro.
|
||||
|
||||
BCM_GETSPLITINFO
|
||||
Gets information for a split button control. Send this message explicitly or by using the
|
||||
Button_GetSplitInfo macro.
|
||||
|
||||
BCM_GETTEXTMARGIN
|
||||
Gets the margins used to draw text in a button control. You can send this message explicitly or
|
||||
use the Button_GetTextMargin macro.
|
||||
|
||||
BCM_SETDROPDOWNSTATE
|
||||
Sets the drop down state for a button with style TBSTYLE_DROPDOWN. Send this message explicitly
|
||||
or by using the Button_SetDropDownState macro.
|
||||
|
||||
BCM_SETIMAGELIST
|
||||
Assigns an image list to a button control. You can send this message explicitly or use the
|
||||
Button_SetImageList macro.
|
||||
|
||||
BCM_SETNOTE
|
||||
Sets the text of the note associated with a command link button. You can send this message
|
||||
explicitly or use the Button_SetNote macro.
|
||||
|
||||
BCM_SETSHIELD
|
||||
Sets the elevation required state for a specified button or command link to display an elevated icon.
|
||||
Send this message explicitly or by using the Button_SetElevationRequiredState macro.
|
||||
|
||||
BCM_SETSPLITINFO
|
||||
Sets information for a split button control. Send this message explicitly or by using the
|
||||
Button_SetSplitInfo macro.
|
||||
|
||||
BCM_SETTEXTMARGIN
|
||||
The BCM_SETTEXTMARGIN message sets the margins for drawing text in a button control.
|
||||
|
||||
BM_CLICK
|
||||
Simulates the user clicking a button. This message causes the button to receive the
|
||||
WM_LBUTTONDOWN and WM_LBUTTONUP messages, and the button s parent window to receive a
|
||||
BN_CLICKED notification message.
|
||||
|
||||
BM_GETCHECK
|
||||
Gets the check state of a radio button or check box. You can send this message explicitly or
|
||||
use the Button_GetCheck macro.
|
||||
|
||||
BM_GETIMAGE
|
||||
Retrieves a handle to the image (icon or bitmap) associated with the button.
|
||||
|
||||
BM_GETSTATE
|
||||
Retrieves the state of a button or check box. You can send this message explicitly or use the
|
||||
Button_GetState macro.
|
||||
|
||||
BM_SETCHECK
|
||||
Sets the check state of a radio button or check box. You can send this message explicitly or by
|
||||
using the Button_SetCheck macro.
|
||||
|
||||
BM_SETDONTCLICK
|
||||
Sets a flag on a radio button that controls the generation of BN_CLICKED messages when the
|
||||
button receives focus.
|
||||
|
||||
BM_SETIMAGE
|
||||
Associates a new image (icon or bitmap) with the button.
|
||||
|
||||
BM_SETSTATE
|
||||
Sets the highlight state of a button. The highlight state indicates whether the button is
|
||||
highlighted as if the user had pushed it. You can send this message explicitly or use the
|
||||
Button_SetState macro.
|
||||
|
||||
BM_SETSTYLE
|
||||
Sets the style of a button. You can send this message explicitly or use the Button_SetStyle macro.
|
||||
|
||||
|
||||
Notifications
|
||||
=============
|
||||
|
||||
BCN_DROPDOWN
|
||||
Sent when the user clicks a drop down arrow on a button. The parent window of the control receives
|
||||
this notification message in the form of a WM_NOTIFY message.
|
||||
|
||||
BCN_HOTITEMCHANGE
|
||||
Notifies the button control owner that the mouse is entering or leaving the client area of the
|
||||
button control. The button control sends this notification in the form of a WM_NOTIFY message.
|
||||
|
||||
BN_CLICKED
|
||||
Sent when the user clicks a button.
|
||||
The parent window of the button receives the BN_CLICKED notification code through the WM_COMMAND message.
|
||||
|
||||
BN_DBLCLK
|
||||
Sent when the user double-clicks a button. This notification is sent automatically for
|
||||
BS_USERBUTTON, BS_RADIOBUTTON, and BS_OWNERDRAW buttons. Other button types send
|
||||
BN_DBLCLK only if they have the BS_NOTIFY style.
|
||||
The parent window of the button receives the BN_DBLCLK notification code through the WM_COMMAND message.
|
||||
|
||||
BN_DISABLE
|
||||
Sent when a button is disabled.
|
||||
Note This notification message is provided only for compatibility with 16-bit versions of
|
||||
Microsoft Windows earlier than version 3.0. Applications should use the BS_OWNERDRAW button style
|
||||
and the DRAWITEMSTRUCT structure for this task.
|
||||
The parent window of the button receives the BN_DISABLE notification code through the WM_COMMAND message.
|
||||
|
||||
BN_DOUBLECLICKED
|
||||
Sent when the user double-clicks a button. This notification is sent automatically for
|
||||
BS_USERBUTTON, BS_RADIOBUTTON, and BS_OWNERDRAW buttons. Other button types send
|
||||
BN_DOUBLECLICKED only if they have the BS_NOTIFY style.
|
||||
The parent window of the button receives the BN_DOUBLECLICKED notification code through the
|
||||
WM_COMMAND message.
|
||||
|
||||
BN_HILITE
|
||||
Sent when the user selects a button.
|
||||
Note This notification message is provided only for compatibility with 16-bit versions
|
||||
of Windows earlier than version 3.0. Applications should use the BS_OWNERDRAW button style
|
||||
and the DRAWITEMSTRUCT structure for this task.
|
||||
The parent window of the button receives the BN_HILITE notification code through the WM_COMMAND message.
|
||||
|
||||
BN_KILLFOCUS
|
||||
Sent when a button loses the keyboard focus. The button must have the
|
||||
BS_NOTIFY style to send this notification message.
|
||||
|
||||
The parent window of the button receives the BN_KILLFOCUS notification code through the
|
||||
WM_COMMAND message.
|
||||
|
||||
BN_PAINT
|
||||
Sent when a button should be painted.
|
||||
Note This notification message is provided only for compatibility with 16-bit versions of
|
||||
Windows earlier than version 3.0. Applications should use the BS_OWNERDRAW button style and
|
||||
the DRAWITEMSTRUCT structure for this task.
|
||||
The parent window of the button receives the BN_PAINT notification code through the WM_COMMAND message.
|
||||
|
||||
BN_PUSHED
|
||||
Sent when the push state of a button is set to pushed.
|
||||
Note This notification message is provided only for compatibility with 16-bit versions
|
||||
of Windows earlier than version 3.0. Applications should use the BS_OWNERDRAW button
|
||||
style and the DRAWITEMSTRUCT structure for this task.
|
||||
The parent window of the button receives the BN_PUSHED notification code through the WM_COMMAND message.
|
||||
|
||||
BN_SETFOCUS
|
||||
Sent when a button receives the keyboard focus. The button must have the BS_NOTIFY style to
|
||||
send this notification message.
|
||||
The parent window of the button receives the BN_SETFOCUS notification code through the WM_COMMAND message.
|
||||
|
||||
BN_UNHILITE
|
||||
Sent when the highlight should be removed from a button.
|
||||
Note This notification message is provided only for compatibility with 16-bit versions of
|
||||
Windows earlier than version 3.0. Applications should use the BS_OWNERDRAW button style and
|
||||
the DRAWITEMSTRUCT structure for this task.
|
||||
The parent window of the button receives the BN_UNHILITE notification code through the WM_COMMAND message.
|
||||
|
||||
BN_UNPUSHED
|
||||
Sent when the push state of a button is set to unpushed.
|
||||
Note This notification message is provided only for compatibility with 16-bit versions
|
||||
of Windows earlier than version 3.0. Applications should use the BS_OWNERDRAW button style
|
||||
and the DRAWITEMSTRUCT structure for this task.
|
||||
The parent window of the button receives the BN_UNPUSHED notification code through the WM_COMMAND message.
|
||||
|
||||
NM_CUSTOMDRAW (button)
|
||||
Notifies the parent window of a button control about custom draw operations on the button.
|
||||
The button control sends this notification in the form of a WM_NOTIFY message.
|
||||
|
||||
WM_CTLCOLORBTN
|
||||
The WM_CTLCOLORBTN message is sent to the parent window of a button before drawing the button.
|
||||
The parent window can change the button s text and background colors. However, only owner-drawn
|
||||
buttons respond to the parent window processing this message.
|
||||
|
||||
|
||||
Structures
|
||||
==========
|
||||
|
||||
BUTTON_IMAGELIST
|
||||
Contains information about an image list that is used with a button control.
|
||||
|
||||
BUTTON_SPLITINFO
|
||||
Contains information that defines a split button (BS_SPLITBUTTON and BS_DEFSPLITBUTTON styles).
|
||||
Used with the BCM_GETSPLITINFO and BCM_SETSPLITINFO messages.
|
||||
|
||||
NMBCDROPDOWN
|
||||
Contains information about a BCN_DROPDOWN notification.
|
||||
|
||||
NMBCHOTITEM
|
||||
Contains information about the movement of the mouse over a button control.
|
||||
|
||||
|
||||
Constants
|
||||
=========
|
||||
|
||||
Button Styles
|
||||
Specifies a combination of button styles. If you create a button using the BUTTON class
|
||||
with the CreateWindow or CreateWindowEx function, you can specify any of the button styles listed below.
|
||||
|
||||
#endif
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
@@ -105,6 +105,16 @@
|
||||
#include <ole2.h>
|
||||
#include <oleauto.h>
|
||||
|
||||
//#include <strsafe.h>
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
#if defined(__BORLANDC__) && !defined(HB_ARCH_64BIT)
|
||||
#undef MAKELONG
|
||||
#define MAKELONG(a,b) ((LONG)(((WORD)((DWORD_PTR)(a) & 0xffff)) | \
|
||||
(((DWORD)((WORD)((DWORD_PTR)(b) & 0xffff))) << 16)))
|
||||
#endif
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
static HRESULT s_nOleError;
|
||||
static HMODULE hLib = NULL;
|
||||
@@ -121,6 +131,57 @@ HRESULT hb_oleVariantToItem( PHB_ITEM pItem, VARIANT *pVariant );
|
||||
|
||||
void HB_EXPORT hb_ToOutDebug( const char * sTraceMsg, ... );
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
#if !defined( StringCchCat )
|
||||
#ifdef UNICODE
|
||||
#define StringCchCat(d,n,s) hb_wcncpy( (d), (s), (n) - 1 )
|
||||
#else
|
||||
#define StringCchCat(d,n,s) hb_xstrncpy( (d), (s), (n) - 1 )
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This function copies szText to destination buffer.
|
||||
* NOTE: Unlike the documentation for strncpy, this routine will always append
|
||||
* a null
|
||||
*/
|
||||
char * hb_xstrncpy( char * pDest, const char * pSource, ULONG ulLen )
|
||||
{
|
||||
ULONG ulDst, ulSrc;
|
||||
|
||||
pDest[ ulLen ] = 0;
|
||||
ulDst = strlen( pDest );
|
||||
if( ulDst < ulLen )
|
||||
{
|
||||
ulSrc = strlen( pSource );
|
||||
if( ulDst + ulSrc > ulLen )
|
||||
ulSrc = ulLen - ulDst;
|
||||
|
||||
memcpy( &pDest[ ulDst ], pSource, ulSrc );
|
||||
pDest[ ulDst + ulSrc ] = 0;
|
||||
}
|
||||
return pDest;
|
||||
}
|
||||
|
||||
|
||||
wchar_t *hb_wcncpy( wchar_t *dstW, const wchar_t *srcW, unsigned long ulLen )
|
||||
{
|
||||
ULONG ulDst, ulSrc;
|
||||
|
||||
dstW[ ulLen ] = 0;
|
||||
ulDst = lstrlenW( dstW );
|
||||
if( ulDst < ulLen )
|
||||
{
|
||||
ulSrc = lstrlenW( srcW );
|
||||
if( ulDst + ulSrc > ulLen )
|
||||
ulSrc = ulLen - ulDst;
|
||||
memcpy( &dstW[ ulDst ], srcW, ulSrc * sizeof( wchar_t ) );
|
||||
dstW[ ulDst + ulSrc ] = 0;
|
||||
}
|
||||
return dstW;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
// these 2 functions are required to send parameters by reference
|
||||
//
|
||||
@@ -515,7 +576,8 @@ static HRESULT SetupConnectionPoint( device_interface* pdevice_interface, REFIID
|
||||
HB_SYMBOL_UNUSED( riid );
|
||||
HB_SYMBOL_UNUSED( pn );
|
||||
|
||||
if( !( thisobj = ( IEventHandler * ) GlobalAlloc( GMEM_FIXED, sizeof( MyRealIEventHandler ) ) ) )
|
||||
thisobj = ( IEventHandler * ) GlobalAlloc( GMEM_FIXED, sizeof( MyRealIEventHandler ) );
|
||||
if( !( thisobj ) )
|
||||
{
|
||||
hr = E_OUTOFMEMORY;
|
||||
}
|
||||
@@ -636,15 +698,59 @@ HB_FUNC( HB_AX_SETUPCONNECTIONPOINT )
|
||||
//----------------------------------------------------------------------//
|
||||
HB_FUNC( HB_AX_ATLAXWININIT )
|
||||
{
|
||||
PATLAXWININIT AtlAxWinInit;
|
||||
char szLibName[ MAX_PATH + 1 ] = { 0 };
|
||||
BOOL bRet = FALSE;
|
||||
|
||||
if( !hLib )
|
||||
{
|
||||
PATLAXWININIT AtlAxWinInit;
|
||||
|
||||
#if 0
|
||||
/* the code below needs TCHAR strcat of szLibName and dll name */
|
||||
char szLibName[ MAX_PATH + 1 ] = { 0 };
|
||||
|
||||
GetSystemDirectory( szLibName, MAX_PATH );
|
||||
hb_strncat( szLibName, "\\atl.dll", sizeof( szLibName ) - 1 );
|
||||
hLib = LoadLibrary( ( LPCSTR ) szLibName );
|
||||
#endif
|
||||
|
||||
//hLib = LoadLibrary( TEXT( "atl.dll" ) );
|
||||
|
||||
#if 1
|
||||
TCHAR szLibName[ MAX_PATH + 1 ] = { 0 };
|
||||
|
||||
/* please always check if given function need size in TCHARs or bytes
|
||||
* in MS documentation.
|
||||
*/
|
||||
GetSystemDirectory( szLibName, MAX_PATH );
|
||||
|
||||
/* TEXT() macro can be used for literal (and only for literal) string
|
||||
* values. It creates array of TCHAR items with given text. It cannot
|
||||
* be used to ecapsulate non literal values. In different [x]Harbour
|
||||
* source code you may find things like TEXT( hb_parc( 1 ) ) - it's
|
||||
* a technical nonsense written by someone who has no idea what this
|
||||
* macro does.
|
||||
* Use new string functions (StringCchCat() in this case) which always
|
||||
* set trailing 0 in the given buffer just like hb_strn*() functions.
|
||||
* [l]str[n]cat() is absolute and should not be used by new code. It does
|
||||
* not guarantee buffer overflow protection and/or setting trailing 0.
|
||||
* StringCch*() functions operate on TCHAR types.
|
||||
*/
|
||||
StringCchCat( szLibName, MAX_PATH + 1, TEXT( "\\atl.dll" ) );
|
||||
|
||||
/* Please note that I intentionally removed any casting when szLibName
|
||||
* is passed to WinAPI functions. Such casting can pacify warnings so
|
||||
* program will be compiled but code will be still wrong so it does not
|
||||
* fix anything and only makes much harder later fixing when someone
|
||||
* will look for wrong code which is not UNICODE ready. The wrong casting
|
||||
* related to different character representations used only to pacify
|
||||
* warnings is the biggest problem in MS-Win 3-rd party code written
|
||||
* for [x]Harbour because it only hides bugs and then people have to
|
||||
* look for the code line by line to fix it. I dedicated above note to
|
||||
* developers of few well known MS-Win GUI projects for [x]Harbour.
|
||||
* Please remember about it.
|
||||
*/
|
||||
hLib = LoadLibrary( szLibName );
|
||||
#endif
|
||||
|
||||
if( hLib )
|
||||
{
|
||||
@@ -703,7 +809,8 @@ HB_FUNC( HB_AX_ATLAXCREATECONTROL )
|
||||
|
||||
if( hContainer )
|
||||
{
|
||||
SendMessage( ( HWND ) hContainer, ( UINT ) WM_SETFONT, ( WPARAM ) GetStockObject( DEFAULT_GUI_FONT ), ( LPARAM ) ( MAKELPARAM( FALSE, 0 ) ) );
|
||||
LPARAM lParam = MAKELPARAM( FALSE, 0 );
|
||||
SendMessage( ( HWND ) hContainer, ( UINT ) WM_SETFONT, ( WPARAM ) GetStockObject( DEFAULT_GUI_FONT ), lParam );
|
||||
uLen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, Caption, strlen( Caption )+1, NULL, 0 );
|
||||
wString = ( BSTR ) malloc( uLen * sizeof( WCHAR ) );
|
||||
MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, Caption, strlen( Caption )+1, wString, uLen );
|
||||
|
||||
426
harbour/contrib/gtwvg/wvgstatb.prg
Normal file
426
harbour/contrib/gtwvg/wvgstatb.prg
Normal file
@@ -0,0 +1,426 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Harbour Project source code:
|
||||
* Source file for the Wvg*Classes
|
||||
*
|
||||
* Copyright 2008 Pritpal Bedi <pritpal@vouchcac.com>
|
||||
* http://www.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++ xbpStatusBar Compatible Class
|
||||
//
|
||||
// Pritpal Bedi <pritpal@vouchcac.com>
|
||||
// 25Nov2008
|
||||
//
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
#include 'hbclass.ch'
|
||||
#include 'common.ch'
|
||||
#include 'inkey.ch'
|
||||
#include 'hbgtinfo.ch'
|
||||
|
||||
#include 'hbgtwvg.ch'
|
||||
#include 'wvtwin.ch'
|
||||
#include 'wvgparts.ch'
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
CLASS WvgStatusBar INHERIT WvgActiveXControl
|
||||
|
||||
DATA caption INIT ''
|
||||
DATA sizeGrip INIT .T.
|
||||
|
||||
DATA aItems INIT {}
|
||||
|
||||
METHOD new()
|
||||
METHOD create()
|
||||
METHOD configure()
|
||||
METHOD destroy()
|
||||
|
||||
METHOD addItem()
|
||||
METHOD delItem()
|
||||
METHOD getItem()
|
||||
METHOD clear()
|
||||
METHOD numItems() INLINE Len( ::aItems )
|
||||
|
||||
METHOD panelClick() SETGET
|
||||
METHOD panelDblClick() SETGET
|
||||
|
||||
ENDCLASS
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgStatusBar
|
||||
|
||||
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
::WvgActiveXControl:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
::style := WS_CHILD + WS_BORDER + SBARS_TOOLTIPS
|
||||
::className := STATUSCLASSNAME
|
||||
::objType := objTypeStatusBar
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgStatusBar
|
||||
|
||||
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
IF ::visible
|
||||
::style += WS_VISIBLE
|
||||
ENDIF
|
||||
IF ::sizeGrip
|
||||
::style += SBARS_SIZEGRIP
|
||||
ENDIF
|
||||
|
||||
::oParent:AddChild( SELF )
|
||||
|
||||
::createControl()
|
||||
|
||||
::addItem( , , , , , -1 )
|
||||
|
||||
IF ::visible
|
||||
::show()
|
||||
ENDIF
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgStatusBar
|
||||
|
||||
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD destroy() CLASS WvgStatusBar
|
||||
LOCAL i, nItems
|
||||
|
||||
IF ( nItems := Len( ::aItems ) ) > 0
|
||||
FOR i := 1 TO nItems
|
||||
|
||||
NEXT
|
||||
ENDIF
|
||||
|
||||
IF Win_IsWindow( ::hWnd )
|
||||
Win_DestroyWindow( ::hWnd )
|
||||
ENDIF
|
||||
|
||||
RETURN NIL
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD addItem( cCaption, xImage, cDLL, nStyle, cKey, nMode ) CLASS WvgStatusBar
|
||||
LOCAL oPanel, lSuccess
|
||||
|
||||
DEFAULT nMode TO 0
|
||||
|
||||
HB_SYMBOL_UNUSED( xImage )
|
||||
HB_SYMBOL_UNUSED( cDLL )
|
||||
|
||||
oPanel := WvgStatusBarPanel():new( cCaption, nStyle, cKey )
|
||||
oPanel:oParent := self
|
||||
|
||||
oPanel:index := ::numItems + 1
|
||||
|
||||
lSuccess := Wvg_StatusBarCreatePanel( ::hWnd, nMode )
|
||||
|
||||
IF lSuccess
|
||||
aadd( ::aItems, oPanel )
|
||||
ELSE
|
||||
RETURN nil
|
||||
endif
|
||||
|
||||
RETURN oPanel
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD delItem( nItemORcKey ) CLASS WvgStatusBar
|
||||
LOCAL nIndex := 0
|
||||
|
||||
IF hb_isNumeric( nItemORcKey )
|
||||
nIndex := ascan( ::aItems, {|o| o:key == nItemORcKey } )
|
||||
ELSEIF hb_isNumeric( nItemORcKey )
|
||||
nIndex := nItemORcKey
|
||||
ENDIF
|
||||
|
||||
IF nIndex > 0
|
||||
// Delete panel by window
|
||||
|
||||
adel( ::aItems, nIndex )
|
||||
asize( ::aItems, len( ::aItems ) - 1 )
|
||||
ENDIF
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD getItem( nItemORcKey ) CLASS WvgStatusBar
|
||||
LOCAL nIndex := 0, oPanel
|
||||
|
||||
IF hb_isChar( nItemORcKey )
|
||||
nIndex := ascan( ::aItems, {|o| o:key == nItemORcKey } )
|
||||
|
||||
ELSEIF hb_isNumeric( nItemORcKey )
|
||||
nIndex := nItemORcKey
|
||||
|
||||
ENDIF
|
||||
|
||||
IF nIndex > 0
|
||||
oPanel := ::aItems[ nIndex ]
|
||||
ENDIF
|
||||
|
||||
RETURN oPanel
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD clear() CLASS WvgStatusBar
|
||||
LOCAL i
|
||||
|
||||
FOR i := 1 TO ::numItems
|
||||
// Remove off window
|
||||
|
||||
NEXT
|
||||
|
||||
::aItems := {}
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD panelClick( xParam ) CLASS WvgStatusBar
|
||||
|
||||
IF hb_isBlock( xParam ) .or. hb_isNil( xParam )
|
||||
::sl_lbClick := xParam
|
||||
ENDIF
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD panelDblClick( xParam ) CLASS WvgStatusBar
|
||||
|
||||
IF hb_isBlock( xParam ) .or. hb_isNil( xParam )
|
||||
::sl_lbDblClick := xParam
|
||||
ENDIF
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
//
|
||||
// WvgToolbarButton() Class compatible with XbpToolbarButton()
|
||||
//
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
CLASS WvgStatusBarPanel
|
||||
|
||||
DATA alignment INIT WVGALIGN_LEFT
|
||||
DATA autosize INIT WVGSTATUSBAR_AUTOSIZE_NONE
|
||||
DATA bevel INIT WVGSTATUSBAR_BEVEL_INSET
|
||||
DATA enabled INIT .T.
|
||||
DATA index INIT 0
|
||||
DATA key INIT ''
|
||||
DATA style INIT WVGSTATUSBAR_PANEL_TEXT
|
||||
DATA sl_caption INIT ''
|
||||
DATA image INIT NIL
|
||||
DATA tooltipText INIT ''
|
||||
DATA visible INIT .T.
|
||||
DATA left INIT 0
|
||||
DATA width INIT 0
|
||||
DATA minWidth INIT 0
|
||||
|
||||
METHOD new()
|
||||
METHOD caption() SETGET
|
||||
|
||||
DATA oParent
|
||||
|
||||
ENDCLASS
|
||||
//----------------------------------------------------------------------//
|
||||
METHOD new( cCaption, nStyle, cKey ) CLASS WvgStatusBarPanel
|
||||
|
||||
DEFAULT cCaption TO ::sl_caption
|
||||
DEFAULT nStyle TO ::style
|
||||
DEFAULT cKey TO ::key
|
||||
|
||||
::sl_caption := cCaption
|
||||
::style := nStyle
|
||||
::key := cKey
|
||||
|
||||
RETURN Self
|
||||
//----------------------------------------------------------------------//
|
||||
METHOD caption( cCaption ) CLASS WvgStatusBarPanel
|
||||
|
||||
IF cCaption == NIL
|
||||
RETURN ::sl_caption
|
||||
|
||||
ELSE
|
||||
DEFAULT cCaption TO ::sl_caption
|
||||
|
||||
::sl_caption := cCaption
|
||||
|
||||
Wvg_StatusBarSetText( ::oParent:hWnd, ::index, cCaption )
|
||||
ENDIF
|
||||
|
||||
RETURN Self
|
||||
//----------------------------------------------------------------------//
|
||||
// MSDN on StatusBar Control
|
||||
//----------------------------------------------------------------------//
|
||||
#if 0
|
||||
|
||||
Messages
|
||||
========
|
||||
|
||||
SB_GETBORDERS
|
||||
Retrieves the current widths of the horizontal and vertical borders of a status window.
|
||||
|
||||
SB_GETICON
|
||||
Retrieves the icon for a part in a status bar.
|
||||
|
||||
SB_GETPARTS
|
||||
Retrieves a count of the parts in a status window. The message also retrieves the coordinate
|
||||
of the right edge of the specified number of parts.
|
||||
|
||||
SB_GETRECT
|
||||
Retrieves the bounding rectangle of a part in a status window.
|
||||
|
||||
SB_GETTEXT
|
||||
The SB_GETTEXT message retrieves the text from the specified part of a status window.
|
||||
|
||||
SB_GETTEXTLENGTH
|
||||
The SB_GETTEXTLENGTH message retrieves the length, in characters, of the text from the specified
|
||||
part of a status window.
|
||||
|
||||
SB_GETTIPTEXT
|
||||
Retrieves the ToolTip text for a part in a status bar. The status bar must be created with the
|
||||
SBT_TOOLTIPS style to enable ToolTips.
|
||||
|
||||
SB_GETUNICODEFORMAT
|
||||
Retrieves the Unicode character format flag for the control.
|
||||
|
||||
SB_ISSIMPLE
|
||||
Checks a status bar control to determine if it is in simple mode.
|
||||
|
||||
SB_SETBKCOLOR
|
||||
Sets the background color in a status bar.
|
||||
|
||||
SB_SETICON
|
||||
Sets the icon for a part in a status bar.
|
||||
|
||||
SB_SETMINHEIGHT
|
||||
Sets the minimum height of a status windows drawing area.
|
||||
|
||||
SB_SETPARTS
|
||||
Sets the number of parts in a status window and the coordinate of the right edge of each part.
|
||||
|
||||
SB_SETTEXT
|
||||
The SB_SETTEXT message sets the text in the specified part of a status window.
|
||||
|
||||
SB_SETTIPTEXT
|
||||
Sets the ToolTip text for a part in a status bar. The status bar must have been created with
|
||||
the SBT_TOOLTIPS style to enable ToolTips.
|
||||
|
||||
SB_SETUNICODEFORMAT
|
||||
Sets the Unicode character format flag for the control. This message allows you to change the
|
||||
character set used by the control at run time rather than having to re-create the control.
|
||||
|
||||
SB_SIMPLE
|
||||
Specifies whether a status window displays simple text or displays all window parts set by a
|
||||
previous SB_SETPARTS message.
|
||||
|
||||
Notifications
|
||||
=============
|
||||
|
||||
NM_CLICK (status bar)
|
||||
Notifies the parent window of a status bar control that the user has clicked the left mouse
|
||||
button within the control. NM_CLICK (status bar) is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
NM_DBLCLK (status bar)
|
||||
Notifies the parent window of a a status bar control that the user has double-clicked the
|
||||
left mouse button within the control. This notification is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
NM_RCLICK (status bar)
|
||||
Notifies the parent window of a status bar control that the user has clicked the right mouse
|
||||
button within the control. This notification is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
NM_RDBLCLK (status bar)
|
||||
Notifies the parent windows of a status bar control that the user has double-clicked the right
|
||||
mouse button within the control. NM_RDBLCLK (status bar) is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
SBN_SIMPLEMODECHANGE
|
||||
Sent by a status bar control when the simple mode changes due to a SB_SIMPLE message.
|
||||
This notification is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
Styles
|
||||
======
|
||||
|
||||
SBARS_SIZEGRIP
|
||||
The status bar control will include a sizing grip at the right end of the status bar.
|
||||
A sizing grip is similar to a sizing border; it is a rectangular area that the user can click and
|
||||
drag to resize the parent window.
|
||||
|
||||
SBT_TOOLTIPS
|
||||
Version 4.71.Use this style to enable ToolTips.
|
||||
|
||||
SBARS_TOOLTIPS
|
||||
Version 5.80.Identical to SBT_TOOLTIPS. Use this flag for versions 5.00 or later.
|
||||
|
||||
#endif
|
||||
//----------------------------------------------------------------------//
|
||||
298
harbour/contrib/gtwvg/wvgstatc.prg
Normal file
298
harbour/contrib/gtwvg/wvgstatc.prg
Normal file
@@ -0,0 +1,298 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Harbour Project source code:
|
||||
* Source file for the Wvg*Classes
|
||||
*
|
||||
* Copyright 2008 Pritpal Bedi <pritpal@vouchcac.com>
|
||||
* http://www.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++ xbpTreeView compatible Class
|
||||
//
|
||||
// Pritpal Bedi <pritpal@vouchcac.com>
|
||||
// 26Nov2008
|
||||
//
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
#include 'hbclass.ch'
|
||||
#include 'common.ch'
|
||||
#include 'inkey.ch'
|
||||
#include 'hbgtinfo.ch'
|
||||
|
||||
#include 'hbgtwvg.ch'
|
||||
#include 'wvtwin.ch'
|
||||
#include 'wvgparts.ch'
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
CLASS WvgStatic INHERIT WvgWindow
|
||||
|
||||
DATA autoSize INIT .F.
|
||||
DATA caption INIT ''
|
||||
DATA clipParent INIT .T.
|
||||
DATA clipSiblings INIT .F.
|
||||
DATA options INIT WVGSTATIC_TEXT_LEFT
|
||||
DATA type INIT WVGSTATIC_TYPE_TEXT
|
||||
|
||||
|
||||
METHOD new()
|
||||
METHOD create()
|
||||
METHOD configure()
|
||||
METHOD destroy()
|
||||
|
||||
METHOD setCaption( xCaption, cDll )
|
||||
|
||||
ENDCLASS
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgStatic
|
||||
|
||||
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
::WvgWindow:init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
// + SS_NOTIFY + SS_ETCHEDFRAME //SS_SUNKEN //+ SS_WHITERECT
|
||||
//
|
||||
::style := WS_CHILD + WS_CLIPCHILDREN
|
||||
::className := 'STATIC'
|
||||
::objType := objTypeStatic
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgStatic
|
||||
LOCAL wm_:= {}
|
||||
|
||||
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
IF ::visible
|
||||
::style += WS_VISIBLE
|
||||
ENDIF
|
||||
|
||||
SWITCH ::type
|
||||
CASE WVGSTATIC_TYPE_TEXT
|
||||
IF ( Win_AND( ::options, WVGSTATIC_TEXT_LEFT ) == WVGSTATIC_TEXT_LEFT )
|
||||
::style += SS_LEFT + SS_LEFTNOWORDWRAP
|
||||
ENDIF
|
||||
IF ( Win_AND( ::options, WVGSTATIC_TEXT_RIGHT ) == WVGSTATIC_TEXT_RIGHT )
|
||||
::style += SS_RIGHT + SS_LEFTNOWORDWRAP
|
||||
ENDIF
|
||||
IF ( Win_AND( ::options, WVGSTATIC_TEXT_CENTER ) == WVGSTATIC_TEXT_CENTER )
|
||||
::style += SS_CENTER + SS_LEFTNOWORDWRAP
|
||||
ENDIF
|
||||
IF ( Win_AND( ::options, WVGSTATIC_TEXT_WORDBREAK ) == WVGSTATIC_TEXT_WORDBREAK )
|
||||
::style -= SS_LEFTNOWORDWRAP
|
||||
ENDIF
|
||||
EXIT
|
||||
CASE WVGSTATIC_TYPE_GROUPBOX
|
||||
EXIT
|
||||
CASE WVGSTATIC_TYPE_ICON
|
||||
EXIT
|
||||
CASE WVGSTATIC_TYPE_SYSICON
|
||||
EXIT
|
||||
CASE WVGSTATIC_TYPE_BITMAP
|
||||
IF ::options == WVGSTATIC_BITMAP_TILED
|
||||
|
||||
ELSEIF ::options == WVGSTATIC_BITMAP_SCALED
|
||||
|
||||
ELSE
|
||||
|
||||
ENDIF
|
||||
EXIT
|
||||
CASE WVGSTATIC_TYPE_FGNDRECT
|
||||
EXIT
|
||||
CASE WVGSTATIC_TYPE_BGNDRECT
|
||||
EXIT
|
||||
CASE WVGSTATIC_TYPE_FGNDFRAME
|
||||
EXIT
|
||||
CASE WVGSTATIC_TYPE_BGNDFRAME
|
||||
EXIT
|
||||
CASE WVGSTATIC_TYPE_HALFTONERECT
|
||||
EXIT
|
||||
CASE WVGSTATIC_TYPE_HALFTONEFRAME
|
||||
EXIT
|
||||
CASE WVGSTATIC_TYPE_RAISEDBOX
|
||||
EXIT
|
||||
CASE WVGSTATIC_TYPE_RECESSEDBOX
|
||||
EXIT
|
||||
CASE WVGSTATIC_TYPE_RAISEDRECT
|
||||
EXIT
|
||||
CASE WVGSTATIC_TYPE_RECESSEDRECT
|
||||
EXIT
|
||||
CASE WVGSTATIC_TYPE_RAISEDLINE
|
||||
EXIT
|
||||
CASE WVGSTATIC_TYPE_RECESSEDLINE
|
||||
EXIT
|
||||
END
|
||||
|
||||
::createControl()
|
||||
|
||||
IF Win_IsWindow( ::hWnd )
|
||||
::oParent:addChild( SELF )
|
||||
|
||||
::setCaption( ::caption )
|
||||
IF ::visible
|
||||
::show()
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgStatic
|
||||
|
||||
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD destroy() CLASS WvgStatic
|
||||
|
||||
IF len( ::aChildren ) > 0
|
||||
aeval( ::aChildren, {|o| o:destroy() } )
|
||||
ENDIF
|
||||
|
||||
IF Win_IsWindow( ::hWnd )
|
||||
Win_DestroyWindow( ::hWnd )
|
||||
ENDIF
|
||||
|
||||
RETURN NIL
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD setCaption( xCaption, cDll )
|
||||
|
||||
HB_SYMBOL_UNUSED( xCaption )
|
||||
HB_SYMBOL_UNUSED( cDll )
|
||||
|
||||
DEFAULT xCaption TO ::caption
|
||||
::caption := xCaption
|
||||
|
||||
DO CASE
|
||||
CASE ::type == WVGSTATIC_TYPE_TEXT
|
||||
Win_SendMessageText( ::hWnd, WM_SETTEXT, 0, ::caption )
|
||||
|
||||
ENDCASE
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
// MSDN on Static Control
|
||||
//----------------------------------------------------------------------//
|
||||
#if 0
|
||||
|
||||
Static Control Styles
|
||||
Using Static Controls
|
||||
|
||||
This topic provides an example that uses a static control.
|
||||
|
||||
|
||||
|
||||
Messages
|
||||
========
|
||||
|
||||
STM_GETICON
|
||||
An application sends the STM_GETICON message to retrieve a handle to the icon associated
|
||||
with a static control that has the SS_ICON style.
|
||||
|
||||
STM_GETIMAGE
|
||||
An application sends an STM_GETIMAGE message to retrieve a handle to the image
|
||||
(icon or bitmap) associated with a static control.
|
||||
|
||||
STM_SETICON
|
||||
An application sends the STM_SETICON message to associate an icon with an icon control.
|
||||
|
||||
STM_SETIMAGE
|
||||
An application sends an STM_SETIMAGE message to associate a new image with a static control.
|
||||
|
||||
|
||||
Notifications
|
||||
=============
|
||||
|
||||
STN_CLICKED
|
||||
The STN_CLICKED notification message is sent when the user clicks a static control
|
||||
that has the SS_NOTIFY style. The parent window of the control receives this
|
||||
notification message through the WM_COMMAND message.
|
||||
|
||||
STN_DBLCLK
|
||||
The STN_DBLCLK notification message is sent when the user double-clicks a static
|
||||
control that has the SS_NOTIFY style. The parent window of the control receives this
|
||||
notification message through the WM_COMMAND message.
|
||||
|
||||
STN_DISABLE
|
||||
The STN_DISABLE notification message is sent when a static control is disabled.
|
||||
The static control must have the SS_NOTIFY style to receive this notification message.
|
||||
The parent window of the control receives this notification message through the WM_COMMAND message.
|
||||
|
||||
STN_ENABLE
|
||||
The STN_ENABLE notification message is sent when a static control is enabled.
|
||||
The static control must have the SS_NOTIFY style to receive this notification message.
|
||||
The parent window of the control receives this notification message through the WM_COMMAND message.
|
||||
|
||||
WM_CTLCOLORSTATIC
|
||||
A static control, or an edit control that is read-only or disabled, sends the
|
||||
WM_CTLCOLORSTATIC message to its parent window when the control is about to be drawn.
|
||||
By responding to this message, the parent window can use the specified device context
|
||||
handle to set the text and background colors of the static control.
|
||||
A window receives this message through its WindowProc function.
|
||||
|
||||
|
||||
#endif
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
|
||||
|
||||
@@ -67,10 +67,12 @@
|
||||
|
||||
#include 'hbclass.ch'
|
||||
#include 'common.ch'
|
||||
#include 'inkey.ch'
|
||||
#include 'hbgtinfo.ch'
|
||||
|
||||
#include 'hbgtwvg.ch'
|
||||
#include 'wvtwin.ch'
|
||||
#include 'inkey.ch'
|
||||
#include 'wvgparts.ch'
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
@@ -109,7 +111,6 @@ CLASS WvgToolBar INHERIT WvgActiveXControl
|
||||
METHOD setPosAndSize()
|
||||
METHOD setSize()
|
||||
|
||||
DATA sl_buttonClick
|
||||
DATA sl_change
|
||||
DATA sl_buttonMenuClick
|
||||
DATA sl_buttonDropDown
|
||||
@@ -119,25 +120,12 @@ CLASS WvgToolBar INHERIT WvgActiveXControl
|
||||
METHOD buttonMenuClick() SETGET
|
||||
METHOD buttonDropDown() SETGET
|
||||
|
||||
|
||||
ENDCLASS
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgToolBar
|
||||
|
||||
DEFAULT oParent TO ::oParent
|
||||
DEFAULT oOwner TO ::oOwner
|
||||
DEFAULT aPos TO ::aPos
|
||||
DEFAULT aSize TO ::aSize
|
||||
DEFAULT aPresParams TO ::aPresParams
|
||||
DEFAULT lVisible TO ::visible
|
||||
|
||||
::oParent := oParent
|
||||
::oOwner := oOwner
|
||||
::aPos := aPos
|
||||
::aSize := aSize
|
||||
::aPresParams := aPresParams
|
||||
::visible := lVisible
|
||||
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
::WvgActiveXControl:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
@@ -152,19 +140,7 @@ METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgToolB
|
||||
|
||||
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgToolBar
|
||||
|
||||
DEFAULT oParent TO ::oParent
|
||||
DEFAULT oOwner TO ::oOwner
|
||||
DEFAULT aPos TO ::aPos
|
||||
DEFAULT aSize TO ::aSize
|
||||
DEFAULT aPresParams TO ::aPresParams
|
||||
DEFAULT lVisible TO ::visible
|
||||
|
||||
::oParent := oParent
|
||||
::oOwner := oOwner
|
||||
::aPos := aPos
|
||||
::aSize := aSize
|
||||
::aPresParams := aPresParams
|
||||
::visible := lVisible
|
||||
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
IF ::visible
|
||||
::style += WS_VISIBLE
|
||||
@@ -191,10 +167,6 @@ METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgTo
|
||||
::sendMessage( TB_SETMAXTEXTROWS, 0, 0 )
|
||||
ENDIF
|
||||
|
||||
//::sendMessage( TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DOUBLEBUFFER )
|
||||
//::sendMessage( TB_SETPADDING , 0, Win_MakeLParam( 3,3 ) )
|
||||
//::sendMessage( TB_SETLISTGAP, 4, 0 ) // vista
|
||||
|
||||
IF ::visible
|
||||
::show()
|
||||
ENDIF
|
||||
@@ -205,19 +177,7 @@ METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgTo
|
||||
|
||||
METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgToolBar
|
||||
|
||||
DEFAULT oParent TO ::oParent
|
||||
DEFAULT oOwner TO ::oOwner
|
||||
DEFAULT aPos TO ::aPos
|
||||
DEFAULT aSize TO ::aSize
|
||||
DEFAULT aPresParams TO ::aPresParams
|
||||
DEFAULT lVisible TO ::visible
|
||||
|
||||
::oParent := oParent
|
||||
::oOwner := oOwner
|
||||
::aPos := aPos
|
||||
::aSize := aSize
|
||||
::aPresParams := aPresParams
|
||||
::visible := lVisible
|
||||
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
|
||||
RETURN Self
|
||||
|
||||
@@ -240,6 +200,10 @@ METHOD destroy() CLASS WvgToolBar
|
||||
NEXT
|
||||
ENDIF
|
||||
|
||||
IF Win_IsWindow( ::hWnd )
|
||||
Win_DestroyWindow( ::hWnd )
|
||||
ENDIF
|
||||
|
||||
RETURN NIL
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
@@ -251,7 +215,6 @@ METHOD addItem( cCaption, xImage, xDisabledImage, xHotImage, cDLL, nStyle, cKey
|
||||
HB_SYMBOL_UNUSED( xHotImage )
|
||||
HB_SYMBOL_UNUSED( cDLL )
|
||||
|
||||
|
||||
oBtn := WvgToolbarButton():new( cCaption, nStyle, cKey )
|
||||
|
||||
oBtn:index := ::numItems + 1
|
||||
@@ -274,7 +237,11 @@ METHOD addItem( cCaption, xImage, xDisabledImage, xHotImage, cDLL, nStyle, cKey
|
||||
|
||||
aadd( ::aItems, { oBtn:command, oBtn } )
|
||||
|
||||
RETURN Self
|
||||
//::sendMessage( TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DOUBLEBUFFER )
|
||||
//::sendMessage( TB_SETPADDING, 0, MAKELPARAM( 3,3 ) )
|
||||
//::sendMessage( TB_SETLISTGAP, 4, 0 ) // vista
|
||||
|
||||
RETURN oBtn
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
@@ -337,7 +304,7 @@ METHOD setSize() CLASS WvgToolBar
|
||||
METHOD buttonClick( xParam ) CLASS WvgToolBar
|
||||
|
||||
IF hb_isBlock( xParam ) .or. hb_isNil( xParam )
|
||||
::sl_buttonClick := xParam
|
||||
::sl_lbClick := xParam
|
||||
ENDIF
|
||||
|
||||
RETURN Self
|
||||
@@ -420,3 +387,596 @@ METHOD new( cCaption, nStyle, cKey ) CLASS WvgToolbarButton
|
||||
|
||||
RETURN Self
|
||||
//----------------------------------------------------------------------//
|
||||
// MSDN on ToolBar Control
|
||||
//----------------------------------------------------------------------//
|
||||
#if 0
|
||||
|
||||
MESSAGES
|
||||
========
|
||||
|
||||
TB_ADDBITMAP
|
||||
Adds one or more images to the list of button images available for a toolbar.
|
||||
|
||||
TB_ADDBUTTONS
|
||||
Adds one or more buttons to a toolbar.
|
||||
|
||||
TB_ADDSTRING
|
||||
Adds a new string to the toolbars string pool.
|
||||
|
||||
TB_AUTOSIZE
|
||||
Causes a toolbar to be resized.
|
||||
|
||||
TB_BUTTONCOUNT
|
||||
Retrieves a count of the buttons currently in the toolbar.
|
||||
|
||||
TB_BUTTONSTRUCTSIZE
|
||||
Specifies the size of the TBBUTTON structure.
|
||||
|
||||
TB_CHANGEBITMAP
|
||||
Changes the bitmap for a button in a toolbar.
|
||||
|
||||
TB_CHECKBUTTON
|
||||
Checks or unchecks a given button in a toolbar.
|
||||
|
||||
TB_COMMANDTOINDEX
|
||||
Retrieves the zero-based index for the button associated with the specified command identifier.
|
||||
|
||||
TB_CUSTOMIZE
|
||||
Displays the Customize Toolbar dialog box.
|
||||
|
||||
TB_DELETEBUTTON
|
||||
Deletes a button from the toolbar.
|
||||
|
||||
TB_ENABLEBUTTON
|
||||
Enables or disables the specified button in a toolbar.
|
||||
|
||||
TB_GETANCHORHIGHLIGHT
|
||||
Retrieves the anchor highlight setting for a toolbar.
|
||||
|
||||
TB_GETBITMAP
|
||||
Retrieves the index of the bitmap associated with a button in a toolbar.
|
||||
|
||||
TB_GETBITMAPFLAGS
|
||||
Retrieves the flags that describe the type of bitmap to be used.
|
||||
|
||||
TB_GETBUTTON
|
||||
Retrieves information about the specified button in a toolbar.
|
||||
|
||||
TB_GETBUTTONINFO
|
||||
Retrieves extended information for a button in a toolbar.
|
||||
|
||||
TB_GETBUTTONSIZE
|
||||
Retrieves the current width and height of toolbar buttons, in pixels.
|
||||
|
||||
TB_GETBUTTONTEXT
|
||||
Retrieves the display text of a button on a toolbar.
|
||||
|
||||
TB_GETCOLORSCHEME
|
||||
Retrieves the color scheme information from the toolbar control.
|
||||
|
||||
TB_GETDISABLEDIMAGELIST
|
||||
Retrieves the image list that a toolbar control uses to display inactive buttons.
|
||||
|
||||
TB_GETEXTENDEDSTYLE
|
||||
Retrieves the extended styles for a toolbar control.
|
||||
|
||||
TB_GETHOTIMAGELIST
|
||||
Retrieves the image list that a toolbar control uses to display hot buttons.
|
||||
|
||||
TB_GETHOTITEM
|
||||
Retrieves the index of the hot item in a toolbar.
|
||||
|
||||
TB_GETIDEALSIZE
|
||||
Gets the ideal size of the toolbar.
|
||||
|
||||
TB_GETIMAGELIST
|
||||
Retrieves the image list that a toolbar control uses to display buttons in their default state.
|
||||
A toolbar control uses this image list to display buttons when they are not hot or disabled.
|
||||
|
||||
TB_GETIMAGELISTCOUNT
|
||||
Gets the number of image lists associated with the toolbar.
|
||||
|
||||
TB_GETINSERTMARK
|
||||
Retrieves the current insertion mark for the toolbar.
|
||||
|
||||
TB_GETINSERTMARKCOLOR
|
||||
Retrieves the color used to draw the insertion mark for the toolbar.
|
||||
|
||||
TB_GETITEMDROPDOWNRECT
|
||||
|
||||
Gets the bounding rectangle of the dropdown window for a toolbar item with style BTNS_DROPDOWN.
|
||||
|
||||
TB_GETITEMRECT
|
||||
Retrieves the bounding rectangle of a button in a toolbar.
|
||||
|
||||
TB_GETMAXSIZE
|
||||
Retrieves the total size of all of the visible buttons and separators in the toolbar.
|
||||
|
||||
TB_GETMETRICS
|
||||
Retrieves the metrics of a toolbar control.
|
||||
|
||||
TB_GETOBJECT
|
||||
Retrieves the IDropTarget for a toolbar control.
|
||||
|
||||
TB_GETPADDING
|
||||
Retrieves the padding for a toolbar control.
|
||||
|
||||
TB_GETPRESSEDIMAGELIST
|
||||
Gets the image list that a toolbar control uses to display buttons in a pressed state.
|
||||
|
||||
TB_GETRECT
|
||||
Retrieves the bounding rectangle for a specified toolbar button.
|
||||
|
||||
TB_GETROWS
|
||||
Retrieves the number of rows of buttons in a toolbar with the TBSTYLE_WRAPABLE style.
|
||||
|
||||
TB_GETSTATE
|
||||
Retrieves information about the state of the specified button in a toolbar, such as whether it
|
||||
is enabled, pressed, or checked.
|
||||
|
||||
TB_GETSTRING
|
||||
Retrieves a string from a toolbars string pool.
|
||||
|
||||
TB_GETSTYLE
|
||||
Retrieves the styles currently in use for a toolbar control.
|
||||
|
||||
TB_GETTEXTROWS
|
||||
Retrieves the maximum number of text rows that can be displayed on a toolbar button.
|
||||
|
||||
TB_GETTOOLTIPS
|
||||
Retrieves the handle to the ToolTip control, if any, associated with the toolbar.
|
||||
|
||||
TB_GETUNICODEFORMAT
|
||||
Retrieves the Unicode character format flag for the control.
|
||||
|
||||
TB_HIDEBUTTON
|
||||
Hides or shows the specified button in a toolbar.
|
||||
|
||||
TB_HITTEST
|
||||
Determines where a point lies in a toolbar control.
|
||||
|
||||
TB_INDETERMINATE
|
||||
Sets or clears the indeterminate state of the specified button in a toolbar.
|
||||
|
||||
TB_INSERTBUTTON
|
||||
Inserts a button in a toolbar.
|
||||
|
||||
TB_INSERTMARKHITTEST
|
||||
Retrieves the insertion mark information for a point in a toolbar.
|
||||
|
||||
TB_ISBUTTONCHECKED
|
||||
Determines whether the specified button in a toolbar is checked.
|
||||
|
||||
TB_ISBUTTONENABLED
|
||||
Determines whether the specified button in a toolbar is enabled.
|
||||
|
||||
TB_ISBUTTONHIDDEN
|
||||
Determines whether the specified button in a toolbar is hidden.
|
||||
|
||||
TB_ISBUTTONHIGHLIGHTED
|
||||
Checks the highlight state of a toolbar button.
|
||||
|
||||
TB_ISBUTTONINDETERMINATE
|
||||
Determines whether the specified button in a toolbar is indeterminate.
|
||||
|
||||
TB_ISBUTTONPRESSED
|
||||
Determines whether the specified button in a toolbar is pressed.
|
||||
|
||||
TB_LOADIMAGES
|
||||
Loads system-defined button images into a toolbar controls image list.
|
||||
|
||||
TB_MAPACCELERATOR
|
||||
Determines the ID of the button that corresponds to the specified accelerator character.
|
||||
|
||||
TB_MARKBUTTON
|
||||
Sets the highlight state of a given button in a toolbar control.
|
||||
|
||||
TB_MOVEBUTTON
|
||||
Moves a button from one index to another.
|
||||
|
||||
TB_PRESSBUTTON
|
||||
Presses or releases the specified button in a toolbar.
|
||||
|
||||
TB_REPLACEBITMAP
|
||||
Replaces an existing bitmap with a new bitmap.
|
||||
|
||||
TB_SAVERESTORE
|
||||
Send this message to initiate saving or restoring a toolbar state.
|
||||
|
||||
TB_SETANCHORHIGHLIGHT
|
||||
Sets the anchor highlight setting for a toolbar.
|
||||
|
||||
TB_SETBITMAPSIZE
|
||||
Sets the size of the bitmapped images to be added to a toolbar.
|
||||
|
||||
TB_SETBUTTONINFO
|
||||
Sets the information for an existing button in a toolbar.
|
||||
|
||||
TB_SETBUTTONSIZE
|
||||
Sets the size of buttons on a toolbar.
|
||||
|
||||
TB_SETBUTTONWIDTH
|
||||
Sets the minimum and maximum button widths in the toolbar control.
|
||||
|
||||
TB_SETCMDID
|
||||
Sets the command identifier of a toolbar button.
|
||||
|
||||
TB_SETCOLORSCHEME
|
||||
Sets the color scheme information for the toolbar control.
|
||||
|
||||
TB_SETDISABLEDIMAGELIST
|
||||
Sets the image list that the toolbar control will use to display disabled buttons.
|
||||
|
||||
TB_SETDRAWTEXTFLAGS
|
||||
Sets the text drawing flags for the toolbar.
|
||||
|
||||
TB_SETEXTENDEDSTYLE
|
||||
Sets the extended styles for a toolbar control.
|
||||
|
||||
TB_SETHOTIMAGELIST
|
||||
Sets the image list that the toolbar control will use to display hot buttons.
|
||||
|
||||
TB_SETHOTITEM
|
||||
Sets the hot item in a toolbar.
|
||||
|
||||
TB_SETHOTITEM2
|
||||
Sets the hot item in a toolbar.
|
||||
|
||||
TB_SETIMAGELIST
|
||||
Sets the image list that the toolbar uses to display buttons that are in their default state.
|
||||
|
||||
TB_SETINDENT
|
||||
Sets the indentation for the first button in a toolbar control.
|
||||
|
||||
TB_SETINSERTMARK
|
||||
Sets the current insertion mark for the toolbar.
|
||||
|
||||
TB_SETINSERTMARKCOLOR
|
||||
Sets the color used to draw the insertion mark for the toolbar.
|
||||
|
||||
TB_SETLISTGAP
|
||||
Sets the distance between the toolbar buttons on a specific toolbar.
|
||||
|
||||
TB_SETMAXTEXTROWS
|
||||
Sets the maximum number of text rows displayed on a toolbar button.
|
||||
|
||||
TB_SETMETRICS
|
||||
Sets the metrics of a toolbar control.
|
||||
|
||||
TB_SETPADDING
|
||||
Sets the padding for a toolbar control.
|
||||
|
||||
TB_SETPARENT
|
||||
Sets the window to which the toolbar control sends notification messages.
|
||||
|
||||
TB_SETPRESSEDIMAGELIST
|
||||
Sets the image list that the toolbar uses to display buttons that are in a pressed state.
|
||||
|
||||
TB_SETROWS
|
||||
Sets the number of rows of buttons in a toolbar.
|
||||
|
||||
TB_SETSTATE
|
||||
Sets the state for the specified button in a toolbar.
|
||||
|
||||
TB_SETSTYLE
|
||||
Sets the style for a toolbar control.
|
||||
|
||||
TB_SETTOOLTIPS
|
||||
Associates a ToolTip control with a toolbar.
|
||||
|
||||
TB_SETUNICODEFORMAT
|
||||
Sets the Unicode character format flag for the control. This message allows you to change the
|
||||
character set used by the control at run time rather than having to re-create the control.
|
||||
|
||||
TB_SETWINDOWTHEME
|
||||
Sets the visual style of a toolbar control.
|
||||
|
||||
TB_TRANSLATEACCELERATOR
|
||||
Passes a keyboard message to the toolbar.
|
||||
|
||||
|
||||
NOTIFICATIONS
|
||||
=============
|
||||
|
||||
NM_CHAR (toolbar)
|
||||
Sent by the toolbar when it receives a WM_CHAR message. This notification message is sent
|
||||
in the form of a WM_NOTIFY message.
|
||||
|
||||
NM_CLICK (toolbar)
|
||||
Sent by a toolbar control when the user clicks an item with the left mouse button.
|
||||
This notification message is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
NM_CUSTOMDRAW (toolbar)
|
||||
Sent by the toolbar to notify its parent window about drawing operations. This notification
|
||||
is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
NM_DBLCLK (toolbar)
|
||||
Notifies the parent window of a toolbar control that the user has double-clicked the left
|
||||
mouse button within the control. This notification is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
NM_KEYDOWN (toolbar)
|
||||
Sent by a control when the control has the keyboard focus and the user presses a key.
|
||||
This notification message is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
NM_LDOWN
|
||||
Notifies a toolbars parent window that the left mouse button has been pressed.
|
||||
|
||||
NM_RCLICK (toolbar)
|
||||
Sent by a toolbar control when the user clicks the toolbar with the right mouse button.
|
||||
This notification message is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
NM_RDBLCLK (toolbar)
|
||||
Notifies a control s parent window that the user has double-clicked the right mouse button
|
||||
within the control. NM_RDBLCLK (toolbar) is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
NM_RELEASEDCAPTURE (toolbar)
|
||||
Notifies a toolbar control s parent window that the control is releasing mouse capture.
|
||||
This notification is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
NM_TOOLTIPSCREATED (toolbar)
|
||||
Notifies a toolbar s parent window that the toolbar has created a ToolTip control.
|
||||
This notification is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
TBN_BEGINADJUST
|
||||
Notifies a toolbar s parent window that the user has begun customizing a toolbar.
|
||||
This message is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
TBN_BEGINDRAG
|
||||
Notifies a toolbar s parent window that the user has begun dragging a button in a toolbar.
|
||||
This message is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
TBN_CUSTHELP
|
||||
Notifies a toolbar s parent window that the user has chosen the Help button in the
|
||||
Customize Toolbar dialog box. This message is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
TBN_DELETINGBUTTON
|
||||
Sent by a toolbar control when a button is about to be deleted.
|
||||
|
||||
TBN_DRAGOUT
|
||||
Sent by a toolbar control when the user clicks a button and then moves the cursor off the button.
|
||||
This notification message is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
TBN_DRAGOVER
|
||||
Ascertains whether a TB_MARKBUTTON message should be sent for a button that is being dragged over..
|
||||
|
||||
TBN_DROPDOWN
|
||||
Sent by a toolbar control when the user clicks a dropdown button.
|
||||
This notification message is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
TBN_DUPACCELERATOR
|
||||
Ascertains whether an accelerator key can be used on two or more active toolbars.
|
||||
|
||||
TBN_ENDADJUST
|
||||
Notifies a toolbar s parent window that the user has stopped customizing a toolbar.
|
||||
This message is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
TBN_ENDDRAG
|
||||
Notifies the toolbar s parent window that the user has stopped dragging a button in a toolbar.
|
||||
This message is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
TBN_GETBUTTONINFO
|
||||
Retrieves toolbar customization information and notifies the toolbar s parent window of any
|
||||
changes being made to the toolbar. This is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
TBN_GETDISPINFO
|
||||
Retrieves display information for a toolbar item. This notification is sent in the form of a
|
||||
WM_NOTIFY message.
|
||||
|
||||
TBN_GETINFOTIP
|
||||
Retrieves infotip information for a toolbar item. This notification is sent in the form of a
|
||||
WM_NOTIFY message.
|
||||
|
||||
TBN_GETOBJECT
|
||||
Sent by a toolbar control that uses the TBSTYLE_REGISTERDROP style to request a drop target
|
||||
object when the pointer passes over one of its buttons.
|
||||
|
||||
TBN_HOTITEMCHANGE
|
||||
Sent by a toolbar control when the hot (highlighted) item changes. This notification message
|
||||
is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
TBN_INITCUSTOMIZE
|
||||
Notifies a toolbar s parent window that customizing has started.
|
||||
|
||||
TBN_MAPACCELERATOR
|
||||
Requests the index of the button in the toolbar corresponding to the specified accelerator character.
|
||||
|
||||
TBN_QUERYDELETE
|
||||
Notifies the toolbar s parent window whether a button may be deleted from a toolbar while the
|
||||
user is customizing the toolbar. This message is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
TBN_QUERYINSERT
|
||||
Notifies the toolbar s parent window whether a button may be inserted to the left of the
|
||||
specified button while the user is customizing a toolbar. This message is sent in the form of a
|
||||
WM_NOTIFY message.
|
||||
|
||||
TBN_RESET
|
||||
Notifies the toolbar s parent window that the user has reset the content of the Customize
|
||||
Toolbar dialog box. This message is sent in the form of a WM_NOTIFY message.
|
||||
|
||||
TBN_RESTORE
|
||||
Notifies a toolbar s parent window that a toolbar is in the process of being restored.
|
||||
|
||||
TBN_SAVE
|
||||
Notifies a toolbar s parent window that a toolbar is in the process of being saved.
|
||||
|
||||
TBN_TOOLBARCHANGE
|
||||
Notifies the toolbar s parent window that the user has customized a toolbar. This message is sent
|
||||
in the form of a WM_NOTIFY message.
|
||||
|
||||
TBN_WRAPACCELERATOR
|
||||
Requests the index of the button in one or more toolbars corresponding to the specified accelerator
|
||||
character.
|
||||
|
||||
TBN_WRAPHOTITEM
|
||||
Notifies an application with two or more toolbars that the hot item is about to change.
|
||||
|
||||
|
||||
BUTTON STATES
|
||||
=============
|
||||
|
||||
TBSTATE_CHECKED
|
||||
The button has the TBSTYLE_CHECK style and is being clicked.
|
||||
|
||||
TBSTATE_ELLIPSES
|
||||
Version 4.70. The button s text is cut off and an ellipsis is displayed.
|
||||
|
||||
TBSTATE_ENABLED
|
||||
The button accepts user input. A button that doesn t have this state is grayed.
|
||||
|
||||
TBSTATE_HIDDEN
|
||||
The button is not visible and cannot receive user input.
|
||||
|
||||
TBSTATE_INDETERMINATE
|
||||
The button is grayed.
|
||||
|
||||
TBSTATE_MARKED
|
||||
Version 4.71. The button is marked. The interpretation of a marked item is dependent upon the application.
|
||||
|
||||
TBSTATE_PRESSED
|
||||
The button is being clicked.
|
||||
|
||||
TBSTATE_WRAP
|
||||
The button is followed by a line break. The button must also have the TBSTATE_ENABLED state.
|
||||
|
||||
|
||||
STYLES
|
||||
======
|
||||
|
||||
TBSTYLE_ALTDRAG
|
||||
Allows users to change a toolbar button s position by dragging it while holding down the ALT key.
|
||||
If this style is not specified, the user must hold down the SHIFT key while dragging a button. Note
|
||||
that the CCS_ADJUSTABLE style must be specified to enable toolbar buttons to be dragged.
|
||||
|
||||
TBSTYLE_CUSTOMERASE
|
||||
Version 4.70. Generates NM_CUSTOMDRAW notification messages when the toolbar processes
|
||||
WM_ERASEBKGND messages.
|
||||
|
||||
TBSTYLE_FLAT
|
||||
Version 4.70. Creates a flat toolbar. In a flat toolbar, both the toolbar and the buttons are
|
||||
transparent and hot-tracking is enabled. Button text appears under button bitmaps. To prevent
|
||||
repainting problems, this style should be set before the toolbar control becomes visible.
|
||||
|
||||
TBSTYLE_LIST
|
||||
Version 4.70. Creates a flat toolbar with button text to the right of the bitmap. Otherwise,
|
||||
this style is identical to TBSTYLE_FLAT. To prevent repainting problems, this style should be set
|
||||
before the toolbar control becomes visible.
|
||||
|
||||
TBSTYLE_REGISTERDROP
|
||||
Version 4.71. Generates TBN_GETOBJECT notification messages to request drop target objects
|
||||
when the cursor passes over toolbar buttons.
|
||||
|
||||
TBSTYLE_TOOLTIPS
|
||||
Creates a ToolTip control that an application can use to display descriptive text for
|
||||
the buttons in the toolbar.
|
||||
|
||||
TBSTYLE_TRANSPARENT
|
||||
Version 4.71. Creates a transparent toolbar. In a transparent toolbar, the toolbar is transparent
|
||||
but the buttons are not. Button text appears under button bitmaps. To prevent repainting problems,
|
||||
this style should be set before the toolbar control becomes visible.
|
||||
|
||||
TBSTYLE_WRAPABLE
|
||||
Creates a toolbar that can have multiple lines of buttons. Toolbar buttons can "wrap" to
|
||||
the next line when the toolbar becomes too narrow to include all buttons on the same line.
|
||||
When the toolbar is wrapped, the break will occur on either the rightmost separator or the rightmost
|
||||
button if there are no separators on the bar. This style must be set to display a vertical toolbar
|
||||
control when the toolbar is part of a vertical rebar control. This style cannot be combined with CCS_VERT.
|
||||
|
||||
|
||||
BUTTONS
|
||||
=======
|
||||
|
||||
Note: A toolbar button can have a combination of the following styles. To specify a button style,
|
||||
set the appropriate flags in the fsStyle member of the button s TBBUTTON structure. Not all styles
|
||||
can be combined.
|
||||
For Shell version 4.72 and earlier, both window and button style flags had the form TBSTYLE_XXX.
|
||||
If you are compiling an application with version 4.72 or earlier of Commctrl.h, you must
|
||||
use the TBSTYLE_XXX button style flags. For version 5.80 and later, all button styles have
|
||||
the form BTNS_XXX. All of the TBSTYLE_XXX values have equivalent BTNS_XXX values,
|
||||
with the same meaning and numerical value. For convenience, both forms are given in the following table.
|
||||
|
||||
|
||||
BTNS_AUTOSIZE
|
||||
Version 5.80. Specifies that the toolbar control should not assign the standard width to
|
||||
the button. Instead, the button s width will be calculated based on the width of the text
|
||||
plus the image of the button. Use the equivalent style flag, TBSTYLE_AUTOSIZE,
|
||||
for version 4.72 and earlier.
|
||||
|
||||
BTNS_BUTTON
|
||||
Version 5.80. Creates a standard button. Use the equivalent style flag, TBSTYLE_BUTTON,
|
||||
for version 4.72 and earlier. This flag is defined as 0, and should be used to signify that no
|
||||
other flags are set.
|
||||
|
||||
BTNS_CHECK
|
||||
Version 5.80. Creates a dual-state push button that toggles between the pressed and nonpressed
|
||||
states each time the user clicks it. The button has a different background color when it is in
|
||||
the pressed state. Use the equivalent style flag, TBSTYLE_CHECK, for version 4.72 and earlier.
|
||||
|
||||
BTNS_CHECKGROUP
|
||||
Version 5.80. Creates a button that stays pressed until another button in the group is pressed,
|
||||
similar to option buttons (also known as radio buttons). It is equivalent to combining
|
||||
BTNS_CHECK and BTNS_GROUP. Use the equivalent style flag, TBSTYLE_CHECKGROUP,
|
||||
for version 4.72 and earlier.
|
||||
|
||||
BTNS_DROPDOWN
|
||||
Version 5.80. Creates a drop-down style button that can display a list when the button is clicked.
|
||||
Instead of the WM_COMMAND message used for normal buttons, drop-down buttons send a TBN_DROPDOWN
|
||||
notification. An application can then have the notification handler display a list of options.
|
||||
Use the equivalent style flag, TBSTYLE_DROPDOWN, for version 4.72 and earlier.
|
||||
If the toolbar has the TBSTYLE_EX_DRAWDDARROWS extended style, drop-down buttons will have a
|
||||
drop-down arrow displayed in a separate section to their right. If the arrow is clicked,
|
||||
a TBN_DROPDOWN notification will be sent. If the associated button is clicked, a WM_COMMAND
|
||||
message will be sent.
|
||||
|
||||
BTNS_GROUP
|
||||
Version 5.80. When combined with BTNS_CHECK, creates a button that stays pressed until another
|
||||
button in the group is pressed. Use the equivalent style flag, TBSTYLE_GROUP,
|
||||
for version 4.72 and earlier.
|
||||
|
||||
BTNS_NOPREFIX
|
||||
Version 5.80. Specifies that the button text will not have an accelerator prefix associated with it.
|
||||
Use the equivalent style flag, TBSTYLE_NOPREFIX, for version 4.72 and earlier.
|
||||
|
||||
BTNS_SEP
|
||||
Version 5.80. Creates a separator, providing a small gap between button groups. A button that has
|
||||
this style does not receive user input. Use the equivalent style flag, TBSTYLE_SEP, for version 4.72
|
||||
and earlier.
|
||||
|
||||
BTNS_SHOWTEXT
|
||||
Version 5.81. Specifies that button text should be displayed. All buttons can have text,
|
||||
but only those buttons with the BTNS_SHOWTEXT button style will display it. This button style must
|
||||
be used with the TBSTYLE_LIST style and the TBSTYLE_EX_MIXEDBUTTONS extended style.
|
||||
If you set text for buttons that do not have the BTNS_SHOWTEXT style, the toolbar control will
|
||||
automatically display it as a ToolTip when the cursor hovers over the button. This feature allows
|
||||
your application to avoid handling the TBN_GETINFOTIP or TTN_GETDISPINFO notification for the toolbar.
|
||||
|
||||
BTNS_WHOLEDROPDOWN
|
||||
Version 5.80. Specifies that the button will have a drop-down arrow, but not as a separate section.
|
||||
Buttons with this style behave the same, regardless of whether the TBSTYLE_EX_DRAWDDARROWS extended
|
||||
style is set.
|
||||
|
||||
TBSTYLE_AUTOSIZE
|
||||
Equivalent to BTNS_AUTOSIZE. Use TBSTYLE_AUTOSIZE for version 4.72 and earlier.
|
||||
|
||||
TBSTYLE_BUTTON
|
||||
Equivalent to BTNS_BUTTON. Use TBSTYLE_BUTTON for version 4.72 and earlier.
|
||||
|
||||
TBSTYLE_CHECK
|
||||
Equivalent to BTNS_CHECK. Use TBSTYLE_CHECK for version 4.72 and earlier.
|
||||
|
||||
TBSTYLE_CHECKGROUP
|
||||
Equivalent to BTNS_CHECKGROUP. Use TBSTYLE_CHECKGROUP for version 4.72 and earlier.
|
||||
|
||||
TBSTYLE_DROPDOWN
|
||||
Equivalent to BTNS_DROPDOWN. Use TBSTYLE_DROPDOWN for version 4.72 and earlier.
|
||||
|
||||
TBSTYLE_GROUP
|
||||
Equivalent to BTNS_GROUP. Use TBSTYLE_GROUP for version 4.72 and earlier.
|
||||
|
||||
TBSTYLE_NOPREFIX
|
||||
Equivalent to BTNS_NOPREFIX. Use TBSTYLE_NOPREFIX for version 4.72 and earlier.
|
||||
|
||||
TBSTYLE_SEP
|
||||
Equivalent to BTNS_SEP. Use TBSTYLE_SEP for version 4.72 and earlier.
|
||||
|
||||
#endif
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
1021
harbour/contrib/gtwvg/wvgtreev.prg
Normal file
1021
harbour/contrib/gtwvg/wvgtreev.prg
Normal file
File diff suppressed because it is too large
Load Diff
@@ -735,38 +735,75 @@ HB_FUNC( WVT_CREATEPOPUPMENU )
|
||||
|
||||
HB_FUNC( WVT_APPENDMENU )
|
||||
{
|
||||
char ucBuf[ 256 ];
|
||||
int i,iLen ;
|
||||
LPCTSTR lpszCaption;
|
||||
#if 0
|
||||
char ucBuf[ 256 ];
|
||||
int i,iLen;
|
||||
LPTSTR lpszCaption;
|
||||
|
||||
if ( ISCHAR( 4 ) )
|
||||
{
|
||||
iLen = hb_parclen( 4 );
|
||||
if ( iLen > 0 && iLen < 256 ) // Translate '~' to '&'
|
||||
{
|
||||
//lpszCaption = hb_parc( 4 ) ;
|
||||
lpszCaption = HB_TCHAR_CONVTO( hb_parc( 4 ) );
|
||||
for ( i = 0; i < iLen; i++ )
|
||||
{
|
||||
ucBuf[ i ] = ( *lpszCaption == '~' ) ? '&' : ( char ) *lpszCaption;
|
||||
lpszCaption++;
|
||||
}
|
||||
ucBuf[ iLen ]= '\0';
|
||||
//lpszCaption = ucBuf ;
|
||||
lpszCaption = HB_TCHAR_CONVTO( ucBuf );
|
||||
}
|
||||
else
|
||||
{
|
||||
//lpszCaption = hb_parc( 4 ) ;
|
||||
if ( ISCHAR( 4 ) )
|
||||
{
|
||||
iLen = hb_parclen( 4 );
|
||||
if ( iLen > 0 && iLen < 256 ) // Translate '~' to '&'
|
||||
{
|
||||
lpszCaption = HB_TCHAR_CONVTO( hb_parc( 4 ) );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
lpszCaption = ( LPCTSTR ) ( HB_PTRDIFF ) hb_parnint( 4 ) ; // It is a SEPARATOR or Submenu
|
||||
}
|
||||
for ( i = 0; i < iLen; i++ )
|
||||
{
|
||||
ucBuf[ i ] = ( *lpszCaption == '~' ) ? '&' : ( char ) *lpszCaption;
|
||||
lpszCaption++;
|
||||
}
|
||||
ucBuf[ iLen ]= '\0';
|
||||
|
||||
hb_retl( AppendMenu( ( HMENU ) ( HB_PTRDIFF ) hb_parnint( 1 ), ( UINT ) hb_parni( 2 ), ( HB_PTRDIFF ) hb_parnint( 3 ), ( LPCTSTR ) lpszCaption ) ) ;
|
||||
lpszCaption = HB_TCHAR_CONVTO( ucBuf );
|
||||
hb_retl( AppendMenu( ( HMENU ) ( HB_PTRDIFF ) hb_parnint( 1 ), ( UINT ) hb_parni( 2 ), ( HB_PTRDIFF ) hb_parnint( 3 ), ( LPCTSTR ) lpszCaption ) ) ;
|
||||
HB_TCHAR_FREE( lpszCaption );
|
||||
}
|
||||
else
|
||||
{
|
||||
lpszCaption = HB_TCHAR_CONVTO( hb_parc( 4 ) );
|
||||
hb_retl( AppendMenu( ( HMENU ) ( HB_PTRDIFF ) hb_parnint( 1 ), ( UINT ) hb_parni( 2 ), ( HB_PTRDIFF ) hb_parnint( 3 ), ( LPCTSTR ) lpszCaption ) ) ;
|
||||
HB_TCHAR_FREE( lpszCaption );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
lpszCaption = ( LPTSTR ) ( HB_PTRDIFF ) hb_parnint( 4 ) ; // It is a SEPARATOR or Submenu
|
||||
hb_retl( AppendMenu( ( HMENU ) ( HB_PTRDIFF ) hb_parnint( 1 ), ( UINT ) hb_parni( 2 ), ( HB_PTRDIFF ) hb_parnint( 3 ), ( LPCTSTR ) lpszCaption ) ) ;
|
||||
}
|
||||
#endif
|
||||
|
||||
LPTSTR buffer;
|
||||
int i,iLen ;
|
||||
|
||||
if ( ISCHAR( 4 ) )
|
||||
{
|
||||
iLen = hb_parclen( 4 );
|
||||
if ( iLen > 0 && iLen < 256 ) // Translate '~' to '&'
|
||||
{
|
||||
LPTSTR pDest;
|
||||
|
||||
buffer = HB_TCHAR_CONVTO( hb_parc( 4 ) );
|
||||
pDest = buffer;
|
||||
for ( i = 0; i < iLen; i++ )
|
||||
{
|
||||
pDest[ i ] = ( *buffer == '~' ) ? '&' : ( char ) *buffer;
|
||||
buffer++;
|
||||
}
|
||||
buffer = pDest;
|
||||
hb_retl( AppendMenu( ( HMENU ) ( HB_PTRDIFF ) hb_parnint( 1 ), ( UINT ) hb_parni( 2 ), ( HB_PTRDIFF ) hb_parnint( 3 ), buffer ) ) ;
|
||||
HB_TCHAR_FREE( buffer );
|
||||
}
|
||||
else
|
||||
{
|
||||
buffer = HB_TCHAR_CONVTO( hb_parc( 4 ) );
|
||||
hb_retl( AppendMenu( ( HMENU ) ( HB_PTRDIFF ) hb_parnint( 1 ), ( UINT ) hb_parni( 2 ), ( HB_PTRDIFF ) hb_parnint( 3 ), buffer ) ) ;
|
||||
HB_TCHAR_FREE( buffer );
|
||||
}
|
||||
}
|
||||
else
|
||||
{ // It is a SEPARATOR or Submenu
|
||||
LPCTSTR lpszCaption = ( LPCTSTR ) ( HB_PTRDIFF ) hb_parnint( 4 ) ;
|
||||
hb_retl( AppendMenu( ( HMENU ) ( HB_PTRDIFF ) hb_parnint( 1 ), ( UINT ) hb_parni( 2 ), ( HB_PTRDIFF ) hb_parnint( 3 ), ( LPCTSTR ) lpszCaption ) ) ;
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------//
|
||||
|
||||
@@ -78,6 +78,16 @@
|
||||
|
||||
#include "gtwvg.h"
|
||||
|
||||
#define WIN_STATUSBAR_MAX_PARTS 256
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
#if defined(__BORLANDC__) && !defined(HB_ARCH_64BIT)
|
||||
#undef MAKELONG
|
||||
#define MAKELONG(a,b) ((LONG)(((WORD)((DWORD_PTR)(a) & 0xffff)) | \
|
||||
(((DWORD)((WORD)((DWORD_PTR)(b) & 0xffff))) << 16)))
|
||||
#endif
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
static HANDLE wvg_hInstance( void )
|
||||
@@ -303,11 +313,11 @@ HB_FUNC( WIN_GETDLGITEM )
|
||||
|
||||
HB_FUNC( WIN_MESSAGEBOX )
|
||||
{
|
||||
HWND hWnd = ISNIL( 1 ) ? GetActiveWindow() : ( HWND ) ( HB_PTRDIFF ) hb_parnint( 1 ) ;
|
||||
HWND hWnd = ISNIL( 1 ) ? GetActiveWindow() : ( HWND ) ( HB_PTRDIFF ) hb_parnint( 1 ) ;
|
||||
LPTSTR lpMsg = HB_TCHAR_CONVTO( ISNIL( 2 ) ? "" : hb_parc( 2 ) );
|
||||
LPTSTR lpTitle = HB_TCHAR_CONVTO( ISNIL( 3 ) ? "Info" : hb_parc( 3 ) );
|
||||
|
||||
hb_retni( MessageBox( hWnd, lpMsg, lpTitle, ISNIL( 4 ) ? MB_OK : hb_parni( 4 ) ) ) ;
|
||||
hb_retni( MessageBox( hWnd, lpMsg, lpTitle, ISNIL( 4 ) ? MB_OK : hb_parni( 4 ) ) );
|
||||
|
||||
HB_TCHAR_FREE( lpTitle );
|
||||
HB_TCHAR_FREE( lpMsg );
|
||||
@@ -702,35 +712,39 @@ HB_FUNC( WIN_CREATEPOPUPMENU )
|
||||
|
||||
HB_FUNC( WIN_APPENDMENU )
|
||||
{
|
||||
char ucBuf[ 256 ];
|
||||
int i,iLen ;
|
||||
LPCTSTR lpszCaption;
|
||||
LPTSTR buffer;
|
||||
int i,iLen ;
|
||||
|
||||
if ( ISCHAR( 4 ) )
|
||||
{
|
||||
iLen = hb_parclen( 4 );
|
||||
if ( iLen > 0 && iLen < 256 ) // Translate '~' to '&'
|
||||
{
|
||||
lpszCaption = HB_TCHAR_CONVTO( hb_parc( 4 ) );
|
||||
for ( i = 0; i < iLen; i++ )
|
||||
if ( ISCHAR( 4 ) )
|
||||
{
|
||||
iLen = hb_parclen( 4 );
|
||||
if ( iLen > 0 && iLen < 256 ) // Translate '~' to '&'
|
||||
{
|
||||
ucBuf[ i ] = ( *lpszCaption == '~' ) ? '&' : ( char ) *lpszCaption;
|
||||
lpszCaption++;
|
||||
}
|
||||
ucBuf[ iLen ]= '\0';
|
||||
lpszCaption = HB_TCHAR_CONVTO( ucBuf );
|
||||
}
|
||||
else
|
||||
{
|
||||
lpszCaption = HB_TCHAR_CONVTO( hb_parc( 4 ) );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
lpszCaption = ( LPCTSTR ) ( HB_PTRDIFF ) hb_parnint( 4 ) ; // It is a SEPARATOR or Submenu
|
||||
}
|
||||
LPTSTR pDest;
|
||||
|
||||
hb_retl( AppendMenu( ( HMENU ) ( HB_PTRDIFF ) hb_parnint( 1 ), ( UINT ) hb_parni( 2 ), ( HB_PTRDIFF ) hb_parnint( 3 ), ( LPCTSTR ) lpszCaption ) ) ;
|
||||
buffer = HB_TCHAR_CONVTO( hb_parc( 4 ) );
|
||||
pDest = buffer;
|
||||
for ( i = 0; i < iLen; i++ )
|
||||
{
|
||||
pDest[ i ] = ( *buffer == '~' ) ? '&' : ( char ) *buffer;
|
||||
buffer++;
|
||||
}
|
||||
buffer = pDest;
|
||||
hb_retl( AppendMenu( ( HMENU ) ( HB_PTRDIFF ) hb_parnint( 1 ), ( UINT ) hb_parni( 2 ), ( HB_PTRDIFF ) hb_parnint( 3 ), buffer ) ) ;
|
||||
HB_TCHAR_FREE( buffer );
|
||||
}
|
||||
else
|
||||
{
|
||||
buffer = HB_TCHAR_CONVTO( hb_parc( 4 ) );
|
||||
hb_retl( AppendMenu( ( HMENU ) ( HB_PTRDIFF ) hb_parnint( 1 ), ( UINT ) hb_parni( 2 ), ( HB_PTRDIFF ) hb_parnint( 3 ), buffer ) ) ;
|
||||
HB_TCHAR_FREE( buffer );
|
||||
}
|
||||
}
|
||||
else
|
||||
{ // It is a SEPARATOR or Submenu
|
||||
LPCTSTR lpszCaption = ( LPCTSTR ) ( HB_PTRDIFF ) hb_parnint( 4 ) ;
|
||||
hb_retl( AppendMenu( ( HMENU ) ( HB_PTRDIFF ) hb_parnint( 1 ), ( UINT ) hb_parni( 2 ), ( HB_PTRDIFF ) hb_parnint( 3 ), ( LPCTSTR ) lpszCaption ) ) ;
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------//
|
||||
@@ -1209,3 +1223,145 @@ HB_FUNC( WVG_ADDTOOLBARBUTTON )
|
||||
}
|
||||
}
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( WVG_STATUSBARCREATEPANEL )
|
||||
{
|
||||
HWND hWndSB = ( HWND ) ( HB_PTRDIFF ) hb_parnint( 1 );
|
||||
int iMode = hb_parni( 2 );
|
||||
|
||||
if ( hWndSB == NULL || !IsWindow( hWndSB ) )
|
||||
{
|
||||
hb_retl( FALSE );
|
||||
return;
|
||||
}
|
||||
|
||||
switch( iMode )
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
int ptArray[ WIN_STATUSBAR_MAX_PARTS ];
|
||||
int iParts;
|
||||
RECT rc = { 0 };
|
||||
int n ;
|
||||
USHORT width;
|
||||
|
||||
iParts = SendMessage( hWndSB, SB_GETPARTS, WIN_STATUSBAR_MAX_PARTS, ( LPARAM ) ( LPINT ) ptArray );
|
||||
|
||||
GetClientRect( hWndSB, &rc );
|
||||
width = rc.right / ( iParts + 1 );
|
||||
for( n = 0; n < iParts; n++ )
|
||||
{
|
||||
ptArray[ n ] = ( width * ( n + 1 ) );
|
||||
}
|
||||
ptArray[ iParts ] = -1;
|
||||
|
||||
if( SendMessage( hWndSB, SB_SETPARTS, iParts + 1, ( LPARAM ) ( LPINT ) ptArray ) )
|
||||
{
|
||||
hb_retl( TRUE );
|
||||
return;
|
||||
}
|
||||
}
|
||||
case -1:
|
||||
{
|
||||
RECT rc = { 0 };
|
||||
int ptArray[ WIN_STATUSBAR_MAX_PARTS ];
|
||||
|
||||
if ( GetClientRect( hWndSB, &rc ) )
|
||||
{
|
||||
ptArray[ 0 ] = rc.right;
|
||||
|
||||
SendMessage( hWndSB, SB_SETPARTS, 1, ( LPARAM ) ( LPINT ) ptArray );
|
||||
|
||||
hb_retl( TRUE );
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
hb_retl( FALSE );
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( WVG_STATUSBARSETTEXT )
|
||||
{
|
||||
HWND hWndSB = ( HWND ) ( HB_PTRDIFF ) hb_parnint( 1 );
|
||||
|
||||
if( hWndSB && IsWindow( hWndSB ) )
|
||||
{
|
||||
int iPart = ISNIL( 2 ) ? 1 : hb_parni( 2 );
|
||||
TCHAR szText[ 1024 ];
|
||||
int iFlags;
|
||||
TCHAR *szCaption;
|
||||
|
||||
iPart -= 1; // Zero based
|
||||
|
||||
iFlags = ( int ) HIWORD( SendMessage( hWndSB, SB_GETTEXT, ( WPARAM ) iPart, ( LPARAM ) szText ) );
|
||||
|
||||
szCaption = HB_TCHAR_CONVTO( hb_parc( 3 ) );
|
||||
SendMessage( hWndSB, SB_SETTEXT, ( WPARAM ) iPart | iFlags, ( LPARAM ) szCaption );
|
||||
HB_TCHAR_FREE( szCaption );
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( WVG_STATUSBARREFRESH )
|
||||
{
|
||||
#if 0
|
||||
HWND hWndSB = ( HWND ) ( HB_PTRDIFF ) hb_parnint( 1 );
|
||||
|
||||
if( hWndSB && IsWindow( hWndSB ) )
|
||||
{
|
||||
int ptArray[ WIN_STATUSBAR_MAX_PARTS ];
|
||||
int iParts,i;
|
||||
|
||||
iParts = SendMessage( hWndSB, SB_GETPARTS, WIN_STATUSBAR_MAX_PARTS, ( LPARAM ) ( LPINT ) ptArray );
|
||||
|
||||
ptArray[ iParts-1 ] = -1;
|
||||
|
||||
if( SendMessage( hWndSB, SB_SETPARTS, iParts, ( LPARAM ) ( LPINT ) ptArray ) )
|
||||
{
|
||||
hb_retl( TRUE );
|
||||
return;
|
||||
}
|
||||
}
|
||||
hb_retl( FALSE );
|
||||
#endif
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( WIN_SENDMESSAGETEXT )
|
||||
{
|
||||
LPTSTR lpBuffer = HB_TCHAR_CONVTO( hb_parc( 4 ) );
|
||||
|
||||
SendMessage( ( HWND ) ( HB_PTRDIFF ) hb_parnint( 1 ), hb_parni( 2 ),
|
||||
( WPARAM ) hb_parni( 3 ), ( LPARAM ) lpBuffer );
|
||||
HB_TCHAR_FREE( lpBuffer );
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( WIN_SETWNDPROC )
|
||||
{
|
||||
HWND hWnd = ( HWND ) ( HB_PTRDIFF ) hb_parnint( 1 );
|
||||
WNDPROC wndProc = ( WNDPROC ) ( HB_PTRDIFF ) hb_parnint( 2 );
|
||||
WNDPROC oldProc;
|
||||
|
||||
oldProc = ( WNDPROC ) SetWindowLong( hWnd, GWL_WNDPROC, ( long ) wndProc ) ;
|
||||
|
||||
hb_retnint( ( HB_PTRDIFF ) oldProc );
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( WIN_DEFWINDOWPROC )
|
||||
{
|
||||
hb_retni( DefWindowProc( ( HWND ) ( HB_PTRDIFF ) hb_parnint( 1 ),
|
||||
hb_parni( 2 ),
|
||||
( WPARAM ) hb_parnint( 3 ),
|
||||
( LPARAM ) hb_parnint( 4 ) ) );
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
@@ -67,10 +67,12 @@
|
||||
|
||||
#include 'hbclass.ch'
|
||||
#include 'common.ch'
|
||||
#include 'inkey.ch'
|
||||
#include 'hbgtinfo.ch'
|
||||
|
||||
#include 'hbgtwvg.ch'
|
||||
#include 'wvtwin.ch'
|
||||
#include 'inkey.ch'
|
||||
#include 'wvgparts.ch'
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
@@ -242,6 +244,8 @@ EXPORTED:
|
||||
METHOD createControl()
|
||||
METHOD getControlID() INLINE ++::nControlID
|
||||
|
||||
METHOD Initialize()
|
||||
|
||||
ENDCLASS
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
@@ -264,20 +268,6 @@ METHOD init( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgWind
|
||||
|
||||
::WvgPartHandler:init( oParent, oOwner )
|
||||
|
||||
#if 0
|
||||
if hb_isArray( aPos )
|
||||
::aPos := aPos
|
||||
endif
|
||||
if hb_isArray( aSize )
|
||||
::aSize := aSize
|
||||
endif
|
||||
if hb_isArray( aPresParams )
|
||||
::aPresParams := aPresParams
|
||||
endif
|
||||
if hb_isLogical( lVisible )
|
||||
::visible := lVisible
|
||||
endif
|
||||
#endif
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
@@ -320,6 +310,18 @@ METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS Wv
|
||||
|
||||
METHOD destroy() CLASS WvgWindow
|
||||
|
||||
IF Len( ::aChildren ) > 0
|
||||
aeval( ::aChildren, {|o| hb_toOutDebug( '< '+o:className+' >' ), o:destroy() } )
|
||||
::aChildren := {}
|
||||
ENDIF
|
||||
|
||||
::destroy()
|
||||
|
||||
IF Win_IsWindow( ::hWnd )
|
||||
Win_DestroyWindow( ::hWnd )
|
||||
::hWnd := NIL
|
||||
ENDIF
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
@@ -396,7 +398,9 @@ METHOD setPosAndSize( aPos, aSize, lPaint ) CLASS WvgWindow
|
||||
DEFAULT lPaint TO .T.
|
||||
|
||||
switch ::objType
|
||||
|
||||
case objTypeDialog
|
||||
case objTypeStatic
|
||||
case objTypeActiveX
|
||||
Win_MoveWindow( ::hWnd, aPos[ 1 ], aPos[ 2 ], aSize[ 1 ], aSize[ 2 ], lPaint )
|
||||
exit
|
||||
@@ -419,6 +423,8 @@ METHOD setSize( aSize, lPaint ) CLASS WvgWindow
|
||||
DEFAULT lPaint TO .T.
|
||||
|
||||
switch ::objType
|
||||
|
||||
case objTypeStatic
|
||||
case objTypeDialog
|
||||
case objTypeActiveX
|
||||
Win_MoveWindow( ::hWnd, 0, 0, aSize[ 1 ], aSize[ 2 ], lPaint )
|
||||
@@ -1045,6 +1051,26 @@ METHOD dragDrop( xParam, xParam1 ) CLASS WvgWindow
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgWindow
|
||||
|
||||
DEFAULT oParent TO ::oParent
|
||||
DEFAULT oOwner TO ::oOwner
|
||||
DEFAULT aPos TO ::aPos
|
||||
DEFAULT aSize TO ::aSize
|
||||
DEFAULT aPresParams TO ::aPresParams
|
||||
DEFAULT lVisible TO ::visible
|
||||
|
||||
::oParent := oParent
|
||||
::oOwner := oOwner
|
||||
::aPos := aPos
|
||||
::aSize := aSize
|
||||
::aPresParams := aPresParams
|
||||
::visible := lVisible
|
||||
|
||||
RETURN Self
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
METHOD setFocus() CLASS WvgWindow
|
||||
|
||||
::sendMessage( WM_ACTIVATE, 1, 0 )
|
||||
@@ -1060,13 +1086,12 @@ METHOD sendMessage( nMessage, nlParam, nwParam ) CLASS WvgWindow
|
||||
METHOD createControl() CLASS WvgWindow
|
||||
LOCAL hWnd
|
||||
|
||||
::nID := ::oParent:GetControlId()
|
||||
|
||||
DO CASE
|
||||
|
||||
CASE ::objType == objTypeToolBar
|
||||
|
||||
::nID := ::oParent:GetControlId()
|
||||
|
||||
#if 1
|
||||
hWnd := Win_CreateToolBarEx( ::oParent:hWnd,; // hWnd - window handle hosting the toolbar
|
||||
::style,; // ws - style of the toolbar
|
||||
::nID,; // wID - control identifier supplied with WM_COMMAND
|
||||
@@ -1079,20 +1104,8 @@ METHOD createControl() CLASS WvgWindow
|
||||
::buttonHeight,;
|
||||
::imageWidth,;
|
||||
::imageHeight )
|
||||
//Win_SendMessage( hWnd, TB_AUTOSIZE, 0, 0 )
|
||||
#else
|
||||
hWnd := Win_CreateWindowEx( ::exStyle, ;
|
||||
TOOLBARCLASSNAME, ;
|
||||
NIL, ; // window name
|
||||
::style, ;
|
||||
::aPos[ 1 ], ::aPos[ 2 ],;
|
||||
::aSize[ 1 ], ::aSize[ 2 ],;
|
||||
::oParent:hWnd,;
|
||||
NIL,; // hMenu
|
||||
NIL,; // hInstance
|
||||
NIL ) // lParam
|
||||
#endif
|
||||
OTHERWISE
|
||||
|
||||
hWnd := Win_CreateWindowEx( ::exStyle, ;
|
||||
::className, ;
|
||||
"", ; // window name
|
||||
@@ -1100,7 +1113,7 @@ METHOD createControl() CLASS WvgWindow
|
||||
::aPos[ 1 ], ::aPos[ 2 ],;
|
||||
::aSize[ 1 ], ::aSize[ 2 ],;
|
||||
::oParent:hWnd,;
|
||||
NIL,; // hMenu
|
||||
::nID,; // hMenu
|
||||
NIL,; // hInstance
|
||||
NIL ) // lParam
|
||||
ENDCASE
|
||||
|
||||
@@ -57,6 +57,12 @@
|
||||
// GTWVT Specific
|
||||
//
|
||||
//-------------------------------------------------------------------//
|
||||
|
||||
#xtranslate MAKELONG(<nLow>, <nHigh>) => ((<nLow>) + (<nHigh>) * 65536)
|
||||
#xtranslate MAKELPARAM(<nLow>, <nHigh>) => ((<nLow>) + (<nHigh>) * 65536)
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
//
|
||||
// Wvt_DrawButton() constants
|
||||
//
|
||||
@@ -1114,358 +1120,356 @@
|
||||
/*
|
||||
* Window field offsets for GetWindowLong()
|
||||
*/
|
||||
#define GWL_WNDPROC (-4)
|
||||
#define GWL_HINSTANCE (-6)
|
||||
#define GWL_HWNDPARENT (-8)
|
||||
#define GWL_STYLE (-16)
|
||||
#define GWL_EXSTYLE (-20)
|
||||
#define GWL_USERDATA (-21)
|
||||
#define GWL_ID (-12)
|
||||
#define GWL_WNDPROC (-4)
|
||||
#define GWL_HINSTANCE (-6)
|
||||
#define GWL_HWNDPARENT (-8)
|
||||
#define GWL_STYLE (-16)
|
||||
#define GWL_EXSTYLE (-20)
|
||||
#define GWL_USERDATA (-21)
|
||||
#define GWL_ID (-12)
|
||||
|
||||
#define DWL_MSGRESULT 0
|
||||
#define DWL_DLGPROC 4
|
||||
#define DWL_USER 8
|
||||
#define DWL_MSGRESULT 0
|
||||
#define DWL_DLGPROC 4
|
||||
#define DWL_USER 8
|
||||
|
||||
//--------------------------------------------------------------------//
|
||||
/*
|
||||
* Virtual Key Codes
|
||||
*/
|
||||
#define VK_LBUTTON 1
|
||||
#define VK_RBUTTON 2
|
||||
#define VK_CANCEL 3
|
||||
#define VK_MBUTTON 4
|
||||
#define VK_BACK 8
|
||||
#define VK_TAB 9
|
||||
#define VK_CLEAR 12
|
||||
#define VK_RETURN 13
|
||||
#define VK_SHIFT 16
|
||||
#define VK_CONTROL 17
|
||||
#define VK_MENU 18
|
||||
#define VK_PAUSE 19
|
||||
#define VK_CAPITAL 20
|
||||
#define VK_ESCAPE 27
|
||||
#define VK_SPACE 32
|
||||
#define VK_PRIOR 33
|
||||
#define VK_NEXT 34
|
||||
#define VK_END 35
|
||||
#define VK_HOME 36
|
||||
#define VK_LEFT 37
|
||||
#define VK_UP 38
|
||||
#define VK_RIGHT 39
|
||||
#define VK_DOWN 40
|
||||
#define VK_SELECT 41
|
||||
#define VK_PRINT 42
|
||||
#define VK_EXECUTE 43
|
||||
#define VK_SNAPSHOT 44
|
||||
#define VK_INSERT 45
|
||||
#define VK_DELETE 46
|
||||
#define VK_HELP 47
|
||||
#define VK_NUMPAD0 96
|
||||
#define VK_NUMPAD1 97
|
||||
#define VK_NUMPAD2 98
|
||||
#define VK_NUMPAD3 99
|
||||
#define VK_NUMPAD4 100
|
||||
#define VK_NUMPAD5 101
|
||||
#define VK_NUMPAD6 102
|
||||
#define VK_NUMPAD7 103
|
||||
#define VK_NUMPAD8 104
|
||||
#define VK_NUMPAD9 105
|
||||
#define VK_MULTIPLY 106
|
||||
#define VK_ADD 107
|
||||
#define VK_SEPARATOR 108
|
||||
#define VK_SUBTRACT 109
|
||||
#define VK_DECIMAL 110
|
||||
#define VK_DIVIDE 111
|
||||
#define VK_F1 112
|
||||
#define VK_F2 113
|
||||
#define VK_F3 114
|
||||
#define VK_F4 115
|
||||
#define VK_F5 116
|
||||
#define VK_F6 117
|
||||
#define VK_F7 118
|
||||
#define VK_F8 119
|
||||
#define VK_F9 120
|
||||
#define VK_F10 121
|
||||
#define VK_F11 122
|
||||
#define VK_F12 123
|
||||
#define VK_F13 124
|
||||
#define VK_F14 125
|
||||
#define VK_F15 126
|
||||
#define VK_F16 127
|
||||
#define VK_F17 128
|
||||
#define VK_F18 129
|
||||
#define VK_F19 130
|
||||
#define VK_F20 131
|
||||
#define VK_F21 132
|
||||
#define VK_F22 133
|
||||
#define VK_F23 134
|
||||
#define VK_F24 135
|
||||
#define VK_NUMLOCK 144
|
||||
#define VK_SCROLL 145
|
||||
#define VK_LBUTTON 1
|
||||
#define VK_RBUTTON 2
|
||||
#define VK_CANCEL 3
|
||||
#define VK_MBUTTON 4
|
||||
#define VK_BACK 8
|
||||
#define VK_TAB 9
|
||||
#define VK_CLEAR 12
|
||||
#define VK_RETURN 13
|
||||
#define VK_SHIFT 16
|
||||
#define VK_CONTROL 17
|
||||
#define VK_MENU 18
|
||||
#define VK_PAUSE 19
|
||||
#define VK_CAPITAL 20
|
||||
#define VK_ESCAPE 27
|
||||
#define VK_SPACE 32
|
||||
#define VK_PRIOR 33
|
||||
#define VK_NEXT 34
|
||||
#define VK_END 35
|
||||
#define VK_HOME 36
|
||||
#define VK_LEFT 37
|
||||
#define VK_UP 38
|
||||
#define VK_RIGHT 39
|
||||
#define VK_DOWN 40
|
||||
#define VK_SELECT 41
|
||||
#define VK_PRINT 42
|
||||
#define VK_EXECUTE 43
|
||||
#define VK_SNAPSHOT 44
|
||||
#define VK_INSERT 45
|
||||
#define VK_DELETE 46
|
||||
#define VK_HELP 47
|
||||
#define VK_NUMPAD0 96
|
||||
#define VK_NUMPAD1 97
|
||||
#define VK_NUMPAD2 98
|
||||
#define VK_NUMPAD3 99
|
||||
#define VK_NUMPAD4 100
|
||||
#define VK_NUMPAD5 101
|
||||
#define VK_NUMPAD6 102
|
||||
#define VK_NUMPAD7 103
|
||||
#define VK_NUMPAD8 104
|
||||
#define VK_NUMPAD9 105
|
||||
#define VK_MULTIPLY 106
|
||||
#define VK_ADD 107
|
||||
#define VK_SEPARATOR 108
|
||||
#define VK_SUBTRACT 109
|
||||
#define VK_DECIMAL 110
|
||||
#define VK_DIVIDE 111
|
||||
#define VK_F1 112
|
||||
#define VK_F2 113
|
||||
#define VK_F3 114
|
||||
#define VK_F4 115
|
||||
#define VK_F5 116
|
||||
#define VK_F6 117
|
||||
#define VK_F7 118
|
||||
#define VK_F8 119
|
||||
#define VK_F9 120
|
||||
#define VK_F10 121
|
||||
#define VK_F11 122
|
||||
#define VK_F12 123
|
||||
#define VK_F13 124
|
||||
#define VK_F14 125
|
||||
#define VK_F15 126
|
||||
#define VK_F16 127
|
||||
#define VK_F17 128
|
||||
#define VK_F18 129
|
||||
#define VK_F19 130
|
||||
#define VK_F20 131
|
||||
#define VK_F21 132
|
||||
#define VK_F22 133
|
||||
#define VK_F23 134
|
||||
#define VK_F24 135
|
||||
#define VK_NUMLOCK 144
|
||||
#define VK_SCROLL 145
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
/*
|
||||
* File Open/Save Dialog Constants
|
||||
*/
|
||||
#define OFN_READONLY 1
|
||||
#define OFN_OVERWRITEPROMPT 2
|
||||
#define OFN_HIDEREADONLY 4
|
||||
#define OFN_NOCHANGEDIR 8
|
||||
#define OFN_SHOWHELP 16
|
||||
#define OFN_ENABLEHOOK 32
|
||||
#define OFN_ENABLETEMPLATE 64
|
||||
#define OFN_ENABLETEMPLATEHANDLE 128
|
||||
#define OFN_NOVALIDATE 256
|
||||
#define OFN_ALLOWMULTISELECT 512
|
||||
#define OFN_EXTENSIONDIFFERENT 1024
|
||||
#define OFN_PATHMUSTEXIST 2048
|
||||
#define OFN_FILEMUSTEXIST 4096
|
||||
#define OFN_CREATEPROMPT 8192
|
||||
#define OFN_SHAREAWARE 16384
|
||||
#define OFN_NOREADONLYRETURN 32768
|
||||
#define OFN_NOTESTFILECREATE 65536
|
||||
#define OFN_NONETWORKBUTTON 131072
|
||||
#define OFN_NOLONGNAMES 262144 // force no long names for 4.x modules
|
||||
#define OFN_EXPLORER 524288 // new look commdlg
|
||||
#define OFN_NODEREFERENCELINKS 1048576
|
||||
#define OFN_LONGNAMES 2097152 // force long names for 3.x modules
|
||||
#define OFN_ENABLEINCLUDENOTIFY 4194304 // send include message to callback
|
||||
#define OFN_ENABLESIZING 8388608
|
||||
#define OFN_DONTADDTORECENT 33554432
|
||||
#define OFN_FORCESHOWHIDDEN 268435456 // Show All files including System and hidden files
|
||||
#define OFN_READONLY 1
|
||||
#define OFN_OVERWRITEPROMPT 2
|
||||
#define OFN_HIDEREADONLY 4
|
||||
#define OFN_NOCHANGEDIR 8
|
||||
#define OFN_SHOWHELP 16
|
||||
#define OFN_ENABLEHOOK 32
|
||||
#define OFN_ENABLETEMPLATE 64
|
||||
#define OFN_ENABLETEMPLATEHANDLE 128
|
||||
#define OFN_NOVALIDATE 256
|
||||
#define OFN_ALLOWMULTISELECT 512
|
||||
#define OFN_EXTENSIONDIFFERENT 1024
|
||||
#define OFN_PATHMUSTEXIST 2048
|
||||
#define OFN_FILEMUSTEXIST 4096
|
||||
#define OFN_CREATEPROMPT 8192
|
||||
#define OFN_SHAREAWARE 16384
|
||||
#define OFN_NOREADONLYRETURN 32768
|
||||
#define OFN_NOTESTFILECREATE 65536
|
||||
#define OFN_NONETWORKBUTTON 131072
|
||||
#define OFN_NOLONGNAMES 262144 // force no long names for 4.x modules
|
||||
#define OFN_EXPLORER 524288 // new look commdlg
|
||||
#define OFN_NODEREFERENCELINKS 1048576
|
||||
#define OFN_LONGNAMES 2097152 // force long names for 3.x modules
|
||||
#define OFN_ENABLEINCLUDENOTIFY 4194304 // send include message to callback
|
||||
#define OFN_ENABLESIZING 8388608
|
||||
#define OFN_DONTADDTORECENT 33554432
|
||||
#define OFN_FORCESHOWHIDDEN 268435456 // Show All files including System and hidden files
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
/* Common Control Constants */
|
||||
#define CCS_TOP 1
|
||||
#define CCS_NOMOVEY 2
|
||||
#define CCS_BOTTOM 3
|
||||
#define CCS_NORESIZE 4
|
||||
#define CCS_NOPARENTALIGN 8
|
||||
#define CCS_ADJUSTABLE 32
|
||||
#define CCS_NODIVIDER 64
|
||||
#define CCS_VERT 128
|
||||
#define CCS_LEFT (CCS_VERT + CCS_TOP)
|
||||
#define CCS_RIGHT (CCS_VERT + CCS_BOTTOM)
|
||||
#define CCS_NOMOVEX (CCS_VERT + CCS_NOMOVEY)
|
||||
//----------------------------------------------------------------------//
|
||||
#define CCS_TOP 1
|
||||
#define CCS_NOMOVEY 2
|
||||
#define CCS_BOTTOM 3
|
||||
#define CCS_NORESIZE 4
|
||||
#define CCS_NOPARENTALIGN 8
|
||||
#define CCS_ADJUSTABLE 32
|
||||
#define CCS_NODIVIDER 64
|
||||
#define CCS_VERT 128
|
||||
#define CCS_LEFT (CCS_VERT + CCS_TOP)
|
||||
#define CCS_RIGHT (CCS_VERT + CCS_BOTTOM)
|
||||
#define CCS_NOMOVEX (CCS_VERT + CCS_NOMOVEY)
|
||||
|
||||
#define TOOLBARCLASSNAME "ToolbarWindow32"
|
||||
#define TOOLBARCLASSNAME "ToolbarWindow32"
|
||||
#define STATUSCLASSNAME "msctls_statusbar32"
|
||||
|
||||
/* Toolbar messages */
|
||||
#define TB_SAVERESTOREA (WM_USER + 26)
|
||||
#define TB_SAVERESTOREW (WM_USER + 76)
|
||||
#define TB_CUSTOMIZE (WM_USER + 27)
|
||||
#define TB_ADDSTRINGA (WM_USER + 28)
|
||||
#define TB_ADDSTRINGW (WM_USER + 77)
|
||||
#define TB_GETITEMRECT (WM_USER + 29)
|
||||
#define TB_BUTTONSTRUCTSIZE (WM_USER + 30)
|
||||
#define TB_SETBUTTONSIZE (WM_USER + 31)
|
||||
#define TB_SETBITMAPSIZE (WM_USER + 32)
|
||||
#define TB_AUTOSIZE (WM_USER + 33)
|
||||
#define TB_GETTOOLTIPS (WM_USER + 35)
|
||||
#define TB_SETTOOLTIPS (WM_USER + 36)
|
||||
#define TB_SETPARENT (WM_USER + 37)
|
||||
#define TB_SETROWS (WM_USER + 39)
|
||||
#define TB_GETROWS (WM_USER + 40)
|
||||
#define TB_GETBITMAPFLAGS (WM_USER + 41)
|
||||
#define TB_SETCMDID (WM_USER + 42)
|
||||
#define TB_CHANGEBITMAP (WM_USER + 43)
|
||||
#define TB_GETBITMAP (WM_USER + 44)
|
||||
#define TB_GETBUTTONTEXTA (WM_USER + 45)
|
||||
#define TB_GETBUTTONTEXTW (WM_USER + 75)
|
||||
#define TB_REPLACEBITMAP (WM_USER + 46)
|
||||
#define TB_SETINDENT (WM_USER + 47)
|
||||
#define TB_SETIMAGELIST (WM_USER + 48)
|
||||
#define TB_GETIMAGELIST (WM_USER + 49)
|
||||
#define TB_LOADIMAGES (WM_USER + 50)
|
||||
#define TB_GETRECT (WM_USER + 51) // wParam is the Cmd instead of index
|
||||
#define TB_SETHOTIMAGELIST (WM_USER + 52)
|
||||
#define TB_GETHOTIMAGELIST (WM_USER + 53)
|
||||
#define TB_SETDISABLEDIMAGELIST (WM_USER + 54)
|
||||
#define TB_GETDISABLEDIMAGELIST (WM_USER + 55)
|
||||
#define TB_SETSTYLE (WM_USER + 56)
|
||||
#define TB_GETSTYLE (WM_USER + 57)
|
||||
#define TB_GETBUTTONSIZE (WM_USER + 58)
|
||||
#define TB_SETBUTTONWIDTH (WM_USER + 59)
|
||||
#define TB_SETMAXTEXTROWS (WM_USER + 60)
|
||||
#define TB_GETTEXTROWS (WM_USER + 61)
|
||||
#define TB_SAVERESTOREA (WM_USER + 26)
|
||||
#define TB_SAVERESTOREW (WM_USER + 76)
|
||||
#define TB_CUSTOMIZE (WM_USER + 27)
|
||||
#define TB_ADDSTRINGA (WM_USER + 28)
|
||||
#define TB_ADDSTRINGW (WM_USER + 77)
|
||||
#define TB_GETITEMRECT (WM_USER + 29)
|
||||
#define TB_BUTTONSTRUCTSIZE (WM_USER + 30)
|
||||
#define TB_SETBUTTONSIZE (WM_USER + 31)
|
||||
#define TB_SETBITMAPSIZE (WM_USER + 32)
|
||||
#define TB_AUTOSIZE (WM_USER + 33)
|
||||
#define TB_GETTOOLTIPS (WM_USER + 35)
|
||||
#define TB_SETTOOLTIPS (WM_USER + 36)
|
||||
#define TB_SETPARENT (WM_USER + 37)
|
||||
#define TB_SETROWS (WM_USER + 39)
|
||||
#define TB_GETROWS (WM_USER + 40)
|
||||
#define TB_GETBITMAPFLAGS (WM_USER + 41)
|
||||
#define TB_SETCMDID (WM_USER + 42)
|
||||
#define TB_CHANGEBITMAP (WM_USER + 43)
|
||||
#define TB_GETBITMAP (WM_USER + 44)
|
||||
#define TB_GETBUTTONTEXTA (WM_USER + 45)
|
||||
#define TB_GETBUTTONTEXTW (WM_USER + 75)
|
||||
#define TB_REPLACEBITMAP (WM_USER + 46)
|
||||
#define TB_SETINDENT (WM_USER + 47)
|
||||
#define TB_SETIMAGELIST (WM_USER + 48)
|
||||
#define TB_GETIMAGELIST (WM_USER + 49)
|
||||
#define TB_LOADIMAGES (WM_USER + 50)
|
||||
#define TB_GETRECT (WM_USER + 51) // wParam is the Cmd instead of index
|
||||
#define TB_SETHOTIMAGELIST (WM_USER + 52)
|
||||
#define TB_GETHOTIMAGELIST (WM_USER + 53)
|
||||
#define TB_SETDISABLEDIMAGELIST (WM_USER + 54)
|
||||
#define TB_GETDISABLEDIMAGELIST (WM_USER + 55)
|
||||
#define TB_SETSTYLE (WM_USER + 56)
|
||||
#define TB_GETSTYLE (WM_USER + 57)
|
||||
#define TB_GETBUTTONSIZE (WM_USER + 58)
|
||||
#define TB_SETBUTTONWIDTH (WM_USER + 59)
|
||||
#define TB_SETMAXTEXTROWS (WM_USER + 60)
|
||||
#define TB_GETTEXTROWS (WM_USER + 61)
|
||||
|
||||
#ifdef UNICODE
|
||||
#define TB_GETBUTTONTEXT TB_GETBUTTONTEXTW
|
||||
#define TB_SAVERESTORE TB_SAVERESTOREW
|
||||
#define TB_ADDSTRING TB_ADDSTRINGW
|
||||
#define TB_GETBUTTONTEXT TB_GETBUTTONTEXTW
|
||||
#define TB_SAVERESTORE TB_SAVERESTOREW
|
||||
#define TB_ADDSTRING TB_ADDSTRINGW
|
||||
#else
|
||||
#define TB_GETBUTTONTEXT TB_GETBUTTONTEXTA
|
||||
#define TB_SAVERESTORE TB_SAVERESTOREA
|
||||
#define TB_ADDSTRING TB_ADDSTRINGA
|
||||
#define TB_GETBUTTONTEXT TB_GETBUTTONTEXTA
|
||||
#define TB_SAVERESTORE TB_SAVERESTOREA
|
||||
#define TB_ADDSTRING TB_ADDSTRINGA
|
||||
#endif
|
||||
|
||||
#define TB_GETOBJECT (WM_USER + 62) // wParam == IID, lParam void **ppv
|
||||
#define TB_GETHOTITEM (WM_USER + 71)
|
||||
#define TB_SETHOTITEM (WM_USER + 72) // wParam == iHotItem
|
||||
#define TB_SETANCHORHIGHLIGHT (WM_USER + 73) // wParam == TRUE/FALSE
|
||||
#define TB_GETANCHORHIGHLIGHT (WM_USER + 74)
|
||||
#define TB_MAPACCELERATORA (WM_USER + 78) // wParam == ch, lParam int * pidBtn
|
||||
#define TB_GETOBJECT (WM_USER + 62) // wParam == IID, lParam void **ppv
|
||||
#define TB_GETHOTITEM (WM_USER + 71)
|
||||
#define TB_SETHOTITEM (WM_USER + 72) // wParam == iHotItem
|
||||
#define TB_SETANCHORHIGHLIGHT (WM_USER + 73) // wParam == TRUE/FALSE
|
||||
#define TB_GETANCHORHIGHLIGHT (WM_USER + 74)
|
||||
#define TB_MAPACCELERATORA (WM_USER + 78) // wParam == ch, lParam int * pidBtn
|
||||
|
||||
|
||||
#define TB_GETINSERTMARK (WM_USER + 79) // lParam == LPTBINSERTMARK
|
||||
#define TB_SETINSERTMARK (WM_USER + 80) // lParam == LPTBINSERTMARK
|
||||
#define TB_INSERTMARKHITTEST (WM_USER + 81) // wParam == LPPOINT lParam == LPTBINSERTMARK
|
||||
#define TB_MOVEBUTTON (WM_USER + 82)
|
||||
#define TB_GETMAXSIZE (WM_USER + 83) // lParam == LPSIZE
|
||||
#define TB_SETEXTENDEDSTYLE (WM_USER + 84) // For TBSTYLE_EX_*
|
||||
#define TB_GETEXTENDEDSTYLE (WM_USER + 85) // For TBSTYLE_EX_*
|
||||
#define TB_GETPADDING (WM_USER + 86)
|
||||
#define TB_SETPADDING (WM_USER + 87)
|
||||
#define TB_SETINSERTMARKCOLOR (WM_USER + 88)
|
||||
#define TB_GETINSERTMARKCOLOR (WM_USER + 89)
|
||||
#define TB_GETINSERTMARK (WM_USER + 79) // lParam == LPTBINSERTMARK
|
||||
#define TB_SETINSERTMARK (WM_USER + 80) // lParam == LPTBINSERTMARK
|
||||
#define TB_INSERTMARKHITTEST (WM_USER + 81) // wParam == LPPOINT lParam == LPTBINSERTMARK
|
||||
#define TB_MOVEBUTTON (WM_USER + 82)
|
||||
#define TB_GETMAXSIZE (WM_USER + 83) // lParam == LPSIZE
|
||||
#define TB_SETEXTENDEDSTYLE (WM_USER + 84) // For TBSTYLE_EX_*
|
||||
#define TB_GETEXTENDEDSTYLE (WM_USER + 85) // For TBSTYLE_EX_*
|
||||
#define TB_GETPADDING (WM_USER + 86)
|
||||
#define TB_SETPADDING (WM_USER + 87)
|
||||
#define TB_SETINSERTMARKCOLOR (WM_USER + 88)
|
||||
#define TB_GETINSERTMARKCOLOR (WM_USER + 89)
|
||||
|
||||
#define TB_SETCOLORSCHEME CCM_SETCOLORSCHEME // lParam is color scheme
|
||||
#define TB_GETCOLORSCHEME CCM_GETCOLORSCHEME // fills in COLORSCHEME pointed to by lParam
|
||||
#define TB_SETCOLORSCHEME CCM_SETCOLORSCHEME // lParam is color scheme
|
||||
#define TB_GETCOLORSCHEME CCM_GETCOLORSCHEME // fills in COLORSCHEME pointed to by lParam
|
||||
|
||||
#define TB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
|
||||
#define TB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
|
||||
#define TB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
|
||||
#define TB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
|
||||
|
||||
#define TB_MAPACCELERATORW (WM_USER + 90) // wParam == ch, lParam int * pidBtn
|
||||
#define TB_MAPACCELERATORW (WM_USER + 90) // wParam == ch, lParam int * pidBtn
|
||||
#ifdef UNICODE
|
||||
#define TB_MAPACCELERATOR TB_MAPACCELERATORW
|
||||
#define TB_MAPACCELERATOR TB_MAPACCELERATORW
|
||||
#else
|
||||
#define TB_MAPACCELERATOR TB_MAPACCELERATORA
|
||||
#define TB_MAPACCELERATOR TB_MAPACCELERATORA
|
||||
#endif
|
||||
|
||||
#define TBIMHT_AFTER 1 // TRUE = insert After iButton, otherwise before
|
||||
#define TBIMHT_BACKGROUND 2 // TRUE iff missed buttons completely
|
||||
#define TBIMHT_AFTER 1 // TRUE = insert After iButton, otherwise before
|
||||
#define TBIMHT_BACKGROUND 2 // TRUE iff missed buttons completely
|
||||
|
||||
#define TBBF_LARGE 1
|
||||
#define TBBF_LARGE 1
|
||||
|
||||
|
||||
#define TBIF_IMAGE 1
|
||||
#define TBIF_TEXT 2
|
||||
#define TBIF_STATE 4
|
||||
#define TBIF_STYLE 8
|
||||
#define TBIF_LPARAM 16
|
||||
#define TBIF_COMMAND 32
|
||||
#define TBIF_SIZE 64
|
||||
#define TBIF_IMAGE 1
|
||||
#define TBIF_TEXT 2
|
||||
#define TBIF_STATE 4
|
||||
#define TBIF_STYLE 8
|
||||
#define TBIF_LPARAM 16
|
||||
#define TBIF_COMMAND 32
|
||||
#define TBIF_SIZE 64
|
||||
|
||||
#define TBIF_BYINDEX 2147483648 // this specifies that the wparam in Get/SetButtonInfo is an index, not id
|
||||
#define TBIF_BYINDEX 2147483648 // this specifies that the wparam in Get/SetButtonInfo is an index, not id
|
||||
|
||||
#ifdef UNICODE
|
||||
#define TBBUTTONINFO TBBUTTONINFOW
|
||||
#define LPTBBUTTONINFO LPTBBUTTONINFOW
|
||||
#define TBBUTTONINFO TBBUTTONINFOW
|
||||
#define LPTBBUTTONINFO LPTBBUTTONINFOW
|
||||
#else
|
||||
#define TBBUTTONINFO TBBUTTONINFOA
|
||||
#define LPTBBUTTONINFO LPTBBUTTONINFOA
|
||||
#define TBBUTTONINFO TBBUTTONINFOA
|
||||
#define LPTBBUTTONINFO LPTBBUTTONINFOA
|
||||
#endif
|
||||
|
||||
#define TB_GETBUTTONINFOW (WM_USER + 63)
|
||||
#define TB_SETBUTTONINFOW (WM_USER + 64)
|
||||
#define TB_GETBUTTONINFOA (WM_USER + 65)
|
||||
#define TB_SETBUTTONINFOA (WM_USER + 66)
|
||||
#define TB_GETBUTTONINFOW (WM_USER + 63)
|
||||
#define TB_SETBUTTONINFOW (WM_USER + 64)
|
||||
#define TB_GETBUTTONINFOA (WM_USER + 65)
|
||||
#define TB_SETBUTTONINFOA (WM_USER + 66)
|
||||
#ifdef UNICODE
|
||||
#define TB_GETBUTTONINFO TB_GETBUTTONINFOW
|
||||
#define TB_SETBUTTONINFO TB_SETBUTTONINFOW
|
||||
#define TB_GETBUTTONINFO TB_GETBUTTONINFOW
|
||||
#define TB_SETBUTTONINFO TB_SETBUTTONINFOW
|
||||
#else
|
||||
#define TB_GETBUTTONINFO TB_GETBUTTONINFOA
|
||||
#define TB_SETBUTTONINFO TB_SETBUTTONINFOA
|
||||
#define TB_GETBUTTONINFO TB_GETBUTTONINFOA
|
||||
#define TB_SETBUTTONINFO TB_SETBUTTONINFOA
|
||||
#endif
|
||||
|
||||
#define TB_INSERTBUTTONW (WM_USER + 67)
|
||||
#define TB_ADDBUTTONSW (WM_USER + 68)
|
||||
#define TB_HITTEST (WM_USER + 69)
|
||||
#define TB_INSERTBUTTONW (WM_USER + 67)
|
||||
#define TB_ADDBUTTONSW (WM_USER + 68)
|
||||
#define TB_HITTEST (WM_USER + 69)
|
||||
#ifdef UNICODE
|
||||
#define TB_INSERTBUTTON TB_INSERTBUTTONW
|
||||
#define TB_ADDBUTTONS TB_ADDBUTTONSW
|
||||
#define TB_INSERTBUTTON TB_INSERTBUTTONW
|
||||
#define TB_ADDBUTTONS TB_ADDBUTTONSW
|
||||
#else
|
||||
#define TB_INSERTBUTTON TB_INSERTBUTTONA
|
||||
#define TB_ADDBUTTONS TB_ADDBUTTONSA
|
||||
#define TB_INSERTBUTTON TB_INSERTBUTTONA
|
||||
#define TB_ADDBUTTONS TB_ADDBUTTONSA
|
||||
#endif
|
||||
|
||||
#define TB_SETDRAWTEXTFLAGS (WM_USER + 70) // wParam == mask lParam == bit values
|
||||
#define TB_SETDRAWTEXTFLAGS (WM_USER + 70)
|
||||
#define TB_GETSTRING (WM_USER + 92)
|
||||
|
||||
#define TB_GETSTRING (WM_USER + 92)
|
||||
|
||||
#define TBN_GETBUTTONINFOA (TBN_FIRST-0)
|
||||
#define TBN_BEGINDRAG (TBN_FIRST-1)
|
||||
#define TBN_ENDDRAG (TBN_FIRST-2)
|
||||
#define TBN_BEGINADJUST (TBN_FIRST-3)
|
||||
#define TBN_ENDADJUST (TBN_FIRST-4)
|
||||
#define TBN_RESET (TBN_FIRST-5)
|
||||
#define TBN_QUERYINSERT (TBN_FIRST-6)
|
||||
#define TBN_QUERYDELETE (TBN_FIRST-7)
|
||||
#define TBN_TOOLBARCHANGE (TBN_FIRST-8)
|
||||
#define TBN_CUSTHELP (TBN_FIRST-9)
|
||||
#define TBN_DROPDOWN (TBN_FIRST-10)
|
||||
#define TBN_GETOBJECT (TBN_FIRST-12)
|
||||
#define TBN_GETBUTTONINFOA (TBN_FIRST-0)
|
||||
#define TBN_BEGINDRAG (TBN_FIRST-1)
|
||||
#define TBN_ENDDRAG (TBN_FIRST-2)
|
||||
#define TBN_BEGINADJUST (TBN_FIRST-3)
|
||||
#define TBN_ENDADJUST (TBN_FIRST-4)
|
||||
#define TBN_RESET (TBN_FIRST-5)
|
||||
#define TBN_QUERYINSERT (TBN_FIRST-6)
|
||||
#define TBN_QUERYDELETE (TBN_FIRST-7)
|
||||
#define TBN_TOOLBARCHANGE (TBN_FIRST-8)
|
||||
#define TBN_CUSTHELP (TBN_FIRST-9)
|
||||
#define TBN_DROPDOWN (TBN_FIRST-10)
|
||||
#define TBN_GETOBJECT (TBN_FIRST-12)
|
||||
|
||||
/* Toolbar Control Constants */
|
||||
#define TBSTATE_CHECKED 1
|
||||
#define TBSTATE_PRESSED 2
|
||||
#define TBSTATE_ENABLED 4
|
||||
#define TBSTATE_HIDDEN 8
|
||||
#define TBSTATE_INDETERMINATE 16
|
||||
#define TBSTATE_WRAP 32
|
||||
#define TBSTATE_ELLIPSES 64
|
||||
#define TBSTATE_MARKED 128
|
||||
#define TBSTATE_CHECKED 1
|
||||
#define TBSTATE_PRESSED 2
|
||||
#define TBSTATE_ENABLED 4
|
||||
#define TBSTATE_HIDDEN 8
|
||||
#define TBSTATE_INDETERMINATE 16
|
||||
#define TBSTATE_WRAP 32
|
||||
#define TBSTATE_ELLIPSES 64
|
||||
#define TBSTATE_MARKED 128
|
||||
|
||||
#define TBSTYLE_BUTTON 0 // obsolete; use BTNS_BUTTON instead
|
||||
#define TBSTYLE_SEP 1 // obsolete; use BTNS_SEP instead
|
||||
#define TBSTYLE_CHECK 2 // obsolete; use BTNS_CHECK instead
|
||||
#define TBSTYLE_GROUP 4 // obsolete; use BTNS_GROUP instead
|
||||
#define TBSTYLE_CHECKGROUP (TBSTYLE_GROUP + TBSTYLE_CHECK) // obsolete; use BTNS_CHECKGROUP instead
|
||||
#define TBSTYLE_DROPDOWN 8 // obsolete; use BTNS_DROPDOWN instead
|
||||
#define TBSTYLE_AUTOSIZE 16 // obsolete; use BTNS_AUTOSIZE instead
|
||||
#define TBSTYLE_NOPREFIX 32 // obsolete; use BTNS_NOPREFIX instead
|
||||
#define TBSTYLE_BUTTON 0
|
||||
#define TBSTYLE_SEP 1
|
||||
#define TBSTYLE_CHECK 2
|
||||
#define TBSTYLE_GROUP 4
|
||||
#define TBSTYLE_CHECKGROUP (TBSTYLE_GROUP + TBSTYLE_CHECK)
|
||||
#define TBSTYLE_DROPDOWN 8
|
||||
#define TBSTYLE_AUTOSIZE 16
|
||||
#define TBSTYLE_NOPREFIX 32
|
||||
|
||||
#define TBSTYLE_TOOLTIPS 256
|
||||
#define TBSTYLE_WRAPABLE 512
|
||||
#define TBSTYLE_ALTDRAG 1024
|
||||
#define TBSTYLE_FLAT 2048
|
||||
#define TBSTYLE_LIST 4096
|
||||
#define TBSTYLE_CUSTOMERASE 8192
|
||||
#define TBSTYLE_REGISTERDROP 16384
|
||||
#define TBSTYLE_TRANSPARENT 32768
|
||||
#define TBSTYLE_TOOLTIPS 256
|
||||
#define TBSTYLE_WRAPABLE 512
|
||||
#define TBSTYLE_ALTDRAG 1024
|
||||
#define TBSTYLE_FLAT 2048
|
||||
#define TBSTYLE_LIST 4096
|
||||
#define TBSTYLE_CUSTOMERASE 8192
|
||||
#define TBSTYLE_REGISTERDROP 16384
|
||||
#define TBSTYLE_TRANSPARENT 32768
|
||||
|
||||
#define BTNS_BUTTON TBSTYLE_BUTTON
|
||||
#define BTNS_SEP TBSTYLE_SEP
|
||||
#define BTNS_CHECK TBSTYLE_CHECK
|
||||
#define BTNS_GROUP TBSTYLE_GROUP
|
||||
#define BTNS_CHECKGROUP TBSTYLE_CHECKGROUP
|
||||
#define BTNS_DROPDOWN TBSTYLE_DROPDOWN
|
||||
#define BTNS_AUTOSIZE TBSTYLE_AUTOSIZE
|
||||
#define BTNS_NOPREFIX TBSTYLE_NOPREFIX
|
||||
#define BTNS_SHOWTEXT 64 // ignored unless TBSTYLE_EX_MIXEDBUTTONS is set
|
||||
#define BTNS_WHOLEDROPDOWN 128 // draw drop-down arrow, but without split arrow section
|
||||
|
||||
#define BTNS_BUTTON TBSTYLE_BUTTON // 0x0000
|
||||
#define BTNS_SEP TBSTYLE_SEP // 0x0001
|
||||
#define BTNS_CHECK TBSTYLE_CHECK // 0x0002
|
||||
#define BTNS_GROUP TBSTYLE_GROUP // 0x0004
|
||||
#define BTNS_CHECKGROUP TBSTYLE_CHECKGROUP // (TBSTYLE_GROUP | TBSTYLE_CHECK)
|
||||
#define BTNS_DROPDOWN TBSTYLE_DROPDOWN // 0x0008
|
||||
#define BTNS_AUTOSIZE TBSTYLE_AUTOSIZE // 0x0010; automatically calculate the cx of the button
|
||||
#define BTNS_NOPREFIX TBSTYLE_NOPREFIX // 0x0020; this button should not have accel prefix
|
||||
#define BTNS_SHOWTEXT 64 // ignored unless TBSTYLE_EX_MIXEDBUTTONS is set
|
||||
#define BTNS_WHOLEDROPDOWN 128 // draw drop-down arrow, but without split arrow section
|
||||
#define TBSTYLE_EX_DRAWDDARROWS 1
|
||||
#define TBSTYLE_EX_MIXEDBUTTONS 8
|
||||
#define TBSTYLE_EX_HIDECLIPPEDBUTTONS 16 // don't show partially obscured buttons
|
||||
#define TBSTYLE_EX_DOUBLEBUFFER 0x00000080
|
||||
|
||||
#define TBSTYLE_EX_DRAWDDARROWS 1
|
||||
#define TBSTYLE_EX_MIXEDBUTTONS 8
|
||||
#define TBSTYLE_EX_HIDECLIPPEDBUTTONS 16 // don't show partially obscured buttons
|
||||
#define TBSTYLE_EX_DOUBLEBUFFER 0x00000080
|
||||
#define NM_FIRST (0- 0) // generic to all controls
|
||||
#define NM_LAST (0- 99)
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
// WM_NOTIFY codes (NMHDR.code values)
|
||||
#define NM_OUTOFMEMORY (NM_FIRST-1)
|
||||
#define NM_CLICK (NM_FIRST-2) // uses NMCLICK struct
|
||||
#define NM_DBLCLK (NM_FIRST-3)
|
||||
#define NM_RETURN (NM_FIRST-4)
|
||||
#define NM_RCLICK (NM_FIRST-5) // uses NMCLICK struct
|
||||
#define NM_RDBLCLK (NM_FIRST-6)
|
||||
#define NM_SETFOCUS (NM_FIRST-7)
|
||||
#define NM_KILLFOCUS (NM_FIRST-8)
|
||||
#define NM_CUSTOMDRAW (NM_FIRST-12)
|
||||
#define NM_HOVER (NM_FIRST-13)
|
||||
#define NM_NCHITTEST (NM_FIRST-14) // uses NMMOUSE struct
|
||||
#define NM_KEYDOWN (NM_FIRST-15) // uses NMKEY struct
|
||||
#define NM_RELEASEDCAPTURE (NM_FIRST-16)
|
||||
#define NM_SETCURSOR (NM_FIRST-17) // uses NMMOUSE struct
|
||||
#define NM_CHAR (NM_FIRST-18) // uses NMCHAR struct
|
||||
#define NM_TOOLTIPSCREATED (NM_FIRST-19) // notify of when the tooltips window is create
|
||||
#define NM_LDOWN (NM_FIRST-20)
|
||||
#define NM_RDOWN (NM_FIRST-21)
|
||||
|
||||
#define NM_FIRST (0- 0) // generic to all controls
|
||||
#define NM_LAST (0- 99)
|
||||
|
||||
#define NM_OUTOFMEMORY (NM_FIRST-1)
|
||||
#define NM_CLICK (NM_FIRST-2) // uses NMCLICK struct
|
||||
#define NM_DBLCLK (NM_FIRST-3)
|
||||
#define NM_RETURN (NM_FIRST-4)
|
||||
#define NM_RCLICK (NM_FIRST-5) // uses NMCLICK struct
|
||||
#define NM_RDBLCLK (NM_FIRST-6)
|
||||
#define NM_SETFOCUS (NM_FIRST-7)
|
||||
#define NM_KILLFOCUS (NM_FIRST-8)
|
||||
#define NM_CUSTOMDRAW (NM_FIRST-12)
|
||||
#define NM_HOVER (NM_FIRST-13)
|
||||
#define NM_NCHITTEST (NM_FIRST-14) // uses NMMOUSE struct
|
||||
#define NM_KEYDOWN (NM_FIRST-15) // uses NMKEY struct
|
||||
#define NM_RELEASEDCAPTURE (NM_FIRST-16)
|
||||
#define NM_SETCURSOR (NM_FIRST-17) // uses NMMOUSE struct
|
||||
#define NM_CHAR (NM_FIRST-18) // uses NMCHAR struct
|
||||
#define NM_TOOLTIPSCREATED (NM_FIRST-19) // notify of when the tooltips window is create
|
||||
#define NM_LDOWN (NM_FIRST-20)
|
||||
#define NM_RDOWN (NM_FIRST-21)
|
||||
#define SBARS_SIZEGRIP 256
|
||||
#define SBARS_TOOLTIPS 2048
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user