4

Win32::GUIを使用してPerlプログラムに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 ****

最初にタイトルバーを非表示にしてから、元のタイトルバーがあった場所にラベルを追加してから、他のボタンを追加してオブジェクトを最小化して閉じることはできますか?

ここで問題となるのは、マウスがラベル上にあるときにWindowオブジェクトを移動するにはどうすればよいですか?

**** UPDATE2 ****

Perlで達成したい仕事をすることになっているVBコードスニペットをいくつか見つけました。誰かが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 に答える