RE: win32lib: need serious help with Rebar
- Posted by Matt Lewis <matthewwalkerlewis at yahoo.com> Jul 30, 2003
- 460 views
> From: Dan Moyer [mailto:DANIELMOYER at prodigy.net] > Peter, > > I thought "setVisible" would work to switch bands on/off, so > I altered a > rebar demo that comes with Win32Lib to try it, but it only worked with > controls on the bands, not the bands themselves, at least in > under v57.9. No, it looks like you need to use RB_DELETEBAND and RB_INSERTBAND. Here's a reworked demo that mostly works, although the combobox doesn't get painted properly until after it's been covered by another window or the rebar gets resized (it won't really, because it's locked to the size of the window). Also, the combo may lose its cy size, so you may want to play with that. I don't know what effect this will have on other controls, so you'll have to experiment. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/pla tform/commctls/rebar/messages/rb_deleteband.asp http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/pla tform/commctls/rebar/messages/rb_deleteband.asp -- ReBar.exw -- Matt Lewis without warning with trace include win32lib.ew constant Win = create( Window, "ReBar Demo", 0, 20, 20, 300, 300,0) , RB = create( ReBar, "", Win, 0, 0, 600, 300, 0 ), Band1 = create( ReBarBand, "Band 1", RB, 0, 0, 100, 100, RBBS_BREAK), CB = create( Combo, "", RB, 0, 200, 90, 25 * 6, 0 ) integer Band2 Band2 = create( ReBarBand, "Band 2", RB, 0, 0, 100, 100, RBBS_BREAK) constant Tool = create( ToolBar, "", RB, 0, 0, 300, 34, 0), One = create( PushButton, "One", Tool, 0, 0, 50, 30, 0 ), Two = create( PushButton, "Two", Tool, 50, 0, 50, 30, 0), Lbl1 = create( RText, "Edit1:", Win, 0, 10, 50, 25,0), Edit1 = create( SleText, "", Win, 50, 10, 200, 25, 0), Lbl2 = create( RText, "Edit2:", Win, 0, 50, 50, 25, 0), Edit2 = create( SleText, "", Win, 50, 50, 200, 25, 0), toggle = create( PushButton, "Toggle", Win, 50, 150, 90, 25, 0 ) addToBand( CB, Band1 ) addToBand( Tool, Band2 ) integer vis vis = 1 procedure toggle_push( integer self, atom event, sequence params ) integer void atom struct vis = 1 - vis if vis then struct = struct_REBARBANDINFO( or_all( { RBBIM_ID, -- fMask RBBIM_SIZE, RBBIM_CHILD, RBBIM_STYLE } ), or_all( { RBBS_CHILDEDGE, -- fStyle RBBS_GRIPPERALWAYS, 0 }), 0, -- clrFore 0, -- clrBack 0, -- lpText 0, -- iImage getHandle(CB), -- hwndChild 0, -- cxMinChild 100, -- cyMinChild 100, -- cx 0, -- hbmBack 0, -- wID 0, -- cyChild 0, -- cyMaxChild 0, -- cyIntegral 0, -- cxIdeal 0, -- lParam 0 ) -- cxHeader void = sendMessage( RB, RB_INSERTBAND, 0, struct ) Band2 = subClassControl( {ReBarBand, RB}, void ) release_mem(struct) repaintWindow( CB ) setCtlSize( RB, 0,0 ) else void = sendMessage( RB, RB_DELETEBAND, 0, 0 ) end if end procedure setHandler( toggle, w32HClick, routine_id("toggle_push")) addItem( CB, {"One","Two","Etc..."} ) -- This routine ensures that all controls shift up/down if the rebar size changes. ------------------------------------------------ procedure onResize_Screen(integer self, integer event, sequence parms) ------------------------------------------------ setRect(Edit1, 50, 10, 200, 25, False) setRect(Edit2, 50, 50, 200, 25, False) setRect(Lbl1, 0, 10, 50, 25, False) setRect(Lbl2, 0, 50, 50, 25, False) end procedure setHandler(Screen, w32HResize, routine_id("onResize_Screen")) WinMain( Win, Normal )