2024년 6월 8일 토요일

VB.NET에서 Windows API를 사용하여 폼의 제목 표시줄 동적으로 제어하기

 Imports System.Runtime.InteropServices


Public Class Form1


    ' 윈도우 스타일을 얻거나 설정하기 위한 상수 정의

    Private Const GWL_STYLE As Integer = -16

    Private Const WS_CAPTION As Integer = &HC00000

    Private Const SM_CYCAPTION As Integer = 4


    ' GetWindowLong 함수 선언: 윈도우 스타일을 가져옴

    <DllImport("user32.dll", SetLastError:=True)>

    Private Shared Function GetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer) As Integer

    End Function


    ' SetWindowLong 함수 선언: 윈도우 스타일을 설정함

    <DllImport("user32.dll", SetLastError:=True)>

    Private Shared Function SetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer

    End Function


    ' GetSystemMetrics 함수 선언: 시스템 메트릭스를 가져옴

    <DllImport("user32.dll")>

    Private Shared Function GetSystemMetrics(ByVal nIndex As Integer) As Integer

    End Function


    ' 타이틀바 높이를 저장할 변수

    Private cycap As Integer


    ' 폼이 로드될 때 실행되는 코드

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load

        ' 버튼의 텍스트를 "Nocaption"으로 설정

        btnToggleCaption.Text = "Nocaption"

        ' 타이틀바의 높이를 가져와서 cycap 변수에 저장

        cycap = GetSystemMetrics(SM_CYCAPTION)

    End Sub


    ' 폼이 닫힐 때 실행되는 코드

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs)

        ' 현재 윈도우 스타일을 가져옴

        Dim style As Integer = GetWindowLong(Me.Handle, GWL_STYLE)


        ' 버튼의 텍스트가 "Caption"이 아닌 경우, 타이틀바를 다시 보여줌

        If btnToggleCaption.Text <> "Caption" Then

            SetWindowLong(Me.Handle, GWL_STYLE, style Or WS_CAPTION)

        End If

    End Sub


    ' 버튼 클릭 시 실행되는 코드

    Private Sub btnToggleCaption_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnToggleCaption.Click

        ' 현재 윈도우 스타일을 가져옴

        Dim style As Integer = GetWindowLong(Me.Handle, GWL_STYLE)


        ' 버튼의 텍스트가 "Nocaption"인 경우, 타이틀바를 없앰

        If btnToggleCaption.Text = "Nocaption" Then

            btnToggleCaption.Text = "Caption"

            SetWindowLong(Me.Handle, GWL_STYLE, style And Not WS_CAPTION)

            Me.Height -= cycap

        Else

            ' 버튼의 텍스트가 "Caption"인 경우, 타이틀바를 다시 보여줌

            btnToggleCaption.Text = "Nocaption"

            SetWindowLong(Me.Handle, GWL_STYLE, style Or WS_CAPTION)

            Me.Height += cycap

        End If

    End Sub


End Class


댓글 없음:

댓글 쓰기

-


Sidewinder


World


FishMusic


LaughingBaby