如何从Perl中彻底更改Win32标题栏的外观?

Mik*_*ke 4 perl titlebar win32gui

我正在学习使用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,
  );
Run Code Online (Sandbox Code Playgroud)

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

我搜索了这个主题并找到了几篇可能相关的文章.他们谈论非客户区域等等的东西,但代码片段似乎都是用C语言编写的,我对此并不熟悉.

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

谢谢你的任何指导:)

********UPDATE1

我可以先使标题栏消失,然后在原始标题栏中添加标签,然后添加一些其他按钮以最小化和关闭对象吗?

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

********UPDATE2

我发现了一些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 
Run Code Online (Sandbox Code Playgroud)

Dun*_*yne 7

窗口装饰由操作系统根据用户的偏好绘制.它们(理想情况下)适用于所有应用程序,并使学习新应用程序变得快速而简单.

此外,一些用户调整窗户装饰的外观以补偿视力不佳或旧设备等问题.

在UI的Shame上有一个非常重要的关于QuickTime 4.0的重要文章,详细介绍了一些细节,解释了为什么覆盖默认操作系统的外观和感觉很糟糕,以及它可能导致什么样的问题.

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

  • @Mike - 这不仅仅是*没有必要* - 这是一个*坏主意*.从客户的角度来看.为什么您选择的窗户装饰风格比他们选择的操作系统,窗口管理器和主题更重要?当我遇到一个以"定制"方式行事的应用程序时,我实际上感受到一种情绪反应......好像开发人员对我很粗鲁. (2认同)