Kalender - Rechtsklick abfangen?
-
Guten Morgen miteinander,
ich wollte gern wissen wie & wo ich beim Kalender ein Rechtsklick abfangen kann.
Etwas genauer:
Ich verwende den Windows Standard-Kalender (SysMonthCal32).
Bei einem Rechtsklick in den Kalender (über die angezeigten Tage)
öffnet sich ein Kontextmenü mit dem Eintrag "Gehe zu heute".
Das Kontextmenü würde ich gerne um meine eigenen Einträge erweitern.Wie mache ich das am besten?

(Wie mach ich das überhaupt?)
Beste Grüße
a4
-
Schau doch mal einfach zuerst, ob das Parent, oder der Owner, WM_CONTEXTMENU als Nachricht erhalten. Wen ja kanst Du die Nachricht einfach selbst behandeln.
Schau Dir das Ganze evtl. mit Spy++ an.
-
Hallo und Vielen Dank ersteinmal für den Denkanstoß.
Ich hab mich schon auf das Ergebnis gefreut und es gleich mal ausprobiert.
Leider komm ich so anscheinend nicht weiter.Ich habe das KalenderControl auf einem Dialogfenster (parent) zu sitzen und
bekomme im Dialogfenster natürlich nur ein WM_CONTEXTMENU wenn ich
ausserhalb des Kalenders aber noch innerhalb des Dialogfensters rechts-klicke.Ein Rechtsklick auf den Kalender löst eine solche Meldung anscheinend nicht aus

Da bekomme ich statt meiner Test-MsgBox nur das originale Kalender-Kontext-Menü angezeigt
(mit dem einzigen Eintrag: "Gehe zu heute").Hab ich nen Denfehler? Ich weiss gerade echt nicht wie ich den Rechtsklick abfangen kann.

Beste Grüße
a4
-
Wahrscheinlich bleibt dir nichts anderes übrig, als das Kalender-Control zu subclassen.
Falls du nicht weißt, wie man subclassed, hier ein Beispiel:
#define PROP_ORGPROC "OrgProc" . . . // Subclassen (nach Erstellen des Kalenders hCalWnd) SetProp (hCalWnd, PROP_ORGPROC, (HANDLE)GetWindowLong (hCalWnd, GWL_WNDPROC)); SetWindowLong (hCalWnd, GWL_WNDPROC, (LONG)CalenderWndProc); . . . // Subclassing aufheben (vor Zerstören des Kalenders hCalWnd) SetWindowLong (hCalWnd, GWL_WNDPROC, (LONG)GetProp (hCalWnd, PROP_ORGPROC)); RemoveProp (hCalWnd, PROP_ORGPROC); // Subclassing-Window-Prozedur für den Kalender LRESULT CALLBACK CalenderWndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CONTEXTMENU: // benutzerdefinierte Aktion durchführen return 0; } return CallWindowProc ((WNDPROC)GetProp (hWnd, ORGPROC), hWnd, uMsg, wParam, lParam); }
-
Hallo A3,
vielen Dank für deine Antwort.
Und das sogar mit Bsp-Code *Super*Nach Copy&Paste von deinem Bsp. klappt es - so wie es soll.
Ich werd mir nochmal meinen Cpp-Grundkurs aus dem Bücherregal schnappen
*schäm_mich_icon_fehlt*PS: hast n coolen nick
