[Tokyo.pm] 猫型窓

matsumotoya matsumotoya @ om.jalinfotec.co.jp
1999年 7月 28日 (水) 10:24:37 CDT


松本です。リージョンデータをぺたぺたからもらってきて
猫型窓を作ろうとしたのですがうまく行きません。
どうしてでしょうか?


以下ソース。

use Tk;
use Win32::GUI;
use Win32::API;
$P=pack("N", 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 ,
 14 , 0 , 18 , 0 , 18 , 1 , 14 , 1 ,
 9 , 1 , 23 , 1 , 23 , 2 , 9 , 2 ,
 11 , 2 , 21 , 2 , 21 , 3 , 11 , 3 ,
 9 , 3 , 23 , 3 , 23 , 4 , 9 , 4 ,
 9 , 4 , 23 , 4 , 23 , 5 , 9 , 5 ,
 9 , 5 , 23 , 5 , 23 , 6 , 9 , 6 ,
 8 , 6 , 24 , 6 , 24 , 7 , 8 , 7 ,
 8 , 7 , 24 , 7 , 24 , 8 , 8 , 8 ,
 8 , 8 , 24 , 8 , 24 , 9 , 8 , 9 ,
 9 , 9 , 23 , 9 , 23 , 10 , 9 , 10 ,
 9 , 10 , 23 , 10 , 23 , 11 , 9 , 11 ,
 9 , 11 , 23 , 11 , 23 , 12 , 9 , 12 ,
 7 , 12 , 25 , 12 , 25 , 13 , 7 , 13 ,
 6 , 13 , 26 , 13 , 26 , 14 , 6 , 14 ,
 6 , 14 , 26 , 14 , 26 , 15 , 6 , 15 ,
 6 , 15 , 26 , 15 , 26 , 16 , 6 , 16 ,
 6 , 16 , 26 , 16 , 26 , 17 , 6 , 17 ,
 6 , 17 , 26 , 17 , 26 , 18 , 6 , 18 ,
 7 , 18 , 25 , 18 , 25 , 19 , 7 , 19 ,
 7 , 19 , 25 , 19 , 25 , 20 , 7 , 20 ,
 7 , 20 , 25 , 20 , 25 , 21 , 7 , 21 ,
 7 , 21 , 25 , 21 , 25 , 22 , 7 , 22 ,
 8 , 22 , 24 , 22 , 24 , 23 , 8 , 23 ,
 9 , 23 , 23 , 23 , 23 , 24 , 9 , 24 ,
 11 , 24 , 21 , 24 , 21 , 25 , 11 , 25 ,
 14 , 25 , 18 , 25 , 18 , 26 , 14 , 26 ,
 14 , 26 , 18 , 26 , 18 , 27 , 14 , 27 ,
 14 , 27 , 18 , 27 , 18 , 28 , 14 , 28 ,
 14 , 28 , 18 , 28 , 18 , 29 , 14 , 29 ,
 15 , 29 , 17 , 29 , 17 , 30 , 15 , 30 ,
 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 );

# Declare Function CreatePolyPolygonRgn Lib "gdi32" Alias 
# "CreatePolyPolygonRgn" (lpPoint As POINTAPI, lpPolyCounts As Long,
# ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long

$CreatePolyPolygonRgn = new
Win32::API("gdi32","CreatePolyPolygonRgn",[P,N,N,N],N);
$CreateEllipticRgn = new
Win32::API("gdi32","CreateEllipticRgn",[I,I,I,I],N);
$SetWindowRgn = new Win32::API("user32","SetWindowRgn",[N,N,I],N);
$APISetWindowPos = new
Win32::API("user32","SetWindowPos",[N,N,N,N,N,N,N],N);


#$Ret = $CreateEllipticRgn->Call(40,40,100,100);
$Ret = $CreatePolyPolygonRgn->Call($P,4,32,2);

$mw = new MainWindow;
$mw->title("neko");
$cv = $mw->Canvas;
$cv->pack;
$img = $cv->Photo('IMG', -file => "1.gif");

$cv->create('image',50,50,'-image'=> $img);
$mw->after(200,\&start);
MainLoop;

sub start
{
   $desktop = GUI::GetDesktopWindow();
   $window = GUI::GetWindow($desktop,GW_CHILD);
   while($window){
      $title = GUI::Text($window);
      last if ($title eq "neko");
      $window = GUI::GetWindow($window,GW_HWNDNEXT);
   }
   $SetWindowRgn->Call($window,$Ret,1);
}



Tokyo-pm メーリングリストの案内