2010-01-25 7 views
4

J'apprends à ajouter une interface graphique à mon programme Perl en utilisant Win32::GUI. Maintenant, je peux changer l'icône d'une barre de titre Win32 en utilisant quelque chose comme:Comment modifier complètement l'apparence d'une barre de titre Win32 à partir de Perl?

$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, 
); 

Mais qu'en les autres choses, par exemple, la couleur de fond, l'apparence du bouton de réduction?

J'ai recherché sur le sujet et trouvé plusieurs articles pertinents. Ils parlent de choses comme la zone non-client paiting etc etc. mais les extraits de code semblent être tous écrits en C, avec lesquels je n'ai pas une bonne familiarité.

Je me demandais si quelqu'un ici pourrait bien partager quelques extraits de code écrits en Perl qui traitent de la même situation? Ou, y a-t-il, espérons-le, un module Perl qui peut faciliter la tâche?

Merci pour toute orientation :)

**** **** Update1

Puis-je d'abord faire la barre de titre disparaît et ajouter une étiquette où la barre de titre original était puis ajouter un peu D'autres boutons pour minimiser et fermer l'objet?

Maintenant, le problème est: comment puis-je déplacer l'objet Window lorsque ma souris est sur l'étiquette?

**** **** MAJ2

J'ai trouvé quelques extraits de code VB qui sont censés faire le travail que je veux accomplir en Perl. Quelqu'un peut-il m'aider à les réécrire dans Win32 :: GUI? Le code VB suivant est de 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 
+0

Vous devriez viser pour un look-and-feel compatible avec Windows en tous cas. –

+0

alors un gars demande comment une barre de titre peut être modifiée et votre réponse est qu'elle ne devrait pas être modifiée pour commencer? donnez-lui une pause ... lol –

Répondre

6

décorations de fenêtre sont tirés par le système d'exploitation conformément aux préférences de l'utilisateur. Ils sont (idéalement) standardisés pour toutes les applications et facilitent l'apprentissage de nouvelles applications.

De plus, certains utilisateurs ajustent l'apparence des décorations de fenêtres pour compenser les problèmes, y compris une mauvaise vue ou des appareils obsolètes. Il y a un excellent et remarquablement critique writeup of QuickTime 4.0 on the UI Hall of Shame qui va dans les détails, expliquant pourquoi le remplacement de l'apparence du système d'exploitation par défaut est mauvais, et quel genre de problèmes il peut causer.

La décision d'éviter les contrôles d'interface existants fournis par le système d'exploitation crée une variété de problèmes . La décision de ne pas fournir une barre de titre, par exemple, a entraîné la perte des contrôles de gestion de la fenêtre standard . Les utilisateurs de Windows trouveront le joueur offre aucune indication visuelle quant à la façon de se déplacer, minimiser ou maximiser le joueur fenêtre ...

+0

@Duncan, merci d'avoir laissé le commentaire :) Eh bien, je sais qu'il n'est pas nécessaire de personnaliser la barre de titre.Mais il ya de bons tutoriels sur la façon de le faire en C ou C, etc. J'espérais qu'il y avait aussi des tutoriels Perl :) – Mike

+2

@Mike - ce n'est pas seulement que c'est * pas nécessaire * - c'est une * mauvaise idée *. Regardez-le du point de vue du client. Pourquoi votre choix de style pour les décorations de fenêtres est-il plus important que leur choix d'OS, de gestionnaire de fenêtres et de thème? Quand je tombe sur une application qui se comporte de façon «personnalisée», je ressens une réaction émotionnelle ... comme si le développeur était impoli envers moi. –

+0

votre explication me semble très logique. Merci! Je commence à être convaincu que je ferais mieux de laisser les décorations de fenêtres comme elles sont. Mais je pense que je devrais encore apprendre quelques trucs de l'API Win32. Peut-être que je n'ai pas à faire quelque chose mais c'est bon de savoir comment le faire, même pour le pur plaisir :) – Mike