I just spent the past few hours debugging this. I have narrowed down the problem to the scope of the font object.
Here are two simple, complete test programs. ======== example 1 use Win32::GUI; my $main = Win32::GUI::Window->new ( -name => 'Main', -width => 350, -height => 250, -left => 300, -top => 200, -text => 'Font test', ); initialize_heading($main); $main->Show(); Win32::GUI::Dialog(); sub Main_Terminate { -1 } sub initialize_heading { my $win = shift; my $font = Win32::GUI::Font->new ( -name => 'Arial', -size => 14, -italic => 1, ); $win->AddLabel(-name => 'heading', -text => "Font test", -width => 150, -height => 30, -font => $font); } ======== end example 1 ======== example 2 use Win32::GUI; my $main = Win32::GUI::Window->new ( -name => 'Main', -width => 350, -height => 250, -left => 300, -top => 200, -text => 'Font test', ); my $font = Win32::GUI::Font->new ( -name => 'Arial', -size => 14, -italic => 1, ); initialize_heading($main); $main->Show(); Win32::GUI::Dialog(); sub Main_Terminate { -1 } sub initialize_heading { my $win = shift; $win->AddLabel(-name => 'heading', -text => "Font test", -width => 150, -height => 30, -font => $font); } ======== end example 2 These two examples are very similar. The only difference is the location of the "my $font" line. The first example localizes the variable to the initialize_heading subroutine. This does not work! When the window is displayed, the label is drawn with the wrong font. The second example makes the font variable global to the file scope. This example works: the label is drawn with the correct font. Why on earth would the font variable need to be global? How the heck is anyone supposed to know this? I would have assumed that the hash of parameters to any control would have been copied into the control object, and thus still have a nonzero reference count. Apparently that's not the case. Is it ever safe to undefine or redefine a font variable, or let it go out of scope? Is this documented anywhere? More importantly: Are there any other things that I don't know about that are going to bite me if they go out of scope? I am trying to make my initialization and setup code modular, so it can actually be maintained, instead of one big glomp of spaghetti. This sort of behavior does not help. Eric ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Perl-Win32-GUI-Users mailing list Perl-Win32-GUI-Users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users http://perl-win32-gui.sourceforge.net/