Probleme mit Empfangen von Mausnachrichten
-
Hiho,
folgende Situation. Ich habe einen Dialog, der hat als Kinder mehrere andere Steuerlemente und Dialoge. Eines der Steuerelemente ist eine Grafikanzeige, welche ich mit "strg+f" auf Vollbild ziehe. Das mache ich folgender Maßen:
//Graph auf Vollbild ziehen m_measStatic.SetParent(0); m_measStatic.ShowWindow(SW_SHOWMAXIMIZED); EnableWindow(false);Ich deaktiviere also den aktuellen Vollbildialog und vergrößere das Control mit der Grafik (m_measStatic), sodass nur der Graph sichtbar ist. Mein Problem ist jetzt: das Ereignis für das Drehen des Mausrades kommt nicht mehr an. Mouse Move geht, aber das Mouse Wheel nicht mehr. Ich muss immer erst die Grafik einmal im normalen Modus anklicken und das Mausrad benutzen. Wenn ich dann Vollbild mache, dann gehts auch im Vollbild, aber wirklich nur dann.
Wenn ich in dem oberen Code ein "SetFocus" auf das Control mache, bringt das auch nichts. Woran liegt das?MfG Pellaeon
-
Hast Du das Control von CStatic abgeleitet? Ich vermute dies, weil Deine Variable einen entsprechenden Namen mit static trägt.
Satics haben eine anderes Verhalten gegenüber der Maus... Evtl. kommt damit einfach der Maustreiber nicht klar, weil er denkt er hätte ein "normales" Static vor sich.
-
Ja das ist eine von CStatic abgeleitete Klasse. Die nutz ich einfach als Zeichenfläche.
-
Pellaeon schrieb:
Ja das ist eine von CStatic abgeleitete Klasse. Die nutz ich einfach als Zeichenfläche.
CStatic Fenster sindnicht dafür gebaut Maus und andere Aktionen anzunehmen. Je nach Maustreiber wird der Deine ensterklasse analysieren und sehen: "Oh ein Static" der braucht keine Mauswheel Nachrichten....
SS_NOTIFY gesetzt?
Evtl. kann dies Abhilfe schaffen:
Versuch mal Deine Klasse einfach von CWnd abzuleiten. Das macht das ganze auch nicht viel anders. Und erzeuge es direkt in Deinem Dialog per Create, genau über der Position eines Platzhalters im Dialog.
Kein Subclass! Denn sonst bleibt das ursprüngliche Fenster ein Static, der durch den Dialogmanager erzeugt wurde.
-
Ja das SS_NOTIFY ist gesetzt. Ohne das würde auch im "normalen" Betrieb keine Mausnachrichten ankommen. Ich habs jetzt erstmal so gemacht, dass ich alle Controls mit WS_CLIPSIBLING erstelle. Dadurch kann ich mir das.
m_measStatic.SetParent(0);sparen und trotzdem überlappen sich die Controls nicht mehr. Das war das eigentliche Problem beim Vollbild, warum ich erst dem Control das Elternfenster entzogen habe. Solange ein "normales" Elternfenster da ist, scheint es auch mit den Mausnachrichten zu klappen.
Aber den Hinweise, CStatic nicht mehr für sowas zu nehmen, werd ich mir mal merken. Dass das solche Probleme verursachen kann, war mir neu. Ich nehm das halt gerne, weil man dass im Designer schön auf den Dialogen wie gewohnt platzieren kann und man dann nur den Typ der Controlvariable ändert.
Danke für deine Hilfe.MfG Pellaeon
-
Das Problem sind externe Programm. Und dazu zählen eben auch die mehr oder weniger intelligenten Mouse-Wheel Treiber.
Der sieht eben ein Static-Control! Aber das ist es eben nicht mehr...