|
From: E. W. <er...@we...> - 2008-07-02 22:39:18
|
Good timing. I just went through getting that to work. This code
fragment might help you, it's straight from my app. Your mileage (and
options and variables and etc) may vary. This isn't a complete app
obviously, but I think this is all that's relevant to wheel scrolling.
The $dy global is how much to scroll on each well detente, and
$lastscrollpos is a global for holding the last position. I hope the
rest is self-explanatory. Season to taste.
use Win32::GUI qw(WM_MOUSEWHEEL);
my $scrollapi = new Win32::API('user32', 'ScrollWindow', ['N', 'I', 'I',
'P', 'P'], 'N') or die "Can't load ScrollWindow API";
my $main = Win32::GUI::Window->new(-name => "Main"
, -text => "Main Window"
, -size => [$main_w, $main_h]
, -hasmaximize => 0
, -dialogui => 1
, -onTerminate => \&terminatemain);
$main->Hook(WM_MOUSEWHEEL, \&domousewheel);
$main->Show();
my $scrollwindow = Win32::GUI::Window->new(-name =>"scrollwindow"
, -parent => $main
, -pos => [$sw_x, $sw_y]
, -size => [$sw_h, $sw_w]
, -dialogui => 1
, -tabstop => 1
, -vscroll => 1
, -titlebar => 0
, -sizeable => 0
, -controlparent => 1
, -pushstyle => WS_CHILD
, -pushstyle => WS_VSCROLL
, -popstyle => WS_THICKFRAME
, -onScroll => \&doscroll);
$scrollwindow->Hook(WM_MOUSEWHEEL, \&domousewheel);
$scrollwindow->Show();
# create whatever controls or subwindows go inside the scrolling area
here, as children of $scrollwindow
sub domousewheel {
my ($object, $wParam, $lParam, $type, $msgcode) = @_;
my $distance = makesignedshort(($wParam & 0xFFFF0000) >> 16);
my $buttons = makesignedshort($wParam & 0x0000FFFF);
my $y =makesignedshort(($lParam & 0xFFFF0000) >> 16);
my $x = makesignedshort($lParam & 0x0000FFFF);
my $isdropped = $object->SendMessage(CB_GETDROPPEDSTATE, 0, 0);
return 1 if $isdropped;
if (0 < $distance) {
scrollmebro(-(2*$dy), 0);
} elsif (0 > $distance) {
scrollmebro(2*$dy, 0);
}
return 0;
}
sub scrollmebro {
my ($offset, $newpos) = @_;
my $curpos = $scrollwindow->ScrollPos(SB_VERT);
my ($min, $max) = $scrollwindow->ScrollRange(SB_VERT);
my $pos;
if ($offset) {
$pos = $curpos + $offset;
} elsif ($newpos) {
$pos = $newpos;
}
if (defined $pos) {
$pos = 0 if 0 > $pos;
$pos = $max if $max < $pos;
$scrollwindow->ScrollPos(SB_VERT, $pos);
my $deltapos = $lastscrollpos - $pos;
$scrollapi->Call($scrollwindow->{-handle}, 0, $deltapos, 0, 0);
$lastscrollpos = $pos;
}
}
Waldemar Biernacki wrote:
> Hey everybode!
>
> Do you know whether mouse scrolling button is implemented in Win32::GUI and how?
>
>
> Waldemar
>
>
> -------------------------------------------------------------------------
> Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
> Studies have shown that voting for your favorite open source project,
> along with a healthy diet, reduces your potential for chronic lameness
> and boredom. Vote Now at http://www.sourceforge.net/community/cca08
> _______________________________________________
> Perl-Win32-GUI-Users mailing list
> Per...@li...
> https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users
> http://perl-win32-gui.sourceforge.net/
>
|