Archiv verlassen und diese Seite im Standarddesign anzeigen : Menü-Ereignisse (auf-&zuklappen erkennen)
Hallo!
Ich versuche festzustellen, wann Menüs auf- und zugeklappt werden.
Hierbei handelt es sich um die "Hauptmenüpunkte" einer Form. Also die Punkte, die üblicherweise "Datei", "Bearbeiten" usw. heissen.
Das Aufklappen bekommt man durch ein Click-Ereignis mit. Das ist schon mal nicht schwer.
Aber wie zum Teufel weiss ich, wann ein Menü wieder von der Bildfläche verschwindet?
Kann mir jemand da weiterhelfen? Hab schon auf diversen Tips&Tricks seiten gesucht, aber nix gefunden...
Gruss & THX,
Mimo
da gibts wohl keine möglichkeiten ausser es würde irgendwie mit APIs gehen..
so long
cYrus
MeltDown
01.05.2002, 16:22
hi Mimo,
ich habe schon einmal so etwas ähnliches mit einem Combo-Steuerelement realisiert, d.h. dass Programm hat es mit einem SendMessage erkannt wann dass Steuerelement geöffnet bzw. geschlossen worden ist.
Aber leider hat ein Menu kein hWnd... naja, werde mich mal etwas umhören, vllt. finde ich etwas..
cya
Felix Kaiser
01.05.2002, 17:12
Ganz einfach: Setze das Menü über API Befehle auf Ownerdraw, verwende einfach die Standardzeichenroutine. Dann kannst du schon ´etwas´ abfangen.
Andersrum hat jedes Menü ein Handle. Und auch jedes Untermenü hat ein eigenes Handle.
Schau mal in die ´Menu Reference´ der Win32 SDK. Lass dich inspirieren. Gibt interessante Befehle und Events dort.
WM_INITMENU
The WM_INITMENU message is sent when a menu is about to become active. It occurs when the user clicks an item on the menu bar or presses a menu key. This allows the application to modify the menu before it is displayed.
Mit sowas z.B., schau mal nach. :)
Hi Leute!
Danke für Eure Tipps! Ich werde mal nachsehen, was man machen kann. Der Einfachheit halber werde ich es mal über messagehooking probiereb - vielleicht gibt´s dafür ja auch ne Message ans Hauptfenster, welche ich auswerten kann.
Gruss,
Mimo
So!
Bin jetzt ein Stückchen weiter.
Ich bekomme per Messagehooking mit, wann ein menü geöffnet wird. Dabei wird mir der Menühandle (HMENU) mitgeliefert.
Nur leider weiss ich dann nicht, wie der hWnd des Fensters lautet, in dem es erscheinen wird.
Denn ich muss ja neu hooken, damit ich das WM_CLOSE event von dem Menüfenster bekomme, wenn´s weggemacht wird.
Ich hoffe, nur, dass ein Menü doch irgendwie eine Fensterklasse ist...
Gruss,
Mimo
Hab´s jetzt! *G*
Man bekommt ein WM_MENUSELECT, bei dem HMENU=0 übergeben wird!!!
Gruss,
Mimo
MeltDown
03.05.2002, 13:45
@mimo
kannst du bitte den code posten ? interessiert mich
Also...
Ich habe einfach das Msghook-Control (Freeware) von Mabry genommen. Hier (http://www.mvps.org/vb/index2.html?controls.htm) kann es heruntergeladen werden (MsgHook.zip).
Folgenden Code habe ich dann auf meine Form hinzugefügt:
Im Deklarationsteil:
Const WM_MENUSELECT = &H11F
IM Form_Load
Msghook1.HwndHook = hWnd
Msghook1.Message(WM_MENUSELECT) = True
Im Form_Unload
´
´ Unhook the window!
´
Msghook1.HwndHook = 0
Die "gehookten" Messages auswerten
Private Sub Msghook1_Message(ByVal Msg As Long, ByVal wp As Long, ByVal lp As Long, Result As Long)
Select Case Msg
Case WM_MENUSELECT
´
´ In "lp" steht der Menuehandle
´
m_PulldownMenuIsOpen = lp <> 0
End Select
End Sub
Das Control find ich echt klasse!!!
Gruss,
Mimo
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.