Ownerdraw Menüs...
-
Habe eigentlich ein ganz simples Problem, habe aber bisher keine Lösung dafür gefunden. Ich würde nämlich gerne bei einem selbstgezeichneten Menü die Farbe des kleinen Pfeils ändern, der sich neben Menüeingrägen befindet die wiederum ein Popup Menü öffnen. Ich hoffe mir kann jemand helfen!
Danke schonmal!
-
Das ist nicht möglich, der Pfeil wird vom System gezeichnet. Du könntest aber ein eigenes Menü schreiben.
-
Das habe ich ja schon. Ich habe ein selbstgezeichnetes Menü, das Problem ist dass der Pfeil trotzdem gezeichnet wird, ich kann ihn weger farblich ändern noch ausschalten! Eines davon müsste doch aber gehen!
-
Mit eigenes ist nicht das Ownerdraw Menü gemeint, sondern eins das from scratch geschrieben ist...
-
Aha, das ist wiederum was was ich nicht wusste, kennst Du irgendeine Quelle wo ich mir das genau angucken kann was das ist? Und meine zweite Frage, nur zur Sicherheit, es ist nicht möglich diesen Pfeil mit einem Ownerdraw Menü zu ändern oder ganz zu entfernen?
-
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.
