VB-Power.net

Neuzeichnen von Fensterinhalten verhindern


Klassenmodule
Erstellt am 25 Jan 2009
VB.Net Code-Snippets, Klassen und mehr... >> Klassenmodule

Kennen Sie das auch? Der Fensterinhalt flackert, während eine bestimmte Aktion bzw. eine Vielzahl bestimmter Aktionen ausgeführt wird? Wie Sie diesen unangenehmen und störenden Effekt abschalten können, zeigen wir Ihnen mit den nachfolgenden VB.Net Klassenmodul.

Hinweis: Einige Controls, wie bspw. ListBox, ListView, ComboBox und CheckedListBox verfügen bereits mit der BeginUpdate und EndUpdate Methode über diese Funktionalität, so dass man hier nicht extra die LockUpdate-Klasse benötigt.

Imports System.Runtime.InteropServices
Public Class cLockUpdate
  ' benötigte API-Struktur
  <StructLayout(LayoutKind.Sequential)> _
  Public Structure RECT
    Public Left As Integer
    Public Top As Integer
    Public Right As Integer
    Public Bottom As Integer
  End Structure
 
  ' benötigte API-Funktionen
  <DllImport("user32.dll", CharSet:=CharSet.Auto)> _
  Private Shared Function GetClientRect( _
    ByVal hWnd As System.IntPtr, _
    ByRef lpRECT As RECT) As Integer
  End Function
 
  Declare Auto Function SendMessage Lib "user32.dll" ( _
    ByVal hWnd As IntPtr, _
    ByVal msg As Integer, _
    ByVal wParam As IntPtr, _
    ByVal lParam As IntPtr) As IntPtr
 
  <DllImport("user32.dll", CharSet:=CharSet.Auto)> _
  Private Shared Function RedrawWindow( _
    ByVal hWnd As IntPtr, _
    ByRef lprcUpdate As RECT, _
    ByVal hrgnUpdate As IntPtr, _
    ByVal flags As Int32) As Int32
  End Function
 
  ' API-Konstanten
  Private Const RDW_INVALIDATE As Int32 = &H1
  Private Const WM_SETREDRAW As Int32 = &HB
  Private Const RDW_ALLCHILDREN As Int32 = &H80
  Private Const RDW_UPDATENOW As Int32 = &H100
  Private Const RDW_ERASE As Int32 = &H4

  ''' <summary>
  ''' Deaktiviert / Aktiviert das Neuzeichnen eines Fensters
  ''' </summary>
  ''' <param name="hWnd">Handle des Fensters/Controls</param>
  ''' <param name="wLock">True, um das Neuzeichnen zu verhiner
  ''' False, um das Neuzeichnen wieder zu aktivieren</param>
  Public Shared Sub LockWindow(ByVal hWnd As IntPtr, ByVal wLock As Boolean)
    Dim ClientRect As New RECT
 
    If wLock = True Then
      SendMessage(hWnd, WM_SETREDRAW, False, 0&)
    Else
      SendMessage(hWnd, WM_SETREDRAW, True, 0&)
      GetClientRect(hWnd, ClientRect)
      RedrawWindow(hWnd, ClientRect, 0&, RDW_ERASE Or _
        RDW_INVALIDATE Or RDW_ALLCHILDREN Or RDW_UPDATENOW)
    End If
  End Sub

End Class

Letzte Änderung: 01 Feb 2009 at 09:20

Zurück
TOP Download !!!

DataGridView Control Extender

Erweitern Sie Ihr DataGridView mit 16 zusätzlichen Spaltentypen.


Weiterlesen...


TOP 5 Downloads
Explorer TreeView mit VB.Net - Beispielprojekt2255
DataGridView Control Extender incl. VB2008 Demoprojekt2017
MCIFramework.dll1385
DataGridView Control Extender incl. VB2005 Demoprojekt1183
Settings für das DataGridView - Beispielprojekt991
Powered by:

Powered By VB-Power.net