I think you may be looking in the wrong direction! The key to
updating is in handling the Paint event triggered whenever
Windows thinks a window (or part thereof) should be repainted.
This covers the situations you describe.
Win32::GUI uses an approach that means you must redraw *everything*
that is displayed. In theory, you can get away with redrawing just
part of the window, but it is much easier to simply re-run the whole
display routine each time.

In the code snippets below, showall(); does all the drawing, which in my
program is quite an extensive operation. Nevertheless, the update is
very smooth and looks just like real Windows - and better than some
commercial programs I have encountered.

NB. The $dc->Validate(); is very important.

-------------------------------------------

# this is a graphic "canvas" where everything is displayed
$Win2 = new Win32::GUI::Graphic(
        -parent,$Win,
        -name, 'workwin',
        -left,  0,
        -top,   $win2top,
        -height, $Win->Height(),
        -width, $Win->Width(),
        );

# this is the DC for the graphic
my $dc = $Win2->GetDC;

# this fires every time window needs repainting
# (Windows sends the notification)
sub workwin_Paint {
        showall();                # all the display activity
        $dc->Validate();          # very important
        }

-------------------------------

Alan

Original message:
From: Jonathan Southwick <[EMAIL PROTECTED]>
Subject: [perl-win32-gui-users] need subroutine to run when Window gets focus


Is there any way to get a routine to run when a window is brought to the 
top or receives focus?  That seems to be the only way I can get a DC object 
to refresh after it is covered by another window.

Jonathan


Reply via email to