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

https://www.vbarchiv.net
Rubrik: Fenster15.03.02
GetWindowRect-Funktion

Diese Funktion ermittelt die Bildschirmkoordinaten eines Fensters.

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

Deklaration:

Declare Function GetWindowRect Lib "user32.dll" ( _
  ByVal hwnd As Long, _
  lpRect As RECT) As Long


Beschreibung:

Diese Funktion ermittelt die Bildschirmkoordinaten eines Fensters.


Parameter:

hwndErwartet das Fensterhandle eines Fensters, dessen Koordinaten ermittelt werden sollen.
lpRectErwartet eine RECT-Struktur, die mit den Fensterkoordinaten gefüllt wird.


Rückgabewert:

Ist die Funktion erfolgreich so ist "1" der Rückgabewert, andernfalls wird "0" zurückgegeben.

 

Beispiel:

Private Declare Function CreatePopupMenu Lib "user32.dll" () As Long
Private Declare Function DestroyMenu Lib "user32.dll" (ByVal hMenu As Long) As Long
Private Declare Function InsertMenuItem Lib "user32.dll" _
  Alias "InsertMenuItemA" ( _
  ByVal hMenu As Long, _
  ByVal uItem As Long, _
  ByVal fByPosition As Long, _
  lpmii As MENUITEMINFO) As Long
Private Declare Function TrackPopupMenu Lib "user32.dll" ( _
  ByVal hMenu As Long, _
  ByVal uFlags As Long, _
  ByVal x As Long, _
  ByVal y As Long, _
  ByVal nReserved As Long, _
  ByVal hwnd As Long, _
  ByVal prcRect As Long) As Long
Private Declare Function GetWindowRect Lib "user32.dll" ( _
  ByVal hwnd As Long, _
  lpRect As RECT) As Long
 
Private Type RECT
  left As Long
  top As Long
  right As Long
  bottom As Long
End Type
 
Private Type MENUITEMINFO
  cbSize As Long
  fMask As Long
  fType As Long
  fState As Long
  wID As Long
  hSubMenu As Long
  hbmpChecked As Long
  hbmpUnchecked As Long
  dwItemData As Long
  dwTypeData As String
  cch As Long
End Type
 
' MENUITEMINFO fMask-Konstanten
Private Const MIIM_STATE = &H1 ' benutzt die fState-Optionen
Private Const MIIM_ID = &H2 ' benutzt die wID-Option
Private Const MIIM_SUBMENU = &H4 ' benutzt die hSubMenu-Option
Private Const MIIM_CHECKMARKS = &H8 ' benutzt die hbmpChecked und hbmpUnchecked-Optionen 
Private Const MIIM_DATA = &H20 ' benutzt die dwItemDate-Option
Private Const MIIM_TYPE = &H10 ' benutzt die dwTypeData-Option
 
' MENUITEMINFO fType-Konstanten
Private Const MFT_BITMAP = &H4 ' zeigt ein Bitmap im Menü an. Das Handle des Bitmaps  
' muss in dwTypeData übergeben werden und cch wird ignoriert. Kann nicht mit  
' MFT_SEPARATOR oder MFT_STRING kombiniert werden
Private Const MFT_MENUBARBREAK = &H20 ' platziert das Menü in einer neuen Zeile oder  
' Spalte und zeichnet über und unter dem Eintrag einen Separator
Private Const MFT_MENUBREAK = &H40 ' das Gleiche wie MFT_MENUBARBREAK, nur ohne Separator 
Private Const MFT_OWNERDRAW = &H100 ' überlässt das Neuzeichnen des Menüs dem Fenster
Private Const MFT_RADIOCHECK = &H200 ' zeigt einen Radiobutton als Checked/Unchecked an 
Private Const MFT_RIGHTJUSTIFY = &H4000 ' richtet ein Menü rechtsbündig aus
Private Const MFT_RIGHTORDER = &H2000 ' (Win 9x, 2000) Die Menüs platzieren sich  
' rechts voneinander und es wird Text von rechts nach links unterstützt
Private Const MFT_SEPARATOR = &H800 ' zeichnet eine horizontale Linie in den  
' Menüeintrag, dwTypeData und cch werden ignoriert. Kann nicht mit MFT_BITMAP oder  
' MFT_STRING kombiniert werden
Private Const MFT_STRING = &H0 ' Der Menüeintrag wird mit einem String gefüllt,  
' deTypeData ist der String der angezeigt werden soll und cch die Länge des Strings.  
' Kann nicht mit MFT_BITMAP oder MFT_SEPARATOR kombiniert werden
 
' MENUITEMINFO fState-Konstanten
Private Const MFS_CHECKED = &H8 ' Menüeintrag ist markiert
Private Const MFS_DEFAULT = &H1000 ' Menüeintrag ist die Standard-Auswahl
Private Const MFS_DISABLED = &H2 ' Menüeintrag ist deaktiviert
Private Const MFS_ENABLED = &H0 ' Menüeintrag ist aktiviert
Private Const MFS_GRAYED = &H1 ' Menüeintrag ist grau und deaktiviert
Private Const MFS_HILITE = &H80 ' Menüeintrag hat die Selektierung
Private Const MFS_UNCHECKED = &H0 ' Menüeintrag ist nicht markiert
Private Const MFS_UNHILITE = &H0 ' Menüeintrag hat nicht die Selektierung
 
' TrackPopupmenu uFlags-Konstanten
Private Const TPM_CENTERALIGN = &H4 ' positioniert das Menü horizontal in der Mitte  
' von x
Private Const TPM_LEFTALIGN = &H0 ' positioniert das Menü horizontal mit dem linken  
' Rand auf x
Private Const TPM_RIGHTALIGN = &H8 ' positioniert das Menü horizontal mit dem  
' rechten Rand auf x
Private Const TPM_BOTTOMALIGN = &H20 ' positioniert das Menü mit dem unteren Rand  
' auf y
Private Const TPM_TOPALIGN = &H0 ' positioniert das Menü mit dem oberen Rand auf y
Private Const TPM_VCENTERALIGN = &H10 ' positioniert das Menü vertikal in der Mitte  
' von y
Private Const TPM_NONOTIFY = &H80 ' sendet kein WM_COMMAND an das Elternfenster des  
' Menüs bei Ereignissen
Private Const TPM_RETURNCMD = &H100 ' die Funktion gibt den ID des Menüs zurück,  
' das gewählt wurde
Private Const TPM_LEFTBUTTON = &H0 ' erlaubt dem Benutzer nur das Markieren der  
' Einträge über die linke Maustaste und die Tastatur
Private Const TPM_RIGHTBUTTON = &H2 ' erlaubt dem Benutzer, die Einträge mit jedem  
' Mausbutton und der Tastatur zu wählen
 
Dim hPopupMenu As Long
Dim Menüeintrag(1 To 2) As MENUITEMINFO
' Popupmenü anzeigen und auswerten
Private Sub Command1_Click()
  Dim Retval As Long, Flags As Long, CmdPos As RECT
 
  ' Position des Fensters ermitteln
  GetWindowRect Command1.hwnd, CmdPos
 
  ' Menü anzeigen
  Flags = TPM_LEFTBUTTON Or TPM_TOPALIGN Or TPM_NONOTIFY Or TPM_RETURNCMD
  Retval = TrackPopupMenu(hPopupMenu, Flags, CmdPos.right, CmdPos.bottom, 0&,  _
  Me.hwnd, 0&)
 
  ' gewähltes Menü ausgeben, wenn eines gewählt wurde
  If Retval << 0 Then
    MsgBox "Sie haben auf """ & Replace(Menüeintrag(Retval).dwTypeData, "&",  _
    "", 1, 1) & """ gedrückt"
  End If
End Sub
' erstellt das Popupmenü und speichert das Handle in hPopupMenu
Private Sub Form_Load()
  Dim Retval As Long
 
  ' Popupmenü erstellen
  hPopupMenu = CreatePopupMenu()
 
  ' Menüeintrag hinzufügen ("&Einfügen")
  With Menüeintrag(1)
    .cbSize = Len(Menüeintrag(1))
    .dwTypeData = "&Einfügen"
    .cch = Len(Trim$(.dwTypeData))
    .fMask = MIIM_TYPE Or MIIM_ID
    .fState = MFS_DEFAULT Or msf_hilite
    .fType = MFT_STRING
    .wID = 1
  End With
  Retval = InsertMenuItem(hPopupMenu, 0&, 0&, Menüeintrag(1))
  If Retval = 0 Then
    Debug.Print "Menüeintrag konnte nicht hinzugefügt werden: (Einfügen)."
  End If
 
  ' Menüeintrag hinzufügen ("&Ausschneiden")
  With Menüeintrag(2)
    .cbSize = Len(Menüeintrag(2))
    .dwTypeData = "&Ausschneiden"
    .cch = Len(Trim$(.dwTypeData))
    .fMask = MIIM_TYPE Or MIIM_ID
    .fState = MFS_DEFAULT Or msf_hilite
    .fType = MFT_STRING
    .wID = 2
  End With
  Retval = InsertMenuItem(hPopupMenu, 0&, 0&, Menüeintrag(2))
  If Retval = 0 Then
    Debug.Print "Menüeintrag konnte nicht hinzugefügt werden: (Ausschneiden)."
  End If
End Sub
' Popupmenü entfernen und Ressourcen freigeben
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  DestroyMenu hPopupMenu
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.