(
bless({
-handle => 28640341,
Alpha => bless({ -id => 102, -menu => 41813267 }, "Win32::GUI::M
+enuItem"),
Beta => bless({ -id => 103, -menu => 41813267 }, "Win32::GUI::M
+enuItem"),
Program => bless({ -handle => 41813267 }, "Win32::GUI::MenuButton"
+),
}, "Win32::GUI::Menu"),
bless({
# tied Win32::GUI::Window
-accel => 0,
-handle => 7734092,
-name => "Main",
-type => 0,
}, "Win32::GUI::Window"),
)
bless({ -handle => 13304919 }, "Win32::GUI::Menu")
so what you want to do is skip GetMenu and either use global variables , or store $Menu inside $WinMain
Like this
#!/usr/bin/perl --
#!perl
use Win32::GUI;
use Data::Dump;
Main( @ARGV );
exit 0;
sub Main {
my $Menu = Win32::GUI::MakeMenu(
'&Program' => 'Program',
' > &Alpha' => { -name => 'Alpha', -onClick => \&Alpha_Select
+},
' > &Beta' => { -name => 'Beta', -onClick => \&Beta_Select },
);
my $WinMain = Win32::GUI::Window->new(
-name => 'Main',
-menu => $Menu,
-text => 'Menu Test',
-width => 300,
-height => 200,
-onTerminate => \&Main_Terminate,
);
$WinMain->Show();
$WinMain->{__special_Menu} = $Menu;
dd $Menu, $WinMain;
Win32::GUI::Dialog();
delete $WinMain->{__special_Menu}; # "DESTROY"/destructor/manual m
+emory cycle break
}
sub Main_Terminate { -1; }
sub Alpha_Select { 1; }
sub Beta_Select {
my($Window)=@_;
my $menuhandle=$Window->GetMenu();
my $menu = bless { -handle => $menuhandle }, 'Win32::GUI::Menu';
dd $menu;
#~ $menu->{'Beta'}->Enabled(0); # Doesn't work.
$Window->{__special_Menu}->{'Beta'}->Enabled(0);
return 1;
}
Useful regarding memory management, Tutorials: Variable Scoping in Perl: the basics, Coping with Scoping , Mini-Tutorial: Perl's Memory Management, Lexical scoping like a fox, Read this if you want to cut your development time in half!
I'll be back with more:) maybe |