搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
Gausst松鼠会
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
HarmonyOS应用开发者基础认证考试答案
2
Gitlab 搭建_gitlab指定安装目录
3
一文教你解决git请求github时候超时的问题_github请求超时
4
MySQL回滚日志(undo log)的作用和使用详解_undo_log
5
Unity-AudioSource组件利用UGUI搭建简易音乐播放器_unity 音乐进度条
6
canvas+audio+range 模拟音乐播放器_zmw77.aqq
7
DevChat智能编程助手:小白也能轻松上手的开发利器_chatdev 官网
8
python-opencv 人脸检测_python opencv人脸检测
9
鸿蒙加载第三方动态链接库(.so)文件_鸿蒙hap 导入文件
10
Unity大魔王常用的网络联机类Unity插件_unity smooth sync
当前位置:
article
> 正文
[Perl]Win32::GUI官方教程翻译 Part1-窗口配置_win32gui中文手册
作者:Gausst松鼠会 | 2024-02-18 16:55:40
赞
踩
win32gui中文手册
[Perl]Win32::GUI官方教程翻译 Part1-窗口配置
编辑 IF_EXIST / PakTC
mail: 523066680@163.com
所编辑的内容均从该文档中翻译提取,并加上自己的描述:
http://search.cpan.org/~robertmay/Win32-GUI-1.06/docs/GUI/Tutorial/Part1.pod
如果已经安装Win32::GUI模块,
也可以在 C:\Perl\site\lib\Win32\GUI\Tutorial下找到该文档。Notes:
\---[Perl]Win32::GUI官方教程翻译Part1-配置窗口
| 主要内容
| 1.使窗口大小适合于label文本
| 2.使窗口、label的居中
| 3.设置窗口最小限制
|
| (说实话,我觉得这里的设置窗体大小的过程挺绕路的……针对第一部分。
| 后面东西还多着呢,忍忍就过去了)
|
|
+---1.使窗口大小适合于label文本
| $main 继承窗口对象,与窗口大小相关的函数:
| 属性查询函数:
| Width(); 窗口宽度 Height(); 窗口高度
| ScaleWidth(); ScaleHeight(); 窗口除了外框,剩下部分的宽度和高度
| 操作函数:
| Resize($宽,$高); 重设当前窗口的宽和高。
|
| AddLabel(); 同样可以将label对象继承到到变量中:
| $label=$main->AddLabel(-text=>"text of label");
| 通过该对象的 Width(); 和Height(); 函数查询当前label的宽高
|
| 为了让窗口大小刚好适于label文本,首先获取外框尺寸,
| 然后加上label尺寸,重设窗体大小即可。
|
| #外框占用空间
| $ncw = $main->Width() - $main->ScaleWidth();
| $nch = $main->Height() - $main->ScaleHeight();
|
| #label占用空间+外框空间
| $w = $label->Width() + $ncw;
| $h = $label->Height() + $nch;
|
| #重设窗口
| $main->Resize($w,$h);
|
| 这段操作应置于创建窗口以及设置label之后,显示窗口之前。
| $main=Win32::GUI::Window->new(...);
| $label=$main->AddLabel(...);
| 中间
| $main->Show();
|
| 原文代码示例:
| use Win32::GUI();
|
| $text = defined($ARGV[0]) ? $ARGV[0] : "Hello, world";
|
| $main = Win32::GUI::Window->new(-name => 'Main', -text => 'Perl');
| $label = $main->AddLabel(-text => $text);
|
| $ncw = $main->Width() - $main->ScaleWidth();
| $nch = $main->Height() - $main->ScaleHeight();
| $w = $label->Width() + $ncw;
| $h = $label->Height() + $nch;
|
| $main->Resize($w, $h);
| $main->Show();
| Win32::GUI::Dialog();
|
| sub Main_Terminate {
| -1;
| }
|
| 不过当label占用非常小的时候,由于窗口还需要显示一定的图标,
| 无法达到一样小。
|
| 分析:这里由于窗口需要重设大小,所以没有必要在 Window->new( 中设置
| 尺寸。
|
|
+---2.使窗口、label的居中
| 居中窗口
| (原文中说GetDesktopWindow返回一个handle,不过我觉得翻译为对象也OK)
|
| 首先可以通过 Win32::GUI::GetDesktopWindow(); 获取桌面窗口对象,
| 有一点要说的是,这不同于 Win32::GUI::Window ,
| 不能通过->Width(); ->Height();这样的方式获取桌面分辨率。
| 而通过类如 Win32::GUI::Width(对象) 的形式 获取桌面的宽。
|
| 窗口对象的 Move();函数可以修改当前窗口位置,以下是一段实例:
|
| # Assume we have the main window size in ($w, $h) as before
| $desk = Win32::GUI::GetDesktopWindow();
| $dw = Win32::GUI::Width($desk);
| $dh = Win32::GUI::Height($desk);
| $x = ($dw - $w) / 2;
| $y = ($dh - $h) / 2;
| $main->Move($x, $y);
|
| label的居中
| OK,现在还要使label文本始终居中在窗口中间,考虑到用户可能手动改变窗体
| 大小,所以这里设置一个事件处理函数,原文实例+注释:
|
| sub Main_Resize { # Main窗口的 Resize事件
| my $mw = $main->ScaleWidth(); # 有效区域宽 Scale可以译为画布
| my $mh = $main->ScaleHeight(); # 有效区域高
| my $lw = $label->Width(); #
| my $lh = $label->Height();
| if ($lw > $mw) { #如果 label所需空间 > 可用空间
| $main->Width($lw + $ncw); # 使$main窗口的宽=label宽+外框宽 [大小刚刚好]
| } # 注: $ncw 是外部定义的边框占用宽度
| else { #其他情况:
| $label->Left(($mw - $lw) / 2); # 通过设定label左上角位置使其居中
| }
| if ($lh > $mh) { #跟Width一样,做类似的处理
| $main->Height($lh + $nch); # Remember the non-client height!
| } # ok , 原来nch是 non-client height 的缩写
| else { # 这里指的是非有效区域,标题栏或者外框占用高度
| $label->Top(($mh - $lh) / 2); #
| } #
| } #
|
| 接着的效果是如果你拉宽或者拉高窗口,label文本始终居中,
| 如果拉小了,比文本还小,则会反弹为刚好足够存放文本的大小。
|
| 另外这段代码告诉我们,$main->Width();这样的操作函数,
| 在参数为空的时候可以用于查询当前宽度,如果有参数,
| 则设置当前宽度。 Label对象也是如此 ,另外还出现了
| label->Left(值); #设置左端位置 这个位置是相对于$main窗口之内的。
| label->Top(值); #设置上端位置
|
| 同样也有 $main->Left(); $main->Top();
| 稍微总结一下,Win32::GUI::Window->new(); 其中可以包含参数:
| -name 标识名称
| -text 文本标题
| -left 左端位置
| -top 上端位置
| -width 宽度
| -height 高度
|
| 像这些普通的选项都有对应的操作函数:
| $main->Text();
| $main->Left(); ....等等,可用于查询,也可用于设置
| ->Name就不要了…… 危险
|
|
| YY多了,要是错了就成罪人了,回到正题。
|
|
\---3.设置窗口最小限制
假设我们要保证窗口不小于100x100 分辨率单位,我们可以将重置代码写入
Resize事件处理函数,但是这样比较费事,一个更好的办法是通过 -minsize 选项
$main = Win32::GUI::Window->new(
-name => 'Main',
-text => 'Perl',
-minsize => [100, 100],
);
为了使minsize的大小适合于文本,这一项应该在AddLabel之后设置,
我们可以通过窗口对象的 Change 函数修改 -minsize 的属性,
$main->Change(-minsize => [$w, $h]);
完整代码:
use Win32::GUI();
$text = defined($ARGV[0]) ? $ARGV[0] : "Hello, world";
$main = Win32::GUI::Window->new(
-name => 'Main',
-text => 'Perl',
);
$font = Win32::GUI::Font->new(
-name => "Comic Sans MS",
-size => 24,
);
$label = $main->AddLabel(
-text => $text,
-font => $font,
-foreground => [255, 0, 0],
);
$ncw = $main->Width() - $main->ScaleWidth();
$nch = $main->Height() - $main->ScaleHeight();
$w = $label->Width() + $ncw;
$h = $label->Height() + $nch;
$desk = Win32::GUI::GetDesktopWindow();
$dw = Win32::GUI::Width($desk);
$dh = Win32::GUI::Height($desk);
$x = ($dw - $w) / 2;
$y = ($dh - $h) / 2;
$main->Change(-minsize => [$w, $h]);
$main->Resize($w, $h);
$main->Move($x, $y);
$main->Show();
Win32::GUI::Dialog();
sub Main_Terminate {
-1;
}
sub Main_Resize {
my $mw = $main->ScaleWidth();
my $mh = $main->ScaleHeight();
my $lw = $label->Width();
my $lh = $label->Height();
$label->Left(int(($mw - $lw) / 2));
$label->Top(int(($mh - $lh) / 2));
}
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/109236
推荐阅读
article
python
win32gui
.
FindWindow
()
找
不到
窗口
(亲测有效)...
前言今天又是不聪明的小侦探热爱敲代码的一天。前言今天来为大家解决
win32gui
.
FindWindow
()
找
不到
窗口
的问...
赞
踩
article
如何利用Python和
win32
编程避免重复性体力劳动(二)——
菜单
操作
:
GetMenu
,GetSu...
Part 2:
菜单
操作
有了句柄,我们就可以
操作
FaceGen了!嗯,要先打开文件,File→Open,然后再File→S...
赞
踩
article
python
win32gui
模块
详解
_
Python
笔记
_
第二篇
_
基本功
_
4.常用
模块
的简单使用
_
窗...
1. 工具:Spy++和
win32con
控件、
win32gui
控件现在这个工具:以QQ为例我们可以拖住的方式获取窗口的信...
赞
踩
article
python
库
win32gui
,
windows
的
API管理及
自动化
_
python
win32gui
...
对于
windows
的
打开
的
窗口中
,
可以通过窗口
的
类型和名字来进行窗口
的
具体查找
,
使用
的
win32gui
.FindWind...
赞
踩
article
win32gui
-
窗口
操作
_
win32gui
中文
手册...
win32gui
-
窗口
操作
_
win32gui
中文
手册
win32gui
中文
手册 如果安装不成功,...
赞
踩
article
Python
使用
win32gui
+
win32api
通过
鼠标获取句柄...
Python
使用
win32gui
+
win32api
通过
鼠标获取句柄。_
win32gui
win32gui
...
赞
踩
article
Python
安装
win32gui
报错:No
module
named
‘
win32gui
‘的解决方法...
网站下载与自己
安装
的 “
Python
" 版本相适应的 "pywin32"
安装
程序。在当前 “python”
安装
目录的...
赞
踩
article
自动化
工具之二:
win32gui
...
自动化
工具
win32gui
一、下载安装
win32gui
二、Win32gui的使用1.查找窗体句柄我们知道的所有空间其实就...
赞
踩
article
pywin32
、
win32api
、
win32gui
、
win32com
、
win32con
都是啥?...
pywin32
、
win32api
、
win32gui
、
win32com
、
win32con
名称非常类似,特别容易混淆,今天...
赞
踩
article
Python
+
win32gui
句柄
获取
——
获取
windows
应用程序窗口无法复制的信息_
python
...
Python
+
win32gui
句柄
获取
——
获取
windows
应用程序窗口无法复制的信息
python
获取
窗口无法复制的信息...
赞
踩
article
python
win32
gui
使用
_
python
win32
简单操作...
#coding: utf-8import
win32
gui
,
win32
api,
win32
conimporttimeim...
赞
踩
article
python
使用
win32
类
_
python
win32
简单操作...
#coding: utf-8import
win32
gui,
win32
api,
win32
conimporttimeim...
赞
踩
article
python
安装
win32gui
的相关问题_
install
win32gui
...
问题一:直接pip/pip3
install
win32gui
报错,报错代码为"ModuleNotFoundError:...
赞
踩
article
python
win32api
win32gui
win32con
窗口
句柄
发送
消息 常用方法 键...
推荐微软的Spy++来查看
窗口
类名等信息。import
win32gui
import
win32con
import wi...
赞
踩
article
python
安装
win32
api
_
python
win32
调用
win32
下的
API
...
python
调用vc中的
API
准备工作: 安装py
win32
-210.5.
win32
-py2.5.exe例1:最简单的M...
赞
踩
article
权限设置相关,利用
Microsoft
.
Win32
.
Security
...
DACL DACL(Discretionary Access Control List)This is a list t...
赞
踩
article
Win32
Security
入门 序言_
win32security
...
最近看了一下Marshall Brain和Ron Reeves合著的《
Win32
System Services: Th...
赞
踩
article
《
Windows
-
Program
:
Win32
/
Contebrew
.A!
ml
病毒
》...
Program
:
Win32
/
Contebrew
.A!
ml
这个
病毒
怎么解决?《
Windows
-
Program
:
Win32
...
赞
踩
article
QuSim_
10.7
c
_
win32
安装
_questasim
10.7
c
win32
...
安装
原因:32位可以配合debuusy查看波形。64位的不行,只能再moelsim里面看波形
安装
说明:1.
安装
包上图红框...
赞
踩
article
Weblogic
10.3
安装与配置(
win32
and
linux
)_
win32
estimat...
Weblogic
10.3
安装与配置WebLogic
10.3
安装、配置与管理手册第一章 WebLogic
10.3
...
赞
踩
相关标签
python
windows
开发语言
pywin32
win32
FaceGen
python win32gui模块详解
自动化
p2p
网络协议
网络
mysql
数据库
ui
后端
pywin32 api
python win32gui使用