The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -w
use strict;
use warnings;

die "This sample crashes perl when calling FreeImage_LockPage";
$|=1; #autoflush

#
#  Test with Win32::GUI and Multi-Page system
#
# Functions Test :
#    - newFromFile
#    - AppendPage
#    - GetPageCount
#    - LockPage 
#    - UnlockPage
#    - GetLockedPageNumbers 

use FindBin();
use Win32::GUI qw(WS_CLIPCHILDREN);
use Win32::GUI::DIBitmap;

# Create a MDIB bitmap

my $mdib = new Win32::GUI::MDIBitmap ("mdib.tiff", FIF_TIFF,)
   	or die "new";

for my $i (1..5) {
    my $dib = newFromFile Win32::GUI::DIBitmap ("$FindBin::Bin/$i.bmp")
        or die "Failed reading $i.bmp";
    $mdib->AppendPage ($dib);
}

#undef $mdib;

# Load a MDIB bitmap

#$mdib = newFromFile Win32::GUI::MDIBitmap ("mdib.tiff") or die "newFromFile";

print "Number of pages :", $mdib->GetPageCount(), "\n";

my $i = 0;

my $W = new Win32::GUI::Window (
    -title    => "Win32::GUI::DIBitmap test",
    -left     => 100,
    -top      => 100,
    -width    => 400,
    -height   => 400,
    -name     => "Window",
    -pushstyle => WS_CLIPCHILDREN,
) or die "new Window";

my ($width, $height) = ($W->GetClientRect)[2..3];

$W->AddButton (
    -name    => "Button",
    -text    => "Next",
    -pos     => [0 , 0],
);

$W->Show();
Win32::GUI::Dialog();
exit(0);

sub Button_Click {

  $i = $i + 1;
  $i = 0 if ($i >= $mdib->GetPageCount());

  print "Current page :", $i, "\n";
  $W->InvalidateRect(0);
}

sub Window_Paint {
	my $dc = shift;

    my ($width, $height) = ($W->GetClientRect)[2..3];

    print "Locking page $i\n";
	my $dib = $mdib->LockPage($i);
    print "Locked\n";

	#print $mdib->GetLockedPageNumbers(), "\n";

	#$dib->AlphaCopyToDC($dc, 50, 50);
	#$dib->CopyToDC($dc, 50, 50);
	#$dib->SaveToFile ("test.bmp");

    print "UnLocking\n";
	$mdib->UnlockPage($dib);
    print "UnLocked\n";

	$dc->Validate();
	return 1;
}