<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Kontextmenu erscheint an der falschen Stelle!!!]]></title><description><![CDATA[<p>Moin Moin.</p>
<p>Habe ein kleines MFC SDI Programm geschrieben dessen Ansicht von CrichEditView erbt.</p>
<p>Ich habe dann mit dem Klassenassistent meiner Ansicht WM_CONTEXTMENU zugefügt.<br />
Ich musste leider feststellen das OnContextMenu(CWnd* pWnd, CPoint point) gar nicht aufgerufen wird. Habe zur Kontrolle eine TRACE-Anweiseung eingefügt. Bekomme keine Ausgabe im Debuger. OnContextMenu(C... wird also nicht aufgerufen.</p>
<p>Nun habe ich mit dem Klassenassistenten die<br />
Nachricht OnRButtonDown(UINT nFlags, CPoint point) in meiner Ansicht eingefügt um dort mein Kontextmenu aufzurufen.</p>
<p>void CMyZettelView::OnRButtonDown(UINT nFlags, CPoint point)<br />
{<br />
TRACE(&quot;\nDer rechte button wurde geklickt\n\n&quot;);<br />
CMenu menu;<br />
menu.LoadMenu(IDR_MENU1);<br />
menu.GetSubMenu(0)-&gt;TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,<br />
point.x, point.y, this);<br />
CRichEditView::OnRButtonDown(nFlags, point);<br />
}</p>
<p>Jetzt erscheint das Kontextmenu und solange mein Programm den ganzen Monitor bedeckt auch an der richtigen Stelle. Wenn ich mein Ansichtsfenster aber verkleinere (sagen wir auf ein-viertel des Bildschirms)<br />
erscheint das Kontextmenu nicht mehr bei meiner Maus sondern ziemlich weit versetzt.<br />
Der Versatz ist abhängig davon wo sich die Ansicht meines Programms auf dem Monitor befindet.<br />
Ich vermute das die Koordinaten der Maus zum Zeitpunkt des Mausklicks und die Koordinaten an denen das Kontextmenu erscheint irgendwie unterscheiden.</p>
<p>Was kann ich tun?</p>
<p>plutonium2</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/166326/kontextmenu-erscheint-an-der-falschen-stelle</link><generator>RSS for Node</generator><lastBuildDate>Sat, 02 May 2026 02:06:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/166326.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 28 Nov 2006 10:45:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kontextmenu erscheint an der falschen Stelle!!! on Tue, 28 Nov 2006 10:45:00 GMT]]></title><description><![CDATA[<p>Moin Moin.</p>
<p>Habe ein kleines MFC SDI Programm geschrieben dessen Ansicht von CrichEditView erbt.</p>
<p>Ich habe dann mit dem Klassenassistent meiner Ansicht WM_CONTEXTMENU zugefügt.<br />
Ich musste leider feststellen das OnContextMenu(CWnd* pWnd, CPoint point) gar nicht aufgerufen wird. Habe zur Kontrolle eine TRACE-Anweiseung eingefügt. Bekomme keine Ausgabe im Debuger. OnContextMenu(C... wird also nicht aufgerufen.</p>
<p>Nun habe ich mit dem Klassenassistenten die<br />
Nachricht OnRButtonDown(UINT nFlags, CPoint point) in meiner Ansicht eingefügt um dort mein Kontextmenu aufzurufen.</p>
<p>void CMyZettelView::OnRButtonDown(UINT nFlags, CPoint point)<br />
{<br />
TRACE(&quot;\nDer rechte button wurde geklickt\n\n&quot;);<br />
CMenu menu;<br />
menu.LoadMenu(IDR_MENU1);<br />
menu.GetSubMenu(0)-&gt;TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,<br />
point.x, point.y, this);<br />
CRichEditView::OnRButtonDown(nFlags, point);<br />
}</p>
<p>Jetzt erscheint das Kontextmenu und solange mein Programm den ganzen Monitor bedeckt auch an der richtigen Stelle. Wenn ich mein Ansichtsfenster aber verkleinere (sagen wir auf ein-viertel des Bildschirms)<br />
erscheint das Kontextmenu nicht mehr bei meiner Maus sondern ziemlich weit versetzt.<br />
Der Versatz ist abhängig davon wo sich die Ansicht meines Programms auf dem Monitor befindet.<br />
Ich vermute das die Koordinaten der Maus zum Zeitpunkt des Mausklicks und die Koordinaten an denen das Kontextmenu erscheint irgendwie unterscheiden.</p>
<p>Was kann ich tun?</p>
<p>plutonium2</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1182940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1182940</guid><dc:creator><![CDATA[plutonium2]]></dc:creator><pubDate>Tue, 28 Nov 2006 10:45:00 GMT</pubDate></item><item><title><![CDATA[Reply to Kontextmenu erscheint an der falschen Stelle!!! on Tue, 28 Nov 2006 10:48:27 GMT]]></title><description><![CDATA[<p>ScreenToClient</p>
<p>Merk dir die Funktion gut, die braucht man dauernd!!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1182942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1182942</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Tue, 28 Nov 2006 10:48:27 GMT</pubDate></item><item><title><![CDATA[Reply to Kontextmenu erscheint an der falschen Stelle!!! on Tue, 28 Nov 2006 10:50:20 GMT]]></title><description><![CDATA[<p>OnRButtonDown() bekommt Client-Koordinaten (relativ zur linken oberen Ecke des Fensters), TrackPopupMenu() erwartet Screen-Koordinaten (relativ zur linken oberen Ecke des <strong>Bildschirms</strong>), also mußt du deine Koordinaten umrechnen.</p>
<p>(und dafür gibt es die Methode ClientToScreen())</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1182943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1182943</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 28 Nov 2006 10:50:20 GMT</pubDate></item><item><title><![CDATA[Reply to Kontextmenu erscheint an der falschen Stelle!!! on Tue, 28 Nov 2006 11:04:01 GMT]]></title><description><![CDATA[<p>Hey super.</p>
<p>Das funktioniert ja ganz toll mit ClientToScreen();.</p>
<p>Vielen Dank für die schnelle Hilfe.</p>
<p>Echt super.</p>
<p>plutonium2</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1182947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1182947</guid><dc:creator><![CDATA[plutonium2]]></dc:creator><pubDate>Tue, 28 Nov 2006 11:04:01 GMT</pubDate></item><item><title><![CDATA[Reply to Kontextmenu erscheint an der falschen Stelle!!! on Tue, 28 Nov 2006 13:00:24 GMT]]></title><description><![CDATA[<p>man hätte auch ganz einfach die curserposition nehmen können.</p>
<p>GetCursorPos(&amp;point);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183012</guid><dc:creator><![CDATA[LowFly]]></dc:creator><pubDate>Tue, 28 Nov 2006 13:00:24 GMT</pubDate></item><item><title><![CDATA[Reply to Kontextmenu erscheint an der falschen Stelle!!! on Tue, 28 Nov 2006 15:54:03 GMT]]></title><description><![CDATA[<p>Tag LowFly.<br />
Habe das mal mit der Cursoposition versucht.<br />
Geht bei mir aber nicht. Das popup erscheint immer links oben am Monitor.<br />
Ist mein Versuch so richtig oder wie hast du das gemeint?<br />
Übrigens der Cursor ist nicht immer da wo ich mit der rechten maustaste hinklicke.</p>
<p>void CMyZettelView::OnRButtonDown(UINT nFlags, CPoint point)<br />
{<br />
CPoint mp = GetCursorPos(&amp;point);<br />
CMenu menu;<br />
menu.LoadMenu(IDR_MENU1);<br />
menu.GetSubMenu(0)-&gt;TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,<br />
mp.x, mp.y, this);</p>
<p>CRichEditView::OnRButtonDown(nFlags, point);<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183184</guid><dc:creator><![CDATA[plutonium2]]></dc:creator><pubDate>Tue, 28 Nov 2006 15:54:03 GMT</pubDate></item><item><title><![CDATA[Reply to Kontextmenu erscheint an der falschen Stelle!!! on Tue, 28 Nov 2006 15:59:00 GMT]]></title><description><![CDATA[<pre><code>void CMyZettelView::OnRButtonDown(UINT nFlags, CPoint point) 
{ 
GetCursorPos(&amp;[b]point[/b]); //hier holst du dir die aktuelle curserposition
CMenu menu; 
menu.LoadMenu(IDR_MENU1); 
menu.GetSubMenu(0)-&gt;TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, 
[b]point[/b].x, [b]point[/b].y, this); 

CRichEditView::OnRButtonDown(nFlags, point); 
}
</code></pre>
<p>NEW EDIT:<br />
du brauchst nicht nochmal eine CPoint strucktur erstellen, du kannst die von OnRButtonDown verwenden du belegst mit GetCursorPos die strucktur <strong>point</strong> nur mit den aktuellen werten des cursor</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183189</guid><dc:creator><![CDATA[LowFly]]></dc:creator><pubDate>Tue, 28 Nov 2006 15:59:00 GMT</pubDate></item><item><title><![CDATA[Reply to Kontextmenu erscheint an der falschen Stelle!!! on Tue, 28 Nov 2006 22:50:03 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9213">@LowFly</a>: CPoint ist aber eine Klasse <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183462</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Tue, 28 Nov 2006 22:50:03 GMT</pubDate></item><item><title><![CDATA[Reply to Kontextmenu erscheint an der falschen Stelle!!! on Wed, 29 Nov 2006 07:42:07 GMT]]></title><description><![CDATA[<p>CodeFinder schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9213">@LowFly</a>: CPoint ist aber eine Klasse <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> .</p>
</blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12048">@CodeFinder</a>: &lt;spitzfindigkeitsmodus&gt;C++ macht keinen unterscheid zwischen struct und class. Somit ist eine Struktur (struct) implizit eine Klasse (class), bei der man sich einfach das public: sparen kann. Und eine Klasse (class) ist eine Struktur (struct) bei der man sich das private: sparen kann!&lt;/spitzfindigkeitsmodus&gt; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183537</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 29 Nov 2006 07:42:07 GMT</pubDate></item></channel></rss>