vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

In diesem Forum haben Sie die Möglichkeit Kommentare, Fragen und Verbesserungsvorschläge zu den im vb@rchiv gelisteten Tipps und Workshops zu posten.

Hinweis:
Ein neues Thema kann immer nur über die jeweilige Tipps & Tricks bzw. Workshop Seite eröffnet werden!

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fragen zu Tipps & Tricks und Workshops im vb@rchiv
Re: Neuzeichnen von Fensterinhalten sperren 
Autor: Snoopy
Datum: 10.07.08 13:20

Ich habe das mal nach .Net umgesetzt.

Imports System.Runtime.InteropServices
 
<StructLayout(LayoutKind.Sequential)> _
Public Structure RECT
   Public Left As Integer
   Public Top As Integer
   Public Right As Integer
   Public Bottom As Integer
End Structure
 
 
 
Public Class cLockUpdate
 
   <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
 
   Private Shared Function RedrawWindow(ByVal hWnd As IntPtr, ByRef lprcUpdate _
     As RECT, _
      ByVal hrgnUpdate As IntPtr, ByVal flags As Int32) As Int32
   End Function
 
   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
 
 
 
   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
Hier ne kleine Testroutine mit einer ListBox

Public Class Form1
 
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
     System.EventArgs) Handles Button1.Click
      Dim sw As New Stopwatch
      sw.Start()
 
      cLockUpdate.LockWindow(Me.ListBox1.Handle, True)
      For x As Integer = 0 To 50000
         Me.ListBox1.Items.Add("Eintrag " & x.ToString)
      Next
      cLockUpdate.LockWindow(Me.ListBox1.Handle, False)
 
      sw.Stop()
      MsgBox("msec: " & sw.ElapsedMilliseconds.ToString)
   End Sub
End Class
Ohne Lockupdate brauchen die 500.000 Einträge 3 mal solange

Gruß

Gru?
---------------------------------------------------
Snoopy sagt - vb@rchiv find ich gut...
Schon gesehen? OSMMapViewer V2 Control

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Tipp 141: Neuzeichnen von Fensterinhalten sperren3.821toshi7104.07.08 12:21
Re: Neuzeichnen von Fensterinhalten sperren1.925ModeratorDieter10.07.08 07:53
Re: Neuzeichnen von Fensterinhalten sperren1.840Snoopy10.07.08 13:20
Re: Neuzeichnen von Fensterinhalten sperren1.829Moderatorralf_oop11.07.08 17:38

Sie sind nicht angemeldet!
Um einen neuen Beitrag schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel