Как мне полностью изменить внешний вид строки заголовка Win32 от Perl? - PullRequest
4 голосов
/ 25 января 2010

Я учусь добавлять GUI в мою программу на Perl, используя Win32 :: GUI . Теперь я могу изменить значок строки заголовка 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, который может облегчить задачу?

Спасибо за любые советы:)

**** ***** Update1 1014 *

Могу ли я сначала сделать так, чтобы строка заголовка исчезла, а затем добавить метку там, где была оригинальная строка заголовка, а затем добавить некоторые другие кнопки, чтобы свернуть и закрыть объект?

Теперь проблема в том, как я могу переместить объект Window, когда моя мышь находится на метке?

**** ***** UPDATE2 1020 *

Я нашел несколько фрагментов кода 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 

1 Ответ

7 голосов
/ 25 января 2010

Оформление окон рисуется операционной системой в соответствии с предпочтениями пользователя. Они (в идеале) стандартизированы для всех приложений и позволяют быстро и легко осваивать новые приложения.

Кроме того, некоторые пользователи настраивают внешний вид оконных декораций, чтобы компенсировать проблемы, в том числе плохое зрение или старые устройства.

Существует отличная и удивительно критическая запись QuickTime 4.0 в Зале позора пользовательского интерфейса , в которой подробно объясняется, почему переопределение внешнего вида операционной системы по умолчанию плохо и какие проблемы это может вызвать.

Решение отказаться от существующих элементы управления интерфейсом, предоставляемые операционная система создает множество проблемы. Решение не предоставлять строка заголовка, например, привела к потеря стандартного окна управленческий контроль. Пользователи Windows найдет, что игрок предлагает нет визуальная индикация того, как двигаться, минимизировать или максимизировать игрока окно ...

...