#! perl -w
#
# MDI sample
#
use strict;
use warnings;
use Win32::GUI();
# My child counter for unique name.
my $ChildCount = 0;
my $Window;
# Create Main menu.
my $Menu = Win32::GUI::MakeMenu(
"&File" => "File",
" > &New" => { -name => "File_New", -onClick => \&NewChild },
" > -" => 0,
" > E&xit" => { -name => "File_Exit", -onClick => sub { -1; } },
"&Window" => "Window",
" > &Next" => { -name => "Next", -onClick => sub { $Window->{Client}->Next; } },
" > &Previous" => { -name => "Prev", -onClick => sub { $Window->{Client}->Previous; } },
" > -" => 0,
" > &Cascade" => { -name => "Cascade", -onClick => sub { $Window->{Client}->Cascade(); 0; } },
" > Tile &Horizontally" => { -name => "TileH", -onClick => sub { $Window->{Client}->Tile(1); } },
" > Tile &Vertically" => { -name => "TileV", -onClick => sub { $Window->{Client}->Tile(0); } },
"&Help" => "Help",
" > &About " => { -name => "About", -onClick => sub { 1; } },
);
# First we create an MDIFrame window.
$Window = new Win32::GUI::MDIFrame (
-title => "Win32::GUI MDI Sample",
-left => 100,
-top => 100,
-width => 280,
-height => 280,
-name => "Window",
-menu => $Menu,
) or die "Window";
# We add an MDIClient window, This window manage Child Window.
$Window->AddMDIClient(
-name => "Client",
-firstchild => 100, # Define Child ID for menu item
-windowmenu => $Menu->{Window}->{-handle}, # Define Menu Handle where Add Window Child name
) or die "Client";
# Show main window and go to event loop
$Window->Show;
Win32::GUI::Dialog();
# This function create a new child window.
sub NewChild {
# Create a child window.
my $Child = $Window->{Client}->AddMDIChild (
-name => "Child".$ChildCount++,
-onActivate => sub { print "Activate\n"; },
-onDeactivate => sub { print "Deactivate\n"; },
-onTerminate => sub { print "Terminate\n";},
-onResize => \&ChildSize,
) or die "Child";
# Add a text filed into child window.
$Child->AddTextfield (
-name => "Edit",
-multiline => 1,
-pos => [0,0],
-size => [100,100],
);
# Force a resize.
ChildSize($Child);
}
# This function manage child window resize.
sub ChildSize {
my $self = shift;
my ($width, $height) = ($self->GetClientRect())[2..3];
# TextField take all client aera
$self->{Edit}->Resize($width, $height) if exists $self->{Edit};
}