use strict;
use warnings;
use Win32::GUI;
use Win32::GUI::BorderlessWindow;
use Win32::API;

my $w = 320;
my $h = 340;
my $isSkin = 0;

my $SetWindowPos = Win32::API->new("user32","SetWindowPos", "LLLLLLL", "L")
    or die "Failed to load SetWindowPos";

sub SWP_FRAMECHANGED() {32}
sub SWP_NOMOVE() {2}
sub SWP_NOSIZE() {1}
sub SWP_NOZORDER() {4}
sub SWP_NOACTIVATE() {16}

my $skin = Win32::GUI::Bitmap->new("skin1.bmp");

my $winSkin = Win32::GUI::Window->new(
				      -width  => $w,
				      -height => $h,
				      -name   => "winSkin",
				      -text   => "Skin Test",
				      );


my $dcSkin = Win32::GUI::DC::CreateCompatibleDC(0);
$dcSkin->SelectObject($skin);

$winSkin->Show();


Win32::GUI::Dialog;

sub winSkin_Paint
{
    my ($dc) = @_;

    $dc->BitBlt(0, 0, 320, 340, $dcSkin, 0, 0, 0xCC0020) if $isSkin;
    $dc->BkMode(1);
    if ($isSkin) {
	$dc->TextOut(25, 50, "Return to normal mode to close!");
	$dc->TextOut(80, 70, "Sorry, can't move the Skin yet!");
	$dc->TextOut(115, 90, "Right Click: Remove Skin!");
    } else {
	$dc->TextOut(115, 90, "Right Click: Show Skin!");
    }
    $dc->Validate;
}

sub winSkin_MouseRightDown
{
    if ($isSkin) {
	removeRegion();
    } else {
	addRegion();
    }
}

sub removeRegion
{
    $winSkin->SetWindowRgn(0, 1);

    $winSkin->Change(-pushstyle => WS_CAPTION);
    $winSkin->Change(-pushstyle => WS_SIZEBOX);
    $winSkin->InvalidateRect(1);
    $SetWindowPos->Call($winSkin->{-handle}, 0, 0, 0, 0, 0,
			SWP_FRAMECHANGED|SWP_NOMOVE|SWP_NOSIZE|
			SWP_NOACTIVATE|SWP_NOZORDER);
    $isSkin = 0;
}

sub addRegion
{
    my $rgn1 = Win32::GUI::Region::CreateEllipticRgn(20, -20, 150, 190);
    $rgn1->OffsetRgn(Win32::GUI::GetSystemMetrics(SM_CXBORDER) * 4,
		     Win32::GUI::GetSystemMetrics(SM_CYCAPTION));
    my $rgn2 = Win32::GUI::Region::CreateEllipticRgn(140, 100, 240, 300);
    $rgn2->OffsetRgn(Win32::GUI::GetSystemMetrics(SM_CXBORDER) * 4,
		     Win32::GUI::GetSystemMetrics(SM_CYCAPTION));

    Win32::GUI::Region::CombineRgn($rgn1, $rgn1, $rgn2, 2);

    $winSkin->SetWindowRgn($rgn1, 1);

    $winSkin->Change(-popstyle => WS_CAPTION);
    $winSkin->Change(-popstyle => WS_SIZEBOX);
    $winSkin->InvalidateRect(1);
    $SetWindowPos->Call($winSkin->{-handle}, 0, 0, 0, 0, 0,
			SWP_FRAMECHANGED|SWP_NOMOVE|SWP_NOSIZE|
			SWP_NOACTIVATE|SWP_NOZORDER);
    $isSkin = 1;
}

