如何从 Perl 完全改变 Win32 标题栏的外观?
Posted
技术标签:
【中文标题】如何从 Perl 完全改变 Win32 标题栏的外观?【英文标题】:How do I completely change the appearance of a Win32 title bar from Perl? 【发布时间】:2010-01-25 02:10:53 【问题描述】:我正在学习使用 Win32::GUI 将 GUI 添加到我的 Perl 程序中。现在我可以使用类似的方式更改 Win32 标题栏的图标:
$myicon = new Win32::GUI::Icon('myicon.ico');
$myclass=new Win32::GUI::Class(
-name=>'myclass',
-icon=>$myicon,
);
$mydialogbox = new Win32::GUI::DialogBox(
-name => 'mydialogbox',
-class => $myclass,
);
但是其他的东西,比如背景颜色,最小化按钮的外观和感觉呢?
我搜索了该主题并找到了几篇可能相关的文章。他们谈论诸如非客户区绘画之类的东西,但代码 sn-ps 似乎都是用 C 编写的,我不太熟悉。
我想知道这里是否有人可以分享一些用 Perl 编写的处理类似情况的代码 sn-ps?或者,是否有希望有一个 Perl 模块可以促进这项任务?
感谢您的指导:)
****更新1****
我可以先让标题栏消失,然后在原来的标题栏所在的位置添加一个标签,然后添加一些其他按钮来最小化和关闭对象吗?
现在的问题是:当鼠标在标签上时,如何移动 Window 对象?
****更新2****
我发现了一些 VB 代码 sn-ps 应该可以完成我想在 Perl 中完成的工作。有人可以帮我在 Win32::GUI 中重写它们吗? 以下VB代码来自here:
Option Explicit
' API functions
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long
' Constants for above API calls
Private Const HTCAPTION = 2
Private Const WM_NCLBUTTONDOWN = &HA1
Private Sub Form_Load()
Dim retVal As Long
retVal = SetWindowText(Me.hwnd, Label1)
End Sub
Private Sub Label1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
ReleaseCapture
SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
End Sub
【问题讨论】:
无论如何,您的目标应该是与 Windows 一致的外观。 所以有人问如何修改标题栏,您的回答是不应该从一开始就修改它?让他休息一下......大声笑 【参考方案1】:操作系统根据用户的喜好绘制窗口装饰。它们(理想情况下)在所有应用程序中都是标准化的,并且可以快速轻松地学习新应用程序。
此外,部分用户会调整窗饰的外观,以弥补视力不佳或设备陈旧等问题。
有一个优秀且非常关键的writeup of QuickTime 4.0 on the UI Hall of Shame 详细说明了为什么覆盖默认操作系统的外观和感觉不好,以及它可能导致什么样的问题。
决定避开现有的 提供的界面控件 操作系统创建了多种 问题。不提供的决定 例如,标题栏导致 标准窗口的丢失 管理控制。 Windows 用户 会发现玩家不提供 关于如何移动的视觉指示, 最小化或最大化玩家 窗口...
【讨论】:
@Duncan,感谢您留下评论 :) 好吧,我知道没有必要自定义标题栏。但是有很好的教程关于如何在 C 或 C# 等中做到这一点。我希望也有一些 Perl 教程:) @Mike - 这不仅仅是没有必要 - 这是一个坏主意。从客户的角度来看。为什么你选择的窗口装饰风格比他们选择的操作系统、窗口管理器和主题更重要?当我遇到一个以“自定义”方式运行的应用程序时,我实际上会产生情绪反应……好像开发人员对我很粗鲁。 你的解释对我来说很有意义。谢谢!我开始相信我最好让窗户装饰保持原样。但我认为我仍然应该学习一些 Win32 API 的东西。也许我不必做某事,但知道该怎么做是件好事,即使是为了纯粹的乐趣:) @Mike - 绝对。我的商业伙伴有点像 Win32 大师,并且仍然对它发誓。不过我的理解是,您将在 Perl 中上坡学习。您可以免费获得 Visual Studio C++ Express 2008 (microsoft.com/express/Downloads/#2008-Visual-CPP),并且您可以使用它构建普通的 Win32 应用程序(即非托管)。以上是关于如何从 Perl 完全改变 Win32 标题栏的外观?的主要内容,如果未能解决你的问题,请参考以下文章
perl win32 api 如何遍历已打开窗口,获得每个窗口的标题内容
如何使用 Perl 中的 Win32::LongPath 模块来操作长路径名?