vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Menüs13.09.01
DestroyMenu-Funktion

Die Funktion zerstört ein Popup- oder Fenstermenü, um die durch das Menü belegten Ressourcen wieder freizugeben.

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

Deklaration:

Declare Function DestroyMenu Lib "user32.dll" ( _
  ByVal hMenu As Long) As Long

Beschreibung:
Die Funktion zerstört ein Popup- oder Fenstermenü, um die durch das Menü belegten Ressourcen wieder freizugeben. Evtl. vorhandene Untermenüs werden ebenfalls entladen.

Parameter:
hMenuErwartet das Handle des Menüs, das zerstört (entladen) werden soll.

Rückgabewert:
Ist die Funktion erfolgreich, so ist die Rückgabe "ungleich 0", andernfalls ist die Rückgabe "0". Für erweiterte Fehlerinformationen können Sie die GetLastError-Funktion aufrufen.


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
' =============================
 
' Benutzt die fState Optionen
Private Const MIIM_STATE = &H1
 
' Benutzt die wID Option
Private Const MIIM_ID = &H2
 
' Benutzt die hSubMenu Option
Private Const MIIM_SUBMENU = &H4
 
' Benutzt die hbmpChecked und hbmpUnchecked Optionen
Private Const MIIM_CHECKMARKS = &H8
 
' Benutzt die dwItemDate Option
Private Const MIIM_DATA = &H20
 
' Benutzt die dwTypeData Option
Private Const MIIM_TYPE = &H10
 
 
' MENUITEMINFO fType-Konstanten
' =============================
 
' Zeigt ein Bitmap im Menü an. Der 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_BITMAP = &H4
 
' Plaziert das Menü in eine neuen Zeile oder Spalte und
' zeichnet über und unter dem Eintrag einen Separator
Private Const MFT_MENUBARBREAK = &H20
 
' Identisch mit MFT_MENUBARBREAK nur ohne Separator
Private Const MFT_MENUBREAK = &H40
 
' Überlässt das Neuzeichnen des Menüs dem Fenster
Private Const MFT_OWNERDRAW = &H100
 
' Zeigt einen Radiobutton als Checked/Unchecked an
Private Const MFT_RADIOCHECK = &H200
 
' Richtet ein Menü rechtsbündig aus
Private Const MFT_RIGHTJUSTIFY = &H4000
 
' (Win 9x, 2000) Die Menüs plazieren sich rechts voneinander,
' der Text von rechts nach links unterstützt
Private Const MFT_RIGHTORDER = &H2000
 
' Zeichnet eine horizontale Linie, dwTypeData und cch werden
' ignoriert.
' Kann nicht mit MFT_BITMAP oder MFT_STRING kombiniert werden
Private Const MFT_SEPARATOR = &H800
 
' 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.
Private Const MFT_STRING = &H0
 
 
' MENUITEMINFO fState-Konstanten
' ==============================
 
' MenuItem ist Markiert
Private Const MFS_CHECKED = &H8
 
' MenuItem ist die Standard-Auswahl
Private Const MFS_DEFAULT = &H1000
 
' MenuItem ist Disabled
Private Const MFS_DISABLED = &H2
 
' MenuItem ist Enabled
Private Const MFS_ENABLED = &H0
 
' MenuItem ist Grau und Disabled
Private Const MFS_GRAYED = &H1
 
' MenuItem hat die Selektierung
Private Const MFS_HILITE = &H80
 
' MenuItem ist nicht markiert
Private Const MFS_UNCHECKED = &H0
 
' MenuItem hat nicht die Selektierung
Private Const MFS_UNHILITE = &H0
 
 
' TrackPopupmenu uFlags-Konstanten
' ================================
 
' Positioniert das Menü horizontal in der Mitte von x
Private Const TPM_CENTERALIGN = &H4
 
' Positioniert das Menü horizontal mit dem linken Rand auf x
Private Const TPM_LEFTALIGN = &H0
 
' Positioniert das Menü Horizontal mit dem rechten Rand auf x
Private Const TPM_RIGHTALIGN = &H8
 
' Positioniert das Menü mit dem unteren Rand auf y
Private Const TPM_BOTTOMALIGN = &H20
 
' Positioniert das Menü mit dem oberen Rand auf y
Private Const TPM_TOPALIGN = &H0
 
' Positioniert das Menü vertikal in der Mitte von y
Private Const TPM_VCENTERALIGN = &H10
 
' Sendet bei Ereignissen kein WM_COMMAND an das Elternfenster
Private Const TPM_NONOTIFY = &H80
 
' ID des Menüs, welches gewählt wurde
Private Const TPM_RETURNCMD = &H100
 
' Erlaubt dem Benutzer nur das Markieren der Einträge über
' die linke Maustaste und der Tastatur
Private Const TPM_LEFTBUTTON = &H0
 
' Erlaubt dem Benutzer die Einträge mit jedem Mausbutton
' zu wählen und der Tastatur
Private Const TPM_RIGHTBUTTON = &H2
 
Dim hPopupMenu As Long
Dim MenuItem(1 To 2) As MENUITEMINFO
' Erstellt das Popupmenü mit zwei Einträgen:
' "Einfügen und Ausschneiden"
' und speichert das Handle in hPopupMenu
Private Sub Form_Load()
  Dim Retval As Long
 
  ' Popup-Menü erstellen
  hPopupMenu = CreatePopupMenu()
 
  ' Menü-Eintrag hinzufügen ("&Einfügen")
  With MenuItem(1)
    .cbSize = Len(MenuItem(1))
    .dwTypeData = "&Einfügen"
    .cch = Len(Trim$(.dwTypeData))
    .fMask = MIIM_TYPE Or MIIM_ID
    .fState = MFS_DEFAULT Or MFS_HILITE
    .fType = MFT_STRING
    .wID = 1
  End With
  Retval = InsertMenuItem(hPopupMenu, 0&, 0&, MenuItem(1))
  If Retval = 0 Then
    Debug.Print "Fehler beim Hinzufügen: (Einfügen)."
  End If
 
  ' Menü-Eintrag hinzufügen ("&Ausschneiden")
  With MenuItem(2)
    .cbSize = Len(MenuItem(2))
    .dwTypeData = "&Ausschneiden"
    .cch = Len(Trim$(.dwTypeData))
    .fMask = MIIM_TYPE Or MIIM_ID
    .fState = MFS_DEFAULT Or MFS_HILITE
    .fType = MFT_STRING
    .wID = 2
  End With
  Retval = InsertMenuItem(hPopupMenu, 0&, 0&, MenuItem(2))
  If Retval = 0 Then
    Debug.Print "Fehler beim Hinzufügen: (Ausschneiden)."
  End If
End Sub
' Popupmenü anzeigen und auswerten
Private Sub Command1_Click()
  Dim Retval As Long, Flags As Long, CmdPos As RECT
 
  ' Position des Fensters ermitteln (CommandButton)
  GetWindowRect Command1.hwnd, CmdPos
 
  ' PopUp-Menü anzeigen
  Flags = TPM_LEFTBUTTON Or TPM_TOPALIGN Or TPM_NONOTIFY Or _
    TPM_RETURNCMD
 
  With CmdPos
    Retval = TrackPopupMenu(hPopupMenu, Flags, .right, _
      .bottom, 0&, Me.hwnd, 0&)
  End With
 
  ' Gewähltes Menü ausgeben (wenn denn eine Auswahl
  ' stattgefunden hat)
  If Retval <> 0 Then
    MsgBox "Sie haben den Eintrag """ & _
      Replace(MenuItem(Retval).dwTypeData, "&", _
      "", 1, 1) & """ gewählt!"
  End If
End Sub
' Popupmenü entfernen und Ressourcen freigeben
Private Sub Form_QueryUnload(Cancel As Integer, _
  UnloadMode As Integer)
 
  DestroyMenu hPopupMenu
End Sub

Diese Seite wurde bereits 8.339 mal aufgerufen.

nach obenzurück
 
   

Druckansicht Druckansicht 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