vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

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

VB.NET - Fortgeschrittene
Re: SubClassing 
Autor: strossi
Datum: 05.09.07 14:48

Also in .NET habe ich nichts mehr. Das geht ja über die Sub
Protected Overrides sub WndProc(...)


Hier noch mein Code für die Klasse

Option Explicit
 
Private mvar_hWnd As Long
Private mvar_bSubClass As Boolean
Private mvar_OldWindowProc As Long
 
Public Event MessageCatched( _
  ByVal hWnd As Long, _
  ByRef uMsg As Long, _
  ByRef wParam As Long, _
  ByRef lParam As Long, _
  ByRef bCancel As Boolean)
 
 
Private Declare Function SetWindowLong Lib "user32" _
  Alias "SetWindowLongA" ( _
  ByVal hWnd As Long, _
  ByVal nIndex As Long, _
  ByVal dwNewLong As Long) As Long
 
Private Declare Function CallWindowProc Lib "user32" _
  Alias "CallWindowProcA" ( _
  ByVal lpPrevWndFunc As Long, _
  ByVal hWnd As Long, _
  ByVal Msg As Long, _
  ByVal wParam As Long, _
  ByVal lParam As Long) As Long
 
Private Declare Function IsWindow Lib "user32" ( _
  ByVal hWnd As Long) As Long
 
 
Private Const GWL_WNDPROC = (-4)
 
Friend Function NewWindowProc( _
  ByVal hWnd As Long, _
  ByVal uMsg As Long, _
  ByVal wParam As Long, _
  ByVal lParam As Long) As Long
 
  Dim bCancel As Boolean
  bCancel = False
 
  NewWindowProc = 0
  If Not bCancel Then
    NewWindowProc = CallWindowProc(mvar_OldWindowProc, _
      hWnd, uMsg, wParam, lParam)
  End If
End Function
 
Public Function StartSubclass(ByVal hWnd As Long) As Boolean
  Dim lRet As Long
 
  If mvar_bSubClass Then
    StartSubclass = False
    Exit Function
  End If
 
  mvar_bSubClass = True
  mvar_hWnd = hWnd
 
 If IsWindow(hWnd) Then
   lRet = SetWindowLong(hWnd, GWL_WNDPROC, _
     AddressOf modWindowProc)
 
   If lRet <> 0 Then
     StartSubclass = True
     mvar_OldWindowProc = lRet
     lClassAdress = ObjPtr(Me)
   Else
     StartSubclass = False
   End If
  Else
    StartSubclass = False
  End If
End Function
 
Public Function StopSubClass() As Boolean
  Dim lRet As Long
 
  StopSubClass = True
  If mvar_bSubClass Then
    lRet = SetWindowLong(mvar_hWnd, GWL_WNDPROC, _
      mvar_OldWindowProc)
    If lRet <> 0 Then
      mvar_bSubClass = False
    Else
      StopSubClass = False
    End If
  End If
End Function
 
Private Sub Class_Initialize()
  mvar_bSubClass = False
  lClassAdress = ObjPtr(Me)
End Sub
 
Private Sub Class_Terminate()
  Dim bResult As Boolean
  bResult = StopSubClass
End Sub
Das muss in ein Modul

Option Explicit
 
Public lClassAdress As Long
 
Private Declare Sub CopyMemory Lib "kernel32" _
  Alias "RtlMoveMemory" ( _
  Destination As Any, _
  Source As Any, _
  ByVal Length As Long)
 
Public Function modWindowProc( _
  ByVal hWnd As Long, _
  ByVal uMsg As Long, _
  ByVal wParam As Long, _
  ByVal lParam As Long) As Long
 
  Dim oSubClass As SubClassing
 
  CopyMemory oSubClass, lClassAdress, 4
 
  modWindowProc = oSubClass.NewWindowProc(hWnd, _
    uMsg, wParam, lParam)
  CopyMemory oSubClass, 0&, 4
End Function
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
SubClassing1.181strossi05.09.07 13:30
Re: SubClassing738Snof05.09.07 13:57
Re: SubClassing726strossi05.09.07 14:08
Re: SubClassing732Snof05.09.07 14:34
Re: SubClassing743strossi05.09.07 14:48
Re: SubClassing881Snof05.09.07 18:30
Re: SubClassing735strossi06.09.07 06:51
Re: SubClassing725ModeratorFZelle06.09.07 09:10
Re: SubClassing716strossi06.09.07 09:16
Re: SubClassing715ModeratorFZelle06.09.07 13:44
Re: SubClassing730strossi06.09.07 13:58
Re: SubClassing769Drapondur06.09.07 14:20
Re: SubClassing735strossi06.09.07 14:30
Re: SubClassing749ModeratorFZelle06.09.07 16:03
Re: SubClassing754strossi06.09.07 16:12

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 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