⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flickerfreecontrol.vb

📁 sqlce查询分析器
💻 VB
字号:
''' <summary>
''' This is the underlying control which eliminates flickering by disabling painting of all
''' child and sub-controls.
''' </summary>
Public MustInherit Class FlickerFreeControl
    Inherits Control

    Private Const WM_SETREDRAW As Integer = &HB
    ''' <summary>
    ''' This is your good old SendMessage function.  We'll be sending the magic WM_SETREDRAW message which suspends and resumes painting for this and all sub controls.  Sweeto.
    ''' </summary>
    Private Declare Auto Function SendMessage Lib "User32" Alias "SendMessage" (ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Boolean

    Private mySuspendPainting As Integer = 0
    ''' <summary>
    ''' Stop painting while multiple changes are made to this and/or nested controls.
    ''' </summary>
    ''' <value>True to suspend painting.  False to resume painting.</value>
    ''' <remarks>This actually increments a counter for each time it is set to true and decrements that 
    ''' counter for each time it is set to false.  This is to prevent painting from resuming earlier than
    ''' we might wish.</remarks>
    Protected Property SuspendPainting() As Boolean
        Get
            Return mySuspendPainting > 0
        End Get
        Set(ByVal value As Boolean)
            If (Not Me.Visible OrElse Not Me.IsHandleCreated) Then Exit Property
            If (value) Then
                mySuspendPainting += 1
                If (System.Threading.Interlocked.Increment(mySuspendPainting) = 1) Then
                    SendMessage(Me.Handle, WM_SETREDRAW, 0, 0)
                End If
            Else
                If (System.Threading.Interlocked.Decrement(mySuspendPainting) = 0) Then
                    SendMessage(Me.Handle, WM_SETREDRAW, 1, 0)
                    Me.Invalidate(True)
                End If
            End If
        End Set
    End Property

    Public Sub New()
        Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
        Me.SetStyle(ControlStyles.UserPaint, True)
        Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
    End Sub
End Class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -