0

パネル コントロールとその中のコントロール/オブジェクトをフェードする効果が必要でした。背景色の不透明度のみを変更する opacity プロパティを持つコンテナをいくつか見つけました。

だから私は私自身の解決策を思いつきました。必要なコントロールを含む別のフォームを作成し、必要なものを取得しましたが、作成した新しいフォームの配置に問題がありました。親フォームの作業領域を取得して初期位置を設定する方法がわかりません。作業領域について私が言いたいのは、コントロール ボックス/タイトル バーは含まれないということです。OS によってタイトル バーのサイズが異なるため (私の知る限り)、正しく調整する必要があります。

Form2、不透明なコントロールを保持するもの

Public Class Form2

    Private Const dif As Integer = 23

    Private Const GWL_EXSTYLE As Integer = (-20)
    Private Const WS_EX_TRANSPARENT As Integer = &H20

    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer
    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As IntPtr, ByVal nIndex As Integer) As Integer

    Public Sub resizeFrom(ByVal parent As Form)
        Me.Height = parent.Height - dif
        Me.Width = parent.Width
        Me.Top = (parent.Top + ((parent.Height - Me.Height) / 2) + (dif / 2))
        Me.Left = parent.Left + ((parent.Width - Me.Width) / 2)
    End Sub

    Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.TopMost = True
    Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
    Me.BackColor = Color.Red

    SetWindowLong(Me.Handle, GWL_EXSTYLE, GetWindowLong(Me.Handle, GWL_EXSTYLE) Or WS_EX_TRANSPARENT)
    End Sub
End Class

親/メイン フォーム

    Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Show()
        Form2.Show()
        Form2.resizeFrom(Me)
    End Sub

    Private Sub Form1_Move(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Move
        Form2.resizeFrom(Me)
    End Sub

    Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        Form1_Move(Me, New EventArgs)
    End Sub

    Private Sub HScrollBar1_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles HScrollBar1.Scroll
        Form2.Opacity = HScrollBar1.Value / 100
        Me.Text = "Opacity: " & HScrollBar1.Value & "%"
    End Sub
End Class

次のようになります http://i48.tinypic.com/25qubk0.jpg

不透明なフォームは表示用で、「Ghost Like Form」または「Click-through Form」に設定されていました

Form の適切な WorkingArea を取得できる解決策はありますか?

助けてください。ありがとう

4

1 に答える 1

0

必要なのは、の絶対位置ですClientRectangle。これの場所は次の(0, 0)とおりですが、魔法のように画面の値に変換できます。

Form2.Location = PointToScreen(Me.ClientRectangle.Location)
Form2.Size = Me.ClientRectangle.Size
于 2013-02-02T15:49:48.210 に答える