vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Fenster15.04.02
SetClassLong-Funktion

Diese Funktion setzt Eigenschaften einer Fensterklasse wie z.B. Standard-Prozeduradresse oder das Standard-Icon der Klasse.

Betriebssystem:  Win95, Win98, WinNT 3.1, Win2000, WinMEViews:  8.700 

Deklaration:

Declare Function SetClassLong Lib "user32.dll" _
  Alias "SetClassLongA" ( _
  ByVal hWnd As Long, _
  ByVal nIndex As Long, _
  ByVal dwNewLong As Long) As Long


Beschreibung:

Diese Funktion setzt Eigenschaften einer Fensterklasse wie z.B. Standard-Prozeduradresse oder das Standard-Icon der Klasse.


Parameter:

hWndErwartet das Fensterhandle eines Fensters dessen Klassen-Eigenschaften geändert werden sollen.
nIndexUm einen 32-Bit-Wert aus dem Extraspeicher der Klasse zusetzen, geben Sie hier den 0-Basierenden Offset der Speicheradresse von dem Punkt an, von dem Sie die Daten schreiben wollen. Gültige Werte für diesen Fall sindWerte zwischen 0 und die Größe des Extraspeichers der Klasse minus 4. Um Standard-Informationen der Klasse zusetzen, geben Sie eine der "nIndex"-Konstanten an.


nIndex Konstanten:

 
Const GCL_CBCLSEXTRA = -20
' ermittelt die Größe des Extraspeichers der Klasse
 
Const GCL_CBWNDEXTRA = -18
' ermittelt die Größe des Extraspeichers des Fensters
 
Const GCL_HBRBACKGROUND = -10
' ermittelt das Handle des Brushs
 
Const GCL_HCURSOR = -12
' ermittelt das Handle des Cursors der Klasse
 
Const GCL_HICON = -14
' ermittelt das Handle des Icons der Klasse
 
Const GCL_HMODULE = -16
' ermittelt das Handle des Moduls der Klasse
 
Const GCL_MENUNAME = -8
' ermittelt den Menünamen der Klasse
 
Const GCL_STYLE = -26
' ermittelt den Fensterstyle der Klasse
 
Const GCL_WNDPROC = -24
' ermittelt die Prozeduradresse der Klasse
 


Rückgabewert:

Ist die Funktion erfolgreich, so liefert sie den Wert der Klasse der vorher eingestellt war, andernfalls ist die Rückgabe "0". Erweiterte Fehlerinformationen könnenmit der GetLastError-Funktion ermittelt werden.

Beispiel:

Private Declare Function GetClassLong Lib "user32.dll" _
  Alias "GetClassLongA" ( _
  ByVal hWnd As Long, _
  ByVal nIndex As Long) As Long
Private Declare Function SetClassLong Lib "user32.dll" _
  Alias "SetClassLongA" ( _
  ByVal hWnd As Long, _
  ByVal nIndex As Long, _
  ByVal dwNewLong As Long) As Long
Private Declare Function GetClassName Lib "user32.dll" _
  Alias "GetClassNameA" ( _
  ByVal hWnd As Long, _
  ByVal lpClassName As String, _
  ByVal nMaxCount As Long) As Long
Private Declare Function CallWindowProc Lib "user32.dll" _
  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 LoadImage Lib "user32" _
  Alias "LoadImageA" ( _
  ByVal hInst As Long, _
  ByVal lpsz As String, _
  ByVal dwImageType As Long, _
  ByVal dwDesiredWidth As Long, _
  ByVal dwDesiredHeight As Long, _
  ByVal dwFlags As Long) As Long
 
' Get/Set-Class nIndex-Konstanten
Private Const GCL_CBCLSEXTRA = -20 ' ermittelt die Größe des Extraspeichers der Klasse 
Private Const GCL_CBWNDEXTRA = -18 ' ermittelt die Größe des Extraspeichers des Fensters 
Private Const GCL_HBRBACKGROUND = -10 ' ermittelt das Handle des Brushs der Klasse
Private Const GCL_HCURSOR = -12 ' ermittelt das Handle des Cursors der Klasse
Private Const GCL_HICON = -14 ' ermittelt das Handle des Icons der Klasse
Private Const GCL_HMODULE = -16 ' ermittelt das Handle des Moduls der Klasse
Private Const GCL_MENUNAME = -8 ' ermittelt den Menünamen der Klasse
Private Const GCL_STYLE = -26 ' ermittelt den Fensterstyle der Klasse
Private Const GCL_WNDPROC = -24 ' ermittelt die Prozeduradresse der Klasse
 
' LoadImage dwImageType-Konstanten
Private Const IMAGE_BITMAP = 0 ' gibt ein Handle zu einem Bitmap zurück
Private Const IMAGE_ICON = 1 ' gibt ein Handle zu einem Icon zurück
Private Const IMAGE_CURSOR = 2 ' gibt ein Handle zu einem Cursor zurück
Private Const IMAGE_ENHMETAFILE = 3 ' gibt ein Handle zu einer Enhanced Metadatei zurück 
 
' Loadmage dwFlags-Konstanten
Private Const LR_CREATEDIBSECTION = &H2000 ' lädt ein Bitmap mit Dib-Sektionen
Private Const LR_DEFAULTCOLOR = &H0 ' lädt das Bild in den Standardfarben 
(Not LR_MONOCHROME) 
Private Const LR_DEFAULTSIZE = &H40 ' lädt das Bild in der Standardgröße des Bildes
Private Const LR_LOADFROMFILE = &H10 ' lädt das Bild von einer Datei
Private Const LR_LOADMAP3DCOLORS = &H1000 ' ersetzt bestimmte Grautöne eines Bildes  
' mit den Systemfarben für 3D-Rahmen, die normalerweise den Grautönen zugeordnet sind
Private Const LR_LOADTRANSPARENT = &H20 ' ersetzt alle Pixel des Bildes mit dem  
' Farbwert des ersten Pixels des Bitmaps durch die Standard-Fensterhintergrundfarbe
Private Const LR_MONOCHROME = &H1 ' lädt das Bild in Schwarzweiß
Private Const LR_SHARED = &H8000 ' diese Option erzwingt bei mehrmaligem Aufruf der Funktion,  
' dass jedes Mal das gleiche Handle zurückgegeben wird und das Bild nicht erneut geladen wird
Private Const LR_COPYFROMRESOURCE = &H4000 ' lädt das Bild aus einer Ressource
 
' eine der Fensternachrichten
Private Const WM_CLOSE = &H10 ' schließt das Fenster
 
Private hIcon As Long
' der Fensterklasse unserer Form ein anderes Icon zuweisen
Private Sub Form_Load()
  Dim Retval As Long
  Dim Buffer As String * 256
 
  ' Klassennamen ermitteln
  Retval = GetClassName(Me.hWnd, Buffer, Len(Buffer))
  If Retval = 0 Then
    MsgBox "Der Klassenname konnte nicht ermittelt werden"
  Else
    MsgBox "Der Klassenname dieses Fensters ist """ & Left$(Buffer, Retval) & """" 
  End If
 
 
  ' Icon laden
  hIcon = LoadImage(App.hInstance, App.Path & "\Misc01.ico", IMAGE_ICON, 16&,  _
  16&, LR_LOADFROMFILE)
  If hIcon = 0 Then
    MsgBox "Fehler beim Laden des Icons"
    Exit Sub
  End If
 
  ' Icon der Klasse zuweisen (das Fenster zeigt darauf keinerlei Reaktionen,
  ' man müsste zu diesem Zweck selbst ein Fenster dieser Klasse mit Hilfe
  ' der CreateWindowEx Funktion erstellen)
  Retval = SetClassLong(Me.hWnd, GCL_HICON, hIcon)
  If Retval = 0 Then
    MsgBox "Das Icon konnte nicht zugewiesen werden"
  End If
End Sub
' Form schließen einmal anders
Private Sub Command1_Click()
  Dim ProcAddress As Long
 
  ' Prozedur-Adresse unserer Form bekommen
  ProcAddress = GetClassLong(Form1.hWnd, GCL_WNDPROC)
  If ProcAddress = 0 Then
    MsgBox "Die Prozeduradresse der Fensterklasse konnte nicht ermittelt werden." 
    End
  End If
 
  ' unserer Form die Schließen-Nachricht zusenden
  CallWindowProc ProcAddress, Me.hWnd, WM_CLOSE, 0&, 0&
End Sub

 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle 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.