Not very elegant, but it works. The basic idea is to simply replace the label by creating a new one with the same name. To avoid artifacts, you can hide the original first.
#!/usr/bin/winperl
use warnings;
use strict;
use Win32::GUI;
my $w = Win32::GUI::Window->new(
-title => "Win32::GUI::Label test",
-left => 100,
-top => 100,
-width => 100,
-height => 100,
-name => "Window",
);
my $font = 0;
my @fonts = (
Win32::GUI::Font->new(
-name => 'Arial',
-size => 14,
-bold => 1,
),
Win32::GUI::Font->new(
-name => 'Arial',
-size => 14,
-italic => 1,
),
);
my @colors = ([0, 0, 0], [255, 0, 0]);
my @label_data = (
-name => "Label",
-left => 30,
-top => 10,
-text => "Test",
);
my $l = $w->AddLabel(
@label_data,
-font => $fonts[$font],
-foreground => $colors[$font],
);
$w->AddButton(
-name => 'Button',
-text => 'Change Font',
-left => 10,
-top => 45,
);
$w->Show();
Win32::GUI::Dialog();
sub Window_Terminate {
return -1;
}
sub Button_Click {
$font = ($font+1) % @fonts;
$l->Hide();
$l = $w->AddLabel(
@label_data,
-font => $fonts[$font],
-foreground => $colors[$font],
);
}
The basic idea came from the How-To.
bbfu
Black flowers blossom
Fearless on my breath