<?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[Mauszeigerveränderung wird wieder zurückgesetzt]]></title><description><![CDATA[<p>Hallo,</p>
<p>in einem MFC-Programm wird bei mir ein CRectTracker-Objekt m_tracker über ein Hintergrundbild gelegt. Das Objekt kann man per Maus bewegen und größer/kleiner ziehen, dabei wird der Mauszeiger entsprechend seiner Position (gibt mir HitTest(point) zurück) in der OnMouseMove verändert:</p>
<pre><code class="language-cpp">int m_iMouseOverRect = m_tracker.HitTest(point);
		switch (m_iMouseOverRect) {
			case 0: // oben links
				SetCursor(AfxGetApp()-&gt;LoadStandardCursor(IDC_SIZENWSE)); break;
			case 1: // oben rechts
				SetCursor(AfxGetApp()-&gt;LoadStandardCursor(IDC_SIZENESW)); break;
			case 2: // unten rechts
				SetCursor(AfxGetApp()-&gt;LoadStandardCursor(IDC_SIZENWSE)); break;
			case 3: // unten links
				SetCursor(AfxGetApp()-&gt;LoadStandardCursor(IDC_SIZENESW)); break;
			case 4: // oben mitte
				SetCursor(AfxGetApp()-&gt;LoadStandardCursor(IDC_SIZENS)); break;
			case 5: // rechts mitte
				SetCursor(AfxGetApp()-&gt;LoadStandardCursor(IDC_SIZEWE)); break;
			case 6: // unten mitte
				SetCursor(AfxGetApp()-&gt;LoadStandardCursor(IDC_SIZENS)); break;
			case 7: // links mitte
				SetCursor(AfxGetApp()-&gt;LoadStandardCursor(IDC_SIZEWE)); break;
			case 8: // innerhalb der Auswahl
				SetCursor(AfxGetApp()-&gt;LoadStandardCursor(IDC_SIZEALL)); break;
			default: // Ausserhalb einer existierenden Auswahl
				SetCursor(AfxGetApp()-&gt;LoadStandardCursor(IDC_ARROW)); break;
		}
</code></pre>
<p>Das klappt auch ganz gut.<br />
Ich wollte aber gern, dass er den Cursor nur noch ändert, wenn sich am HitTest-Resultat etwas ändert - dann jedoch blinkt der neue Cursor nur kurz auf, ist dann aber durch den Standard-Cursor ersetzt und bleibt das natürlich dann bis wieder ein neuer Zustand erreicht wird.<br />
Wenn ich das wie oben implementiere (also bei jeder Mausbewegung den Cursor festlege) dann klappt es zwar, man sieht jedoch auch dort bei jeder Bewegung kurz den normalen Mauszeiger aufblinken, bis er wieder durch den jeweils aktuellen ersetzt wird. Sehr unschön und sicher nicht so gewollt.</p>
<p>In meinem Code kommt sonst nichts in Sachen Cursorsteuerung vor, ich habe alles durchsucht. Meine View-Klasse ist von CScrollView abgeleitet - gibt es dort eine Funktion die vielleicht &quot;nebenbei&quot; auch den Cursor verändert und mir so diese Probleme beschert? Ich konnte nichts dazu finden.</p>
<p>Vielen Dank für jeden Hinweis,<br />
Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/173337/mauszeigerveränderung-wird-wieder-zurückgesetzt</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 20:36:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/173337.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Feb 2007 11:48:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mauszeigerveränderung wird wieder zurückgesetzt on Wed, 14 Feb 2007 11:48:17 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>in einem MFC-Programm wird bei mir ein CRectTracker-Objekt m_tracker über ein Hintergrundbild gelegt. Das Objekt kann man per Maus bewegen und größer/kleiner ziehen, dabei wird der Mauszeiger entsprechend seiner Position (gibt mir HitTest(point) zurück) in der OnMouseMove verändert:</p>
<pre><code class="language-cpp">int m_iMouseOverRect = m_tracker.HitTest(point);
		switch (m_iMouseOverRect) {
			case 0: // oben links
				SetCursor(AfxGetApp()-&gt;LoadStandardCursor(IDC_SIZENWSE)); break;
			case 1: // oben rechts
				SetCursor(AfxGetApp()-&gt;LoadStandardCursor(IDC_SIZENESW)); break;
			case 2: // unten rechts
				SetCursor(AfxGetApp()-&gt;LoadStandardCursor(IDC_SIZENWSE)); break;
			case 3: // unten links
				SetCursor(AfxGetApp()-&gt;LoadStandardCursor(IDC_SIZENESW)); break;
			case 4: // oben mitte
				SetCursor(AfxGetApp()-&gt;LoadStandardCursor(IDC_SIZENS)); break;
			case 5: // rechts mitte
				SetCursor(AfxGetApp()-&gt;LoadStandardCursor(IDC_SIZEWE)); break;
			case 6: // unten mitte
				SetCursor(AfxGetApp()-&gt;LoadStandardCursor(IDC_SIZENS)); break;
			case 7: // links mitte
				SetCursor(AfxGetApp()-&gt;LoadStandardCursor(IDC_SIZEWE)); break;
			case 8: // innerhalb der Auswahl
				SetCursor(AfxGetApp()-&gt;LoadStandardCursor(IDC_SIZEALL)); break;
			default: // Ausserhalb einer existierenden Auswahl
				SetCursor(AfxGetApp()-&gt;LoadStandardCursor(IDC_ARROW)); break;
		}
</code></pre>
<p>Das klappt auch ganz gut.<br />
Ich wollte aber gern, dass er den Cursor nur noch ändert, wenn sich am HitTest-Resultat etwas ändert - dann jedoch blinkt der neue Cursor nur kurz auf, ist dann aber durch den Standard-Cursor ersetzt und bleibt das natürlich dann bis wieder ein neuer Zustand erreicht wird.<br />
Wenn ich das wie oben implementiere (also bei jeder Mausbewegung den Cursor festlege) dann klappt es zwar, man sieht jedoch auch dort bei jeder Bewegung kurz den normalen Mauszeiger aufblinken, bis er wieder durch den jeweils aktuellen ersetzt wird. Sehr unschön und sicher nicht so gewollt.</p>
<p>In meinem Code kommt sonst nichts in Sachen Cursorsteuerung vor, ich habe alles durchsucht. Meine View-Klasse ist von CScrollView abgeleitet - gibt es dort eine Funktion die vielleicht &quot;nebenbei&quot; auch den Cursor verändert und mir so diese Probleme beschert? Ich konnte nichts dazu finden.</p>
<p>Vielen Dank für jeden Hinweis,<br />
Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228637</guid><dc:creator><![CDATA[Martin S]]></dc:creator><pubDate>Wed, 14 Feb 2007 11:48:17 GMT</pubDate></item><item><title><![CDATA[Reply to Mauszeigerveränderung wird wieder zurückgesetzt on Tue, 24 Apr 2007 19:14:26 GMT]]></title><description><![CDATA[<p>Hast du eine Lösung gefunden? Ich stehe nämlich vor dem gleichen Problem.</p>
<p>Gruß edmundy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1272753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272753</guid><dc:creator><![CDATA[edmundy]]></dc:creator><pubDate>Tue, 24 Apr 2007 19:14:26 GMT</pubDate></item><item><title><![CDATA[Reply to Mauszeigerveränderung wird wieder zurückgesetzt on Tue, 24 Apr 2007 21:03:16 GMT]]></title><description><![CDATA[<p>Das ist &quot;by design&quot;.<br />
Guckt euch mal WM_SETCURSOR an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1272837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272837</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 24 Apr 2007 21:03:16 GMT</pubDate></item><item><title><![CDATA[Reply to Mauszeigerveränderung wird wieder zurückgesetzt on Wed, 25 Apr 2007 00:09:31 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Das ist &quot;by design&quot;.<br />
Guckt euch mal WM_SETCURSOR an.</p>
</blockquote>
<p>Ich habe dann leider immer noch das Problem, dass meine Steuerelemente in dem Fenster den Systemcursor haben. Die Änderung des Cursors im Fenster an sich funktioniert einwandfrei.<br />
Wenn ich die Änderung erzwingen will entsteht ein Flackern zwischen Systemcursor und neuem Cursor.</p>
<p>Gruß edmundy</p>
<p>Edit: return TRUE bei OnSetCursor() vergessen.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1272863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272863</guid><dc:creator><![CDATA[edmundy]]></dc:creator><pubDate>Wed, 25 Apr 2007 00:09:31 GMT</pubDate></item></channel></rss>