Hi,
The example below will only work on the latest code line from CVS.
I'm trying to get my head round using scroll bars. In my test example I want to
create a window containing one tab strip. In the tab strip there will be a
child window containing a scroll bar and 10 buttons. Scrolling the scroll bar
will move the buttons into and out view.
Now, the scrolling part works fine - but is using a child window in this way
the correct approach? For example, interacting with the child window (clicking
on a button, or scrolling) loses focus (which you would expect for a normal
window) but is not the correct behaviour in this case. Am I missing something
fundamental?
Apologies for the dodgy code - is a hack job:)
cheers,
jez.
===========
use Win32::GUI;
use Win32::GUI::BorderlessWindow;
#create the main window
my $win = new Win32::GUI::Window (
-name => "MainWin",
-left => 0,
-top => 100,
-width => 500,
-height => 300,
-sizable => 1,
-text => "Scrollbar Test 2",
-noflicker => 1,
);
#create a tab strip
$win->AddTabStrip (
-name => "Tab",
-left => 0,
-top => 100,
-width => 250,
-height => 150,
);
$win->Tab->InsertItem(-text => 'Some Tab');
#create a child window with a scroll bar
my $childwin = new Win32::GUI::BorderlessWindow (
-name => "Child",
-parent =>$win,
-left => 10,
-top => 250,
-width => 200,
-height => 120,
-hscroll => 1,
-noflicker => 1,
-onScroll => \&scrolled
);
#create content for our child window, 10 buttons.
foreach (0..9) {
$childwin->AddButton (
-name => "Button".$_,
-pos => [$_*50, 30],
-size => [50, 20],
-text => 'Button'.$_,);
}
#set the scrollbar range and starting pos
$childwin->ScrollRange(0,0,450);
$childwin->ScrollPos(0,0);
$win->Show;
$childwin->Show;
Win32::GUI::Dialog;
sub scrolled {
my($object,$bar,$operation,$pos) = @_;
my $string;
$object->Scroll($bar,$operation,$pos);
#Scroll the buttons...
if($operation == SB_THUMBTRACK) {
foreach (0..9) {
$string='Button'.$_;
$childwin->$string->Move(($_*50)-$pos,30);
}
}
}