PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Menü-Ereignisse (auf-&zuklappen erkennen)


Mimo
30.04.2002, 17:42
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


cYrus
30.04.2002, 19:41
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. :)

Mimo
02.05.2002, 08:33
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

Mimo
02.05.2002, 11:24
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

Mimo
02.05.2002, 11:58
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

Mimo
03.05.2002, 15:53
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