Hi,
I've been trying to set/change the background color
of windows. As a real world example: You want to
create a child window that looks like a richtext control (white background) you
also want to be able to change the background of the child window to grey (to
give the illusion that it's 'disabled').
I don't think this scenario is possible with the
current win32-gui codeline. It seems the only way to set the background of a
window is by using a class, but there is no way to change the class once a
window has been created. The following comments (from line 884
GUI.xs):
/* TODO:
change class ???
if(perlcs.cs.iClass !=
NULL)
SetWindowLong(handle, GWL_
*/
I had a little google on the web, and I couldn't
find any examples on how to change a window class (only items within the class)
- perhaps it can't be done? Surely there must be an easy way to change the
background color of a window? Am I missing something?
The following perl code creates a (green) child
window - I'm trying to change it to red:)
Cheers,
jez.
-------------------------
use Win32::GUI;
use strict;
my $col=65025;
my $redbrush = new Win32::GUI::Brush(-color =>
[255,0,0]);
my $greenbrush = new Win32::GUI::Brush(-color =>
[0,255,0]);
my $WC = new
Win32::GUI::Class(
-name =>
"redrush",
-brush =>
$redbrush,
);
my $WC2 = new
Win32::GUI::Class(
-name =>
"greenbrush",
-brush =>
$greenbrush,
);
my $win = new Win32::GUI::Window (
-pos => [100,
100],
-size
=> [400, 400],
-name =>
'Window',
-text
=> 'Main Window',
# -onTimer =>
\&Change,
);
#$win->AddTimer("Timer", 10);
$win->AddButton(
-name =>
'button',
-pos => [0,
0],
-size =>
[50, 20],
-text
=> 'change',
-onClick =>
\&Change,
);
my $child = new Win32::GUI::Window (
-parent => $win,
-name =>
'ChildWin',
-pos => [100,
100],
-size
=> [100, 100],
-popstyle =>
WS_CAPTION | WS_SIZEBOX,
-pushstyle =>
WS_CHILD | WS_CLIPCHILDREN,
-pushexstyle =>
WS_EX_CLIENTEDGE,
-class => $WC2,
);
my $lable=$child->AddLabel(
-name =>
'Lab',
-pos => [20,
20],
-size =>
[50, 20],
-text
=> 'Some text',
-background =>
[255,0,0],
);
$child->Show();
$win->Show();
Win32::GUI::Dialog();
sub Change() {
$child->Change(-class => $WC);
#$lable->Change(-background => $col);
$child->InvalidateRect(0);
#$lable->InvalidateRect(0);
$col+=20;
print $col;
}