Plum, Jason wrote:
Could someone provide me with some insight as to the requirements to
make use of TrackMouse and such functions as MouseOver on a window? I
must be missing something simple because I can’t get them to work.
Does this help? You can only usefully call TrackMouse() when you're
already over a window - if you call it when out of a window it will
either do nothing, or if you pass TME_LEAVE flag you'll get an immediate
MouseOut event.
When over a window the TME_HOVER flag results in a MouseOver event,
after the mouse is stationary for the timeout peiod (default is 400ms I
think), and TME_LEAVE flag results in a MouseOut event when the mouse
leaves the window.
There appears to be some code in GUI_MessageLoops.cpp that attempts to
reset things when the MouseOut and MOUSEIn events happen, but as written
it doesn't do anything.
Rob.
#!perl -w
use strict;
use warnings;
use Win32::GUI();
sub TME_HOVER() {1}
sub TME_LEAVE() {2}
sub HOVER_DEFAULT() {0xFFFFFFFF}
my $state = 0; # 0 - out; 1 - in;
my $mw = Win32::GUI::Window->new(
-title => "MouseOver/Out",
-pos => [100,100],
-size => [400,300],
-onMouseOver => sub {print "Hover\n"; return 0;},
-onMouseOut => sub {print "Out\n"; $state=0; return 0;},
-onMouseMove => \&Move,
);
$mw->Show();
Win32::GUI::Dialog();
exit(0);
sub Move
{
return unless $state == 0;
print "In\n";
$state = 1;
$mw->TrackMouse(1000,TME_HOVER|TME_LEAVE);
return 1;
}
__END__
--
Robert May
Win32::GUI, a perl extension for native Win32 applications
http://perl-win32-gui.sourceforge.net/