Frage

Nachdem ich meine eigenen Gründe waren viel zu dubiose realisiert habe ich jetzt darüber eine andere Art und Weise verschwunden. Aber ich bin immer noch neugierig ...

Aus Gründen der Nostalgie, Vertrautheit und Faulheit, ich bin Codierung eine Benutzeroberfläche mit MFC. Für fragwürdige Gründe (als ob diejenigen, die nicht genug wären), wollte ich ein (Doppel-) Klick-Ereignis zu einer Gruppe Feld hinzuzufügen. Natürlich enthält das Gruppenfeld Dinge -. In der Tat, es enthält ein zweites statisches Element, zu dem ich erfolgreich hinzufügen kann ein (Doppel-) klicken Ereignishandler

Gibt es einen Grund, warum ich nicht einen Event-Handler an der Arbeit für Klicks auf meinem Gruppenfeld die gleiche Art und Weise erhalten kann ich das für das einfache Text statischen Element tun kann? Kein Betrag des Klick auf, in oder in der Nähe der Steuer Feuer der Veranstaltung.

Hinweis - ich habe gelesen, durch http://www.codeproject.com/ KB / static / staticctrl_tut.aspx und versucht, sowohl ON_STN _... Ereignisse und ON_BN _... Nachrichten reagiert, die Art benachrichtigen Einstellung (BS_NOTIFY erscheint in der rc-Datei) ... und noch etwas, was ich bin fehlt - Was ist es? Ist es überhaupt möglich? Das meiste, was ich habe schon sagt es gegoogelt ... aber ohne klare Antworten für C ++ / MFC.

Da die erste Posting dieser Frage, ich habe Verweis auf eine WM_NCHITTEST Nachricht gefunden, und Hinweise darauf, dass Sie einen Handler für diese Meldung erstellen haben das Gruppenfeld Standardverhalten reagiert mit HT_TRANSPARENT ... außer Kraft zu setzen trotz seiner transparente Eigenschaft, in Klassen-Assistenten auf false gesetzt. Hmmm. Kann jemand bestätigen, dass dies tatsächlich der Schlüssel?

War es hilfreich?

Lösung

Ich denke, WM_NCHHITTEST / HT_TRANSPARENT ist in der Tat der Schlüssel hier.

Gruppenboxen sind eine seltsame Art von Kontrolle: Während es sieht aus wie sie andere Steuerelemente enthalten, sie sind tatsächlich Geschwister dieser Kontrollen in den HWND Baum. So ein groupbox das aussieht wie es zwei Schaltflächen enthält, ist eigentlich ein Geschwister dieser Tasten -. Und kommen könnten, bevor oder nachdem sie in der HWND Hierarchie

Gruppen Boxen reagieren auf WM_NCHITTEST mit HT_TRANSPARENT, so dass Mausklicks direkt durch sie gehen. Ein Vorteil davon ist, dass es keine Rolle, ob die Gruppe Box kommt vor oder nach den Kontrollen, dass es in dem Fenster, um zu enthalten scheint; die Klicks werden von diesen Kontrollen Ende geführt bis zu werden, nicht die groupbox.

Doppelklick Um (oder einfach Klick) auf dem groupbox zu arbeiten, dann würden Sie müssen zwei Dinge tun:

  • überschreiben die Standard WM_NCHITTEST Verhalten und stattdessen HT_CLIENT zurückkehren, wie eine regelmäßige Kontrolle
  • ; An dieser Stelle soll es zu bekommen WM_LBUTTONDOWN und damit verbundene Ereignisse der Lage sein, die nicht an anderer Stelle gegangen wären (zu einem Geschwister oder zum Dialog selbst).
  • sicherzustellen, dass der Inhalt des groupbox kommt * vor * es in der HWND z-Reihenfolge, so dass sie nicht mehr auf Klicks unter Berufung gehen ‚durch‘ die groupbox. (Zumindest ich glaube, Sie wollen, dass sie sein, bevor;. Oder so, müssen Sie mit der HWND Bestellung jetzt spielen, dass es wieder signifikant ist)

Beachten Sie, dass dies eine andere Art von Transparenz ist wieder aus dem WS_EX_TRANSPARENT, das, was sein könnte, das Transparent Class Wizard Eigenschaft zuordnet. Grob vereinfacht, HT_TRANSPARENT hat mit transparent an die Maus zu tun; WS_EX_TRANSPARENT ist mehr über die letzten so gemalt, dass Geschwister „durchscheinen“.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top