The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -w

use strict;
use warnings;

use Win32::GUI  qw(WS_CAPTION WS_SIZEBOX WS_CHILD WS_CLIPCHILDREN WS_EX_CLIENTEDGE );

#Create the window and child window.

my $Win = new Win32::GUI::Window (
    -pos         => [100, 100],
    -size        => [450, 450],
    -name        => "Window",
    -text        => "Win32::GUI Gradent Fill demo",
    #NEM Events for this window
    -onTerminate => sub {return -1;}
);

#Create a child window
my $ChildWin = new Win32::GUI::Window (
    -parent      => $Win,
    -name        => "ChildWin",
    -pos         => [0, 0],
    -size        => [398, 398],
    -popstyle    => WS_CAPTION | WS_SIZEBOX,
    -pushstyle   => WS_CHILD | WS_CLIPCHILDREN,
    -pushexstyle => WS_EX_CLIENTEDGE,
    #NEM Events for this window
    -onPaint      => \&Paint,
);

#show both windows and enter the Dialog phase.
$Win->Show();
$ChildWin->Show();
Win32::GUI::Dialog();

sub Paint {
  #We need to paint our window
  my $win = shift;
  #get the DC
  my $dc = $win->GetDC;
  #draw a filled triangle, with points at 0,0 (blue) 100,100 (red) and 0,100 (green). 
  $dc->GradientFillTriangle(0,0,[0,0,255],100,100,[255,0,0],0,100,[0,255,0]);
  #draw a vertical filled rectangle red to blue 
  $dc->GradientFillRectangle(100,100,300,300,[255,0,0],[0,0,255],1);
  #draw a horizontal filled rectable black to while
  $dc->GradientFillRectangle(300,300,400,400,[0,0,0],[255,255,255]);
  $dc->Validate;
}