免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4282 | 回复: 11
打印 上一主题 下一主题

窗口跟随-Win32::GUI [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-14 19:04 |只看该作者 |倒序浏览
本帖最后由 mysqllog 于 2012-04-14 19:07 编辑

目前用Win32::GUI写工具,界面和下面这图相似:


当然没有这么华丽

功能描述:
当移动左边的窗口时,右边也要相对移动,但目前我移动左边窗口时,右边的不会移动,想知道要怎么实现这样的功能。
我的主窗体代码:
$main = Win32::GUI::Window->new(
  -name => 'Update',
  -text => '帖子查看器',
  -width => 240,
  -height => 400,
  -class=>$wm_class,
  -maximizebox=>0,
);

右边窗体的创建代码:
$Rightwin = new Win32::GUI::Window(
    -name  => Rightwin,
    -title => "列表",
    -pos   => [ $x + 240, $y+20 ],
    -size  => [ 640, 360 ],
        -class => $right_class,
        -maximizebox => 0,
        -parent => $main,
);

只要能得到左边窗体的右上角和右下角的坐标应该就能实现了,再通过$main->Rightwin->Moveto之类的函数。怎么得到这两个移动后的坐标呢?

论坛徽章:
0
2 [报告]
发表于 2012-04-16 10:06 |只看该作者
flw不来指点下么,对win32的API完全不了解哦。

论坛徽章:
0
3 [报告]
发表于 2012-04-16 12:46 |只看该作者
本帖最后由 QQ1921961 于 2012-04-16 13:02 编辑

  1. #!/usr/bin/perl

  2. use strict;
  3. use Win32::GUI qw(WM_MOVING);

  4. my $main_win = Win32::GUI::Window->new(
  5.     -name  => "W1",
  6.     -title => "W1",
  7.     -pos   => [ 100, 100 ],
  8.     -size  => [ 300, 200 ],
  9. );

  10. $main_win->Hook(WM_MOVING, \&W1_Moving);
  11. $main_win->Center();
  12. $main_win->Show();

  13. my $sub_win = Win32::GUI::Window->new(
  14.     -name  => "W2",
  15.     -title => "W2",
  16.     -size  => [ 400, 400 ],
  17. );

  18. $sub_win->Move($main_win->Left() + $main_win->Width(), $main_win->Top());
  19. $sub_win->Show();

  20. Win32::GUI::Dialog();

  21. exit;

  22. sub W1_Moving {
  23.     my ($win, $id, $lParam, $type, $msgcode) = @_;
  24.    
  25.     my $x = $main_win->Left() + $main_win->Width();
  26.     my $y = $main_win->Top();
  27.    
  28.     $sub_win->Move($x, $y);
  29.    
  30.     return;
  31. }

  32. sub W1_Terminate {
  33.     return -1;
  34. }

  35. sub W2_Terminate {
  36.     return -1;
  37. }

复制代码

论坛徽章:
0
4 [报告]
发表于 2012-04-17 09:31 |只看该作者
回复 3# QQ1921961

这个效果很Cool!

论坛徽章:
0
5 [报告]
发表于 2012-04-17 09:44 |只看该作者
回复 3# QQ1921961


    早上一来,这个问题就解决了,开心

随便说一句,既然是Win平台,何来#!/usr/bin/perl?

论坛徽章:
0
6 [报告]
发表于 2012-04-17 09:50 |只看该作者
本帖最后由 mysqllog 于 2012-04-17 09:57 编辑

回复 3# QQ1921961


    似乎不太理想啊,移动左边的,右边的要等你再移动下左边的时候,它才会移动到你第一次移动左边的窗口时的坐标。

这些API,从哪看来的啊?

论坛徽章:
0
7 [报告]
发表于 2012-04-17 12:35 |只看该作者
mysqllog 发表于 2012-04-17 09:44
回复 3# QQ1921961




Windows 上首行加shebang标识确实无太大意义,
我也只是习惯性为了与linux保持一致而已。

而且我的Perl所在路径也通常为 x:\usr\bin\perl.exe

纯属个人习惯 ;-p

论坛徽章:
0
8 [报告]
发表于 2012-04-17 12:42 |只看该作者
mysqllog 发表于 2012-04-17 09:50
回复 3# QQ1921961




我这没这种问题啊。

你是指移动右边窗口, 左窗口也同样跟随吧?
如何是这样,只需右窗也依样添加一个Hook。


详细可查阅 Win32-GUI的文档: http://perl-win32-gui.sourceforge.net/cgi-bin/docs.cgi
当然Win32-GUI只是Windows API的封装,细节处查阅MSDN也是必要的。


论坛徽章:
0
9 [报告]
发表于 2012-04-17 12:43 |只看该作者
回复 4# iamlimeng


确实很Cool,呵呵。。

论坛徽章:
0
10 [报告]
发表于 2012-04-17 14:27 |只看该作者
回复 8# QQ1921961


    我只移动左边的窗口

在我的win2003上,在移动左边时,右边的不会及时的跟随,只有在第二次移动时才会移动到第一次移动的坐标点上。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP