[Tokyo.pm] $B:B$kEI$jJI(J
matsumotoya @ om.jalinfotec.co.jp
matsumotoya @ om.jalinfotec.co.jp
1999年 8月 22日 (日) 20:39:57 CDT
> 吾一(原田)です。
> 今の所の僕の状況はこんな感じです。
> ==========================
> use Tk;
> $mw = new MainWindow;
> $mw->overrideredirect(1);
> $mw->bind("<Enter>", \&neru);
> $mw->bind("<Leave>",\&okiru);
> $mw->bind("<ButtonPress>", sub {exit;});
> $after_id = $mw->after(200, \&okiru);
> MainLoop;
> sub okiru{
> $mw->geometry("+" . $mw->pointerx . "+" . $mw->pointery);
> $mw->focusForce;
> $after_id = $mw->after(200, \&okiru);
> }
> sub neru{
> if ($after_id){
> $mw->afterCancel($after_id);
> undef $after_id;
> }
> }
> ==========================
> rootwindow上のイベントを取得する方法がわからずに苦し紛れです
> 。
$mw->overrideredirect(1);
に気づきませんでした。
あと吹き出しの窓をつくらないと、ということで以下ソース。
----- ここから ------------------
use Tk;
use Win32::GUI;
use Win32::API;
#
# ($DOShwnd, $DOShinstance) = GUI::GetPerlWindow();
# GUI::Hide($DOShwnd);
# $SetWindowRgn = new Win32::API("user32","SetWindowRgn",[N,N,I],N);
$SetWindowPos = new
Win32::API("user32","SetWindowPos",[N,N,N,N,N,N,N],N);
$SendMessage = new Win32::API("user32","SendMessageA" ,[N,N,N,N],N);
#
# Main
#
$mw = new MainWindow;
$mw->title("neko");
$mw->overrideredirect(1);
$mw->after(200,\&start);
MainLoop;
sub start
{
$desktop = GUI::GetDesktopWindow();
$TrayWnd = GUI::FindWindow("Shell_TrayWnd","");
$top2 = 0;
$topw2 = 0;
#
$window = GUI::GetWindow($desktop,GW_CHILD);
while($window){
$title = GUI::Text($window);
last if ($title eq "neko");
$window = GUI::GetWindow($window,GW_HWNDNEXT);
}
#$tmp = GUI::SetWindowLong($window,-16,hex("160B0008"));
$tmp = GUI::Resize($window,64,128);
$tmp = $SetWindowPos->Call($window,-1,0,0,0,0,3);
$mw->Tk::bind("<Button-1>", [\&button_down, Ev('x'), Ev('y')]);
$mw->after(200,\&swaru);
}
sub swaru
{
($left,$top,$right,$bottom) = GUI::GetWindowRect($TrayWnd);
$topw = GUI::GetTopWindow($desktop);
if ($top2 != $top || $topw2 != $topw){
update();
}
$top2 = $top;
$topw2 = $topw;
$mw->after(500,\&swaru);
}
sub button_down
{
$tmp = GUI::ReleaseCapture($window);
$tmp = GUI::SendMessage($window,161,2,0);
update();
}
sub update
{
$tmp = GUI::Top($window,$top-128+30);
$tmp = GUI::Resize($window,64,128);
$tmp = $SetWindowPos->Call($window,-1,0,0,0,0,3);
}
Tokyo-pm メーリングリストの案内