Ownerdraw Menüs...
-
Nein, es ist nicht möglich, denn wie ich schon sagte wird der Pfeil vom System gezeichnet. Du könntest das Fenster des Menüs subclassen und WM_PAINT, WM_PRINTCLIENT abfangen, aber dann wirst wohl keine WM_DRAWITEM Notifications bekommen...
Hier ist z.B. ein einfaches selbstgeschriebenes Menü um das eigentliche Konzept zu verstehen http://www.codeguru.com/Cpp/controls/menu/alternativemenu/article.php/c189/
Ich schreibe momentan selbst ein eigenes Menü, allerdings in WTL:
http://www.home.no/rainy/shlo/demo10.zip
-
Alles klar, ich danke Dir für die Hilfe!!!
-
Shlo, kannst du uns auch den Quelltext freigeben?

-
Das Menü ist lange noch nicht fertig, deshalb macht es momentan keinen Sinn die Sourcen zu posten.

-
Wie "selber" hast du das geschrieben? Also was ist deine Basisklasse usw. Würde mich interessieren, habe nämlich vor nem Jahr oder so auch ein Menü geschrieben, bei dem ich alles selbst implementiert hab, Basisklasse war CWnd

-
Die Basisklasse ist ein CWindowImpl-Template, vergleichbar mit CWnd bei MFC.
-
Dann frag ich mich, was bei dem Menü denn noch fehlt?
-
Vieles: die Positionierung der Popups ist manchmal fehlerhaft, der Schatten wird nach einer schnellen nacheinanderfolgenden Anzeige der Popups falsch gezeichnet. Das Verhalten des Menüs entspricht nicht ganz dem Menü von Windows und die Animationen fehlen...

-
*g* ok. Also nur Kleinigkeiten.
-
Wie es man sieht... Was aber noch wichtig ist: es fehlt die Möglichkeit mit der Tastatur zu navigieren. Es ist zwar bereits implementiert, aber da das Menü nie den Fokus bekommt, muss ich den Umweg über Hooks nehmen.

-
oh lol, das ist natürlich schlecht *fg*
-
Kennst du schon das Fakemenu-Sample aus dem Platform SDK (Samples\winui\Shell\Fakemenu)? Dort kann man auch Eingaben mit der Tastatur machen, aber ohne Hooks.
-
Ich habe die Samples leider nicht installiert. Aber es geht in der Tat ohne Hooks: man filtert die Nachrichten im Bereich von WM_KEYFIRST bis WM_KEYLAST direkt in der Messageloop des Menüs und schickt diese an das Fenster ohne DispatchMessage aufzurufen und das scheint zu funktionieren.
