4

我正在学习使用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,
  );

但是其他的东西,比如背景颜色,最小化按钮的外观和感觉呢?

我用谷歌搜索了这个主题,发现了几篇可能相关的文章。他们谈论诸如非客户区绘画等之类的东西,但代码片段似乎都是用 C 编写的,我不太熟悉。

我想知道这里是否有人可以分享一些用 Perl 编写的处理类似情况的代码片段?或者,是否有一个 Perl 模块可以促进这项任务?

感谢您的任何指导:)

****更新1****

我可以先让标题栏消失,然后在原始标题栏所在的位置添加一个标签,然后添加一些其他按钮来最小化和关闭对象吗?

现在的问题是:当鼠标在标签上时,如何移动 Window 对象?

****更新2****

我找到了一些 VB 代码片段,它们应该可以完成我想在 Perl 中完成的工作。有人可以帮我在 Win32::GUI 中重写它们吗?以下 VB 代码来自这里

    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 
4

1 回答 1

7

窗口装饰由操作系统根据用户的喜好绘制。它们(理想情况下)在所有应用程序中都是标准化的,并且可以快速轻松地学习新应用程序。

此外,一些用户通过调整窗户装饰的外观来弥补视力不佳或设备陈旧等问题。

在 UI Hall of Shame 上有一篇关于 QuickTime 4.0的优秀且非常关键的文章,其中详细介绍了为什么覆盖默认操作系统的外观和感觉不好,以及它可能导致什么样的问题。

避开操作系统提供的现有界面控制的决定会产生各种问题。例如,不提供标题栏的决定导致标准窗口管理控件的丢失。Windows 用户会发现播放器没有提供关于如何移动、最小化或最大化播放器窗口的视觉指示...

于 2010-01-25T06:04:54.380 回答