<?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[ClipCursor bei Mausbewegung]]></title><description><![CDATA[<p>Hi an alle,</p>
<p>ich zermatere mir schon den ganzen tag das Hirn wie ich es mit ClipCursor in OnMouseMove und allem hinbekomme, das ich bei geklickter linker Maustaste und Mausbewegung den Effekt hinbekomme wie z.B. im Windows Explorer, wenn ich zwischen der Baumansicht(links) und der Liste(rechts) die Größe modifiziere.</p>
<p>Mein Problem ist, dass der Cursor sich halt an einer Position festfrisst und dann nicht mehr mitbekommt wenn ich wieder in die andere Richtung gehe.</p>
<p>Hier mal etwas von meinem Code</p>
<pre><code class="language-cpp">if(m_bIsPressed)
{
	//Bewegung nach rechts
	if(point.x &gt; m_noldCursorPos)
	{
		if(crSubject.Width() &gt; (m_nDefWidthSubjectView / 2))
		{
			nDiff = point.x - crContact.right;
			crSubject.SetRect(crSubject.left + nDiff, crSubject.top, crSubject.right, crSubject.bottom);
			m_wndSubjectView.MoveWindow(&amp;crSubject);	
			crContact.SetRect(crContact.left, crContact.top, crContact.right + nDiff, crContact.bottom);
			m_wndContactView.MoveWindow(&amp;crContact);
			ClientToScreen(&amp;crContact);
			ClientToScreen(&amp;crSubject);
			crClickArea.left = crContact.right;
			crClickArea.right = crSubject.left;
			crClickArea.top = crContact.top;
			crClickArea.bottom = crContact.bottom;
			ClientToScreen(&amp;point);
			ScreenToClient(&amp;point);
			if(!ClipCursor(&amp;crClickArea))
			   dwErr = GetLastError();
			ScreenToClient(&amp;crContact);
			ScreenToClient(&amp;crSubject);
		}
	}
	//Bewegung nach Links
	else if(point.x &lt; m_noldCursorPos - 1)
	{
		if(crContact.Width() &gt; (m_nDefWidthContactView / 2))
		{
			nDiff = point.x - crSubject.left;
			crSubject.SetRect(crSubject.left + nDiff, crSubject.top, crSubject.right, crSubject.bottom);
			m_wndSubjectView.MoveWindow(&amp;crSubject);
			crContact.SetRect(crContact.left, crContact.top, crContact.right + nDiff, crContact.bottom);
			m_wndContactView.MoveWindow(&amp;crContact);
			ClientToScreen(&amp;crContact);
			ClientToScreen(&amp;crSubject);
			crClickArea.left = crContact.right;
			crClickArea.right = crSubject.left;
			crClickArea.top = crContact.top;
			crClickArea.bottom = crContact.bottom;
			if(!ClipCursor(&amp;crClickArea))
			   dwErr = GetLastError();
			ScreenToClient(&amp;crContact);
			ScreenToClient(&amp;crSubject);
		}
	}
}
</code></pre>
<p>Ich weiß so wie ich es dort mache ist es sicherlich falsch.</p>
<p>In google kann ich leider nichts genaues finden.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/240919/clipcursor-bei-mausbewegung</link><generator>RSS for Node</generator><lastBuildDate>Mon, 06 Apr 2026 04:07:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/240919.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 13 May 2009 14:00:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ClipCursor bei Mausbewegung on Wed, 13 May 2009 14:08:11 GMT]]></title><description><![CDATA[<p>Hi an alle,</p>
<p>ich zermatere mir schon den ganzen tag das Hirn wie ich es mit ClipCursor in OnMouseMove und allem hinbekomme, das ich bei geklickter linker Maustaste und Mausbewegung den Effekt hinbekomme wie z.B. im Windows Explorer, wenn ich zwischen der Baumansicht(links) und der Liste(rechts) die Größe modifiziere.</p>
<p>Mein Problem ist, dass der Cursor sich halt an einer Position festfrisst und dann nicht mehr mitbekommt wenn ich wieder in die andere Richtung gehe.</p>
<p>Hier mal etwas von meinem Code</p>
<pre><code class="language-cpp">if(m_bIsPressed)
{
	//Bewegung nach rechts
	if(point.x &gt; m_noldCursorPos)
	{
		if(crSubject.Width() &gt; (m_nDefWidthSubjectView / 2))
		{
			nDiff = point.x - crContact.right;
			crSubject.SetRect(crSubject.left + nDiff, crSubject.top, crSubject.right, crSubject.bottom);
			m_wndSubjectView.MoveWindow(&amp;crSubject);	
			crContact.SetRect(crContact.left, crContact.top, crContact.right + nDiff, crContact.bottom);
			m_wndContactView.MoveWindow(&amp;crContact);
			ClientToScreen(&amp;crContact);
			ClientToScreen(&amp;crSubject);
			crClickArea.left = crContact.right;
			crClickArea.right = crSubject.left;
			crClickArea.top = crContact.top;
			crClickArea.bottom = crContact.bottom;
			ClientToScreen(&amp;point);
			ScreenToClient(&amp;point);
			if(!ClipCursor(&amp;crClickArea))
			   dwErr = GetLastError();
			ScreenToClient(&amp;crContact);
			ScreenToClient(&amp;crSubject);
		}
	}
	//Bewegung nach Links
	else if(point.x &lt; m_noldCursorPos - 1)
	{
		if(crContact.Width() &gt; (m_nDefWidthContactView / 2))
		{
			nDiff = point.x - crSubject.left;
			crSubject.SetRect(crSubject.left + nDiff, crSubject.top, crSubject.right, crSubject.bottom);
			m_wndSubjectView.MoveWindow(&amp;crSubject);
			crContact.SetRect(crContact.left, crContact.top, crContact.right + nDiff, crContact.bottom);
			m_wndContactView.MoveWindow(&amp;crContact);
			ClientToScreen(&amp;crContact);
			ClientToScreen(&amp;crSubject);
			crClickArea.left = crContact.right;
			crClickArea.right = crSubject.left;
			crClickArea.top = crContact.top;
			crClickArea.bottom = crContact.bottom;
			if(!ClipCursor(&amp;crClickArea))
			   dwErr = GetLastError();
			ScreenToClient(&amp;crContact);
			ScreenToClient(&amp;crSubject);
		}
	}
}
</code></pre>
<p>Ich weiß so wie ich es dort mache ist es sicherlich falsch.</p>
<p>In google kann ich leider nichts genaues finden.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1709989</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1709989</guid><dc:creator><![CDATA[mr. main]]></dc:creator><pubDate>Wed, 13 May 2009 14:08:11 GMT</pubDate></item><item><title><![CDATA[Reply to ClipCursor bei Mausbewegung on Thu, 14 May 2009 06:25:06 GMT]]></title><description><![CDATA[<p>mr. main schrieb:</p>
<blockquote>
<p>ich zermatere mir schon den ganzen tag das Hirn wie ich es mit ClipCursor in OnMouseMove und allem hinbekomme, das ich bei geklickter linker Maustaste und Mausbewegung den Effekt hinbekomme wie z.B. im Windows Explorer, wenn ich zwischen der Baumansicht(links) und der Liste(rechts) die Größe modifiziere.</p>
</blockquote>
<p>Und was ist da Dein Problem. Der Explorer clipped den Cursor nicht!<br />
Wenn mit der Maus auf den Splitter geklickt wird, wird en Maus Capture gesetz (SetCapture), ab dann (so lange die Maustaste unten ist) werden alle Mausnachrichten an das Fenster (Splitter) gesendet. ClipCursor wird nicht verwendet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710246</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 14 May 2009 06:25:06 GMT</pubDate></item><item><title><![CDATA[Reply to ClipCursor bei Mausbewegung on Thu, 14 May 2009 07:17:41 GMT]]></title><description><![CDATA[<p>Also zuerst ich benutze kein CSplitterWnd.<br />
Ich nutze beim Mausklick schon SetCapture,<br />
wenn ich dann aber ohne ClipCursor arbeite<br />
wandert der Cursor zu weit und verliert den<br />
Bereich innerhalb dessen er angeklickt wird.</p>
<p>Der Aufbau ist so, dass eine von CWnd abgeleitete<br />
Klasse den Bereich bildet in welchen die Steuerelement<br />
eingebracht sind.</p>
<p>Beim Klicken mit der Maus prüfe ich halt, ob die<br />
Position zwischen meinen 2 Steuerelementen liegt.<br />
Sollte dem so sein, dann prüfe ich die Richtung in<br />
welche die Maus bewegt wird und verändere dementsprechend<br />
die Größe beider Steuerelemente.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710271</guid><dc:creator><![CDATA[mr. main]]></dc:creator><pubDate>Thu, 14 May 2009 07:17:41 GMT</pubDate></item><item><title><![CDATA[Reply to ClipCursor bei Mausbewegung on Thu, 14 May 2009 08:28:38 GMT]]></title><description><![CDATA[<p>Es geht viel einfacher, wenn Du nur die Größe (oder die Lage) der Steuerelemente begrenzt.<br />
Lasse den Mauscursor einfach dahin bewegen wie der User ihn mit der Maus bewegt.</p>
<p>Zum Vergleich: Alle Scrollbalken des Fensters (auch die im Windows Explorer!) verhalten sich so, nämlich die Lage der Scrollbalken wird begrenzt, aber der Mauscursor selbst befindet sich bereits über die Fenstergrenzen hinweg weit außerhalb...</p>
<p>Weitere Beispiele:<br />
Word 2003 und Excel 2003: Beim Verschieben der Tabulatoren (jeweils oberhalb des Arbeitsblatts) wird der Mauscursor nicht geclippt.<br />
Total Commander, auch dort wird beim Splitter der Mauscursor nicht geclippt.</p>
<p>Ich meine nur, damit kann man auch gut leben (ich betrachte das Clippen beim Explorer-Splitter als Ausnahme, ehrlich gesagt das war mir in meinen ganzen Jahren Windows-Nutzung überhaupt nicht aufgefallen)</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710300</guid><dc:creator><![CDATA[Mmacher]]></dc:creator><pubDate>Thu, 14 May 2009 08:28:38 GMT</pubDate></item><item><title><![CDATA[Reply to ClipCursor bei Mausbewegung on Thu, 14 May 2009 08:39:03 GMT]]></title><description><![CDATA[<p>Qualm <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Nu bin ich etwas überfragt.<br />
Wie meinst du das mit dem begrenzen der LAge(Größe) der Steuerelemente?<br />
Das ganze soll ja dynamisch bleiben wenn ich z.B. die Größe des Hauptfensters<br />
ändere sollen die Steuerelemente dementspechend auch größer bzw. kleiner werden.<br />
Stört ein Begrenzung dabei nicht eher?</p>
<p>Und wie schaffe ich wie schaffe ich es dass der Mauscursor praktisch nicht vergisst das er im Moment der Bewegung bei geklickter Maustaste nicht vergisst, das er noch mit dem Bereich verbunden ist der praktisch die Splitting Area darstellt? Derzeit habe ich ja noch das Problem dass dies trotz SetCapture passiert. Wenn er zu weit von dem Splitting Bereich weggezogen wurde dann verliert er irgendwie diese Information.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710302</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710302</guid><dc:creator><![CDATA[mr. main]]></dc:creator><pubDate>Thu, 14 May 2009 08:39:03 GMT</pubDate></item><item><title><![CDATA[Reply to ClipCursor bei Mausbewegung on Thu, 14 May 2009 09:40:37 GMT]]></title><description><![CDATA[<p>Du meinst doch in etwa so wie resizeable Dialogboxen? z.B.:<br />
&quot;CResizableDialog&quot; <a href="http://www.codeproject.com/KB/dialog/resizabledialog.aspx" rel="nofollow">http://www.codeproject.com/KB/dialog/resizabledialog.aspx</a><br />
Dort ist auch eine lauffähige Demoversion.<br />
[EDIT]: Es spielt hier keine Rolle, was für ein Steuerelement (Splitter, Button, Fenster, Dialog, ... ) in der Größe oder in der Lage verändert wird. Es geht ja nur um das Clippen oder nicht Clippen des Mauscursors.</p>
<p>mr. main schrieb:</p>
<blockquote>
<p>Wenn er zu weit von dem Splitting Bereich weggezogen wurde dann verliert er irgendwie diese Information.</p>
</blockquote>
<p>Das kann nicht sein, da machst Du was falsch.<br />
Solange Du den Mauscursor mit SetCapture() übernommen hast, gehen keine Informationen verloren.</p>
<p>Folgende Tipps könnten Dir dabei weiterhelfen:<br />
-<em>SetCapture()</em> captures mouse input either when the mouse is over the capturing window, or when the mouse button was pressed while the mouse was over the capturing window and the button is still down. Only the foreground window and only one window at a time can capture the mouse.<br />
-Cursor-Koordinaten können auch negative Werte annehmen!<br />
-Unbedingt <em>WM_CAPTURECHANGED</em> auswerten. Wenn Du z.B. während aktivem <em>SetCapture()</em> den Alt+Tab (Task-Switch) betätigst, hat Dein Fenster den mouse capture verloren! Oder ganz allgemein, ein anderes Fenster wird in den Vordergrund gebracht... usw.</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710329</guid><dc:creator><![CDATA[Mmacher]]></dc:creator><pubDate>Thu, 14 May 2009 09:40:37 GMT</pubDate></item><item><title><![CDATA[Reply to ClipCursor bei Mausbewegung on Thu, 14 May 2009 10:04:16 GMT]]></title><description><![CDATA[<p>Das mit dem Resizen klappt ja gut bei mir. Da hab ich keinen Stress mit.<br />
Nein ich möchte sowas wie einen Splitter. Also ich habe auf einem ParentCtrl 2 Steuerelemente und der Bereich zw. den Elementen soll nun vertikal verschoben werden können halt wie oben beschrieben beim Windows Explorer zwischen den Ansichten der Ordner und der Ansicht der Inhalte des Ordners.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710356</guid><dc:creator><![CDATA[mr. main]]></dc:creator><pubDate>Thu, 14 May 2009 10:04:16 GMT</pubDate></item><item><title><![CDATA[Reply to ClipCursor bei Mausbewegung on Thu, 14 May 2009 10:47:55 GMT]]></title><description><![CDATA[<p>Aber auch beim Windows Explorer kannst Du den Cursor über den Ranbd weiter ziehen. Da wird kein Clipping gemacht.</p>
<p>Was ist denn nun Dein Problem? Wenn Du SetCapture korrekt verwendest verlierst Du keine Mausnachrichten... und Clipping ist unnötig und eher irritierend.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710380</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 14 May 2009 10:47:55 GMT</pubDate></item><item><title><![CDATA[Reply to ClipCursor bei Mausbewegung on Thu, 14 May 2009 13:09:45 GMT]]></title><description><![CDATA[<p>Oh man oh man oh man....</p>
<p>Ich könnte mich treten. Das Probelm mit SetCapture lag einzig daran, das ich das Abfragen der Bewegung des Mauszeigers und damit auch das Anpassen der Steuerelemente innerhalb der Abfrage ob die Mausposition sich im Splitting Bereich befindet. Mach ich beides für sich alleine funzt das auch mit SetCapture und ohne ClipCursor.</p>
<p>Jetzt ist es nur noch das wenn ich die Maus anhalte der Mauscursor auf die Anfangspositon zurück springen soll zumindest im x - Bereich. Kann ich da einfach SetCursorPos einsetzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710482</guid><dc:creator><![CDATA[mr. main]]></dc:creator><pubDate>Thu, 14 May 2009 13:09:45 GMT</pubDate></item></channel></rss>