<?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[Beim verschieben des Kreises findet kein refresh stat]]></title><description><![CDATA[<p>Hallo<br />
ich habe ein Kreis den ich in Größe ändern kann, und den ich bewegen kann. Hier tritt auch der Fehler ein. Jede Bewegung wird gezeichnet, so dass am ende viele Kreise zu sehen sind (siehe Bild).<a href="http://www.informatik.fh-wiesbaden.de/~wreid001/prog.jpg" rel="nofollow">http://www.informatik.fh-wiesbaden.de/~wreid001/prog.jpg</a><br />
Weiß kein Rat mehr was ich da machen kann.<br />
Bin für jede Hilfe dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/171262/beim-verschieben-des-kreises-findet-kein-refresh-stat</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 09:29:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171262.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 24 Jan 2007 00:11:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Beim verschieben des Kreises findet kein refresh stat on Wed, 24 Jan 2007 00:11:51 GMT]]></title><description><![CDATA[<p>Hallo<br />
ich habe ein Kreis den ich in Größe ändern kann, und den ich bewegen kann. Hier tritt auch der Fehler ein. Jede Bewegung wird gezeichnet, so dass am ende viele Kreise zu sehen sind (siehe Bild).<a href="http://www.informatik.fh-wiesbaden.de/~wreid001/prog.jpg" rel="nofollow">http://www.informatik.fh-wiesbaden.de/~wreid001/prog.jpg</a><br />
Weiß kein Rat mehr was ich da machen kann.<br />
Bin für jede Hilfe dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215656</guid><dc:creator><![CDATA[wreid]]></dc:creator><pubDate>Wed, 24 Jan 2007 00:11:51 GMT</pubDate></item><item><title><![CDATA[Reply to Beim verschieben des Kreises findet kein refresh stat on Wed, 24 Jan 2007 00:14:23 GMT]]></title><description><![CDATA[<p>Und wie ist das Kreise-Zeichnen implementiert? in der <strong>CMyDerivedWnd::OnDraw(..)</strong> oder wie, wo, was?</p>
<p>Gruss, Gio</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215658</guid><dc:creator><![CDATA[Gio]]></dc:creator><pubDate>Wed, 24 Jan 2007 00:14:23 GMT</pubDate></item><item><title><![CDATA[Reply to Beim verschieben des Kreises findet kein refresh stat on Wed, 24 Jan 2007 01:01:05 GMT]]></title><description><![CDATA[<p>Kreis zeichnen geschieht beim mir in der Funktion DrawObject()</p>
<pre><code class="language-cpp">void CSplitterTestView::DrawObject(int object)
{
	CDC *pDC;
	pDC = new CClientDC(this);
	HDC Ovlhdc = pDC-&gt;GetSafeHdc(); 

	switch(object)
	{
	case NONE: Invalidate();
		   UpdateWindow();
		   break;

	case CIRCLE: drawcircle(Ovlhdc,true);
		     break;		
	}
}
</code></pre>
<p>hier erzeuge ich ein CClientDC objekt welches ich dann weiter an drawcircle weiter reiche.</p>
<pre><code class="language-cpp">void CSplitterTestView::drawcircle(HDC hdc,bool Visible)
{
	if(Visible)
	{
		//Lösche altes Objekt:		
		Clipper.right = Clipper.right - 5;
		Clipper.bottom= Clipper.bottom - 5;
		//Zeichne neuen Kreis:		DrawEllipseWCross(hdc,GraphObject-&gt;GetCirclePosInt(0,TablePos).x,GraphObject-&gt;GetCirclePosInt(0,TablePos).y,GraphObject-&gt;GetCircleRadiusInt(0),Clipper);
	}
	else
	{
		Invalidate();
		UpdateWindow();
	}
}
</code></pre>
<p>hier prüfe ich ob ich einen Kreis gemalt hatte oder nicht, in DrawEllipseWCross() setze ich zum malen.</p>
<pre><code class="language-cpp">void CSplitterTestView::DrawEllipseWCross(HDC hdc,int CenterX,int CenterY,int radius,RECT Clipper)
{
	//Kreis zeichnen:
	DrawEllipse(hdc,CenterX,CenterY,radius,Clipper, DrawingColor);

	// Kreiskreuz wird gezeichnet
	DrawLine(hdc,CenterX-((int)(radius*CIRCLE_LINE_DISTANCE) /3),CenterY,
				CenterX+((int)(radius*CIRCLE_LINE_DISTANCE /3)),CenterY,
				Clipper,ReferencingColor);
	DrawLine(hdc,CenterX,CenterY-((int)(radius*CIRCLE_LINE_DISTANCE) /3),
				CenterX,CenterY+((int)(radius*CIRCLE_LINE_DISTANCE) /3),
				Clipper,ReferencingColor);

	//Folgendes zeichnet Ein Kreiskreuz mit ausgelassener Mitte:
	DrawLine(hdc,CenterX-((int)(radius*CIRCLE_LINE_DISTANCE)),CenterY,
				CenterX-radius+((int)(radius*CIRCLE_LINE_DISTANCE)),CenterY,
				Clipper, ReferencingColor);
	DrawLine(hdc,CenterX+((int)(radius*CIRCLE_LINE_DISTANCE)),CenterY,
	     		CenterX+radius-((int)(radius*CIRCLE_LINE_DISTANCE)),CenterY,
				Clipper, ReferencingColor);
	DrawLine(hdc,CenterX,CenterY-((int)(radius*CIRCLE_LINE_DISTANCE)),
				CenterX,CenterY-radius+((int)(radius*CIRCLE_LINE_DISTANCE)),
				Clipper, ReferencingColor);
	DrawLine(hdc,CenterX,CenterY+((int)(radius*CIRCLE_LINE_DISTANCE)),
				CenterX,CenterY+radius-((int)(radius*CIRCLE_LINE_DISTANCE)),
				Clipper,ReferencingColor);
}
</code></pre>
<p>DrawEllipse() zeichnet mir den Kreis und DrawLine() Koordinatenkreuz im Kreis</p>
<pre><code class="language-cpp">void CSplitterTestView::DrawEllipse(HDC hdc,int CenterX,int CenterY,int radius,RECT Clipper,COLORREF color)
{
	int steps = CIRLCE_DRAWING_ACCURACY*360 +1;
	int i;
	CPen tempcolor(PS_SOLID,1,color);
	SelectObject(hdc,tempcolor);
	//Kreispunkteberechnen:
	for (i=0;i&lt;steps;i++)//TODO:Optimiereung und clipping!
	{
		CirclePoints[i].x = round(cos(i/CIRLCE_DRAWING_ACCURACY * (2*PI/360)) * radius + CenterX);
		CirclePoints[i].y = round(-sin(i/CIRLCE_DRAWING_ACCURACY * (2*PI/360)) * radius + CenterY);
	}
	//Kreispunkte verbinden / Kreis zeichen:
	for (i=0;i&lt;steps-1;i++)
	{
		MoveToEx(hdc,CirclePoints[i].x,CirclePoints[i].y,NULL);
		if(CirclePoints[i+1].x &lt; Clipper.right	&amp;&amp;
		   CirclePoints[i+1].x &gt; Clipper.left	&amp;&amp;
		   CirclePoints[i+1].y &gt; Clipper.top	&amp;&amp;
		   CirclePoints[i+1].y &lt; Clipper.bottom)
		   if(CirclePoints[i].x &lt; Clipper.right &amp;&amp;
			  CirclePoints[i].x &gt; Clipper.left	&amp;&amp;
			  CirclePoints[i].y &gt; Clipper.top	&amp;&amp;
			  CirclePoints[i].y &lt; Clipper.bottom)
				LineTo(hdc,CirclePoints[i+1].x,CirclePoints[i+1].y);
	}
}
</code></pre>
<p>DrawLine werde ich jetzt mal auslassen, geschiet im wesentlichen das gleiche wie im DrawEllipse(). Beim verschieben oder ändern des Kreises geschieht das Problem.<br />
Ich glaube in der Funktion OnMouseMove() wird der Fehler verursacht.</p>
<pre><code class="language-cpp">void CSplitterTestView::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Code für die Behandlungsroutine für Nachrichten hier einfügen und/oder Standard aufrufen
	switch(t_SelectedTool)
	{
	case NONE:
		break;
	case CIRCLE://Mauszeiger über dem Kreis: Cursor switchen:
				if(!(nFlags==MK_LBUTTON) &amp;&amp; !(nFlags==MK_RBUTTON) || RESIZE_MODE || REPOS_MODE!=NONE)
				{
					if(PointerInCircle(point) &amp;&amp; PointerAtCircleCross(point) == NONE)
						SetCursor(LoadCursor(NULL, IDC_SIZEALL)); 
					switch (PointerAtCircleBorder(point))
					{
					case TOP:			SetCursor(LoadCursor(NULL, IDC_SIZENS)); break;
					case TOP_RIGHT:		SetCursor(LoadCursor(NULL, IDC_SIZENESW)); break;
					case RIGHT:			SetCursor(LoadCursor(NULL, IDC_SIZEWE)); break;
					case BOTTOM_RIGHT:	SetCursor(LoadCursor(NULL, IDC_SIZENWSE)); break;
					case BOTTOM:		SetCursor(LoadCursor(NULL, IDC_SIZENS)); break;
					case BOTTOM_LEFT:	SetCursor(LoadCursor(NULL, IDC_SIZENESW)); break;
					case LEFT:			SetCursor(LoadCursor(NULL, IDC_SIZEWE)); break;
					case TOP_LEFT:		SetCursor(LoadCursor(NULL, IDC_SIZENWSE)); break;
					}
					switch(PointerAtCircleCross(point))
					{
					case CIRCLE_CROSS_HORIZONTAL:	SetCursor(LoadCursor(NULL, IDC_SIZENS));break;
					case CIRCLE_CROSS_VERTIKAL:	SetCursor(LoadCursor(NULL, IDC_SIZEWE));break;
					}
				}
				//LMB Down im Kreis: Verschieben des Kreises:
				if(nFlags==MK_LBUTTON &amp;&amp; PointerInCircle(point) &amp;&amp; !RESIZE_MODE &amp;&amp; REPOS_MODE==NONE)
				{
					SetCursor(LoadCursor(NULL,IDC_SIZEALL));
					//CirclePos = point;
					CirclePos.x = point.x - PointerOffset.x;
					CirclePos.y = point.y - PointerOffset.y;
					GraphObject-&gt;SetCirclePos(point.x,point.y,0,TablePos);
					DrawObject(CIRCLE);
					Actualize();
				}
				//LMB auf Kreiskreuz: Verschieben in einer Dimension:
				if(REPOS_MODE!=NONE/*nFlags==MK_LBUTTON &amp;&amp; PointerAtCircleCross(point)!=NONE &amp;&amp; !RESIZE_MODE*/)
				{
					POINT oldpos = GraphObject-&gt;GetCirclePosInt(0,TablePos);
					switch(REPOS_MODE)
					{
					case CIRCLE_CROSS_VERTIKAL	:	CirclePos.x = point.x;
													CirclePos.y = oldpos.y;
													GraphObject-&gt;SetCirclePos(point.x,oldpos.y,0,TablePos);
													break;
														//GraphObject-&gt;SetCirclePos(point.x,oldpos.y,0,TablePos);break;
					case CIRCLE_CROSS_HORIZONTAL:	CirclePos.x = oldpos.x;
													CirclePos.y = point.y;
													GraphObject-&gt;SetCirclePos(oldpos.x,point.y,0,TablePos);
													break;
													//CirclePos.x = GraphObject-&gt;SetCirclePos(oldpos.x,point.y,0,TablePos);break;
					case NONE				: break;
					}
					DrawObject(CIRCLE);
					Actualize();
				}

				//LMB Down auf dem Kreisrand: Größe / Radius ändern:
				if(RESIZE_MODE)
				{
					//Neuen Radius berechnen:
					int newRadius = (int)(sqrt(pow(point.x-GraphObject-&gt;GetCirclePosInt(0,TablePos).x,2) + pow(point.y-GraphObject-&gt;GetCirclePosInt(0,TablePos).y,2)));
					GraphObject-&gt;SetCircleRadius(newRadius,0,TablePos);
					DrawObject(CIRCLE);
					Actualize();
				}
				break;
</code></pre>
<p>so hier muss der Fehler irgendwo liegen.<br />
Gruß wreid</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215664</guid><dc:creator><![CDATA[wreid]]></dc:creator><pubDate>Wed, 24 Jan 2007 01:01:05 GMT</pubDate></item><item><title><![CDATA[Reply to Beim verschieben des Kreises findet kein refresh stat on Wed, 24 Jan 2007 07:38:04 GMT]]></title><description><![CDATA[<p>Nein! Du verwendest Windows einfach falsch!</p>
<p>Deine Mal-Operationen liegen alle in Deinem Maushandler.<br />
Diese sollten aber in OnDraw stattfinden! Diese zentrale Routine wird immer aufgerufen wenn irgendetwas in Deinem Fenster neu gezeichnet werden muss, weil z.B. ein anderes Fenster, Dein Fenster nicht mehr verdeckt.</p>
<p>In OnMouseMove solltest Du nur noch Invalidate aufrufen oder die direkten interaktivem Zeichenoperationen durchführen. Das eigentliche Zeichnen sollte/muss immer in WM_PAINT Handler (OnDraw) stattfinden!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215714</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 24 Jan 2007 07:38:04 GMT</pubDate></item><item><title><![CDATA[Reply to Beim verschieben des Kreises findet kein refresh stat on Wed, 24 Jan 2007 09:00:45 GMT]]></title><description><![CDATA[<p>Hallo<br />
wenn ich dich richtig verstehe, schlägst du vor, alle Mal-Operationen aus OnDraw zu tätigen. Das heißt, das ich DrawObject nicht mehr benötige, und sein Inhalt in OnDraw stellen kann. Dann verstehe ich nicht wozu man eigentlich CClientDC erzeugen kann um z.B in OnLButtonDown einen Rechteck zu zeichnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215755</guid><dc:creator><![CDATA[wreid]]></dc:creator><pubDate>Wed, 24 Jan 2007 09:00:45 GMT</pubDate></item><item><title><![CDATA[Reply to Beim verschieben des Kreises findet kein refresh stat on Wed, 24 Jan 2007 09:29:58 GMT]]></title><description><![CDATA[<p>Ja! Alle Mal-Operationen gehören nach OnDraw!</p>
<p>Zum CCLientDC:<br />
Weil es temporäre Mal-Aktionen geben kann, die z.B. nur bei einer Mausaktion stattfinden (Drag&amp;Drop), oder weil gleitende Updates ohne Nachrichtenschleife benötigst, oder WM_PAINT subclassed und an den PaintDC nicht herankommst... Millionen Gründe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215771</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 24 Jan 2007 09:29:58 GMT</pubDate></item><item><title><![CDATA[Reply to Beim verschieben des Kreises findet kein refresh stat on Wed, 24 Jan 2007 10:04:01 GMT]]></title><description><![CDATA[<p>Ich bin sehr weit vorgeschritten mit meinem code und kein es nicht mehr so leicht ändern, wird mir nicht so leicht sein es zu ändern. in ondraw habe ich vor einzelne Bilder sowie livebilder auszugeben die ich aus einer Kamera erhalte. deshalb hat ic h vor in einer Funktion drawobject alle anderen mal-Operationen zu tätigen.<br />
ich habe vor in einem bild etwas zu vermessen. kreis-Funktion dient dazu um kreise zu vermessen, später kommt winkel-Funktion dazu, damit kann ich winkel im bild messen. dazu habe ich im Fenster zwei ebenen eingebaut. erste ebene dient für die bilder und die andere ebene für mess Funktionen.</p>
<pre><code class="language-cpp">_____________________________________
|          Fenster                    |
|   ____________________              |
|  |  Bildebene         |             |
|  |       _____________|______       |
|  |      |  Messebene  |      |      |
|  |      |             |      |      |
|  |      |             |      |      |
|  |      |             |      |      |
|  |      |             |      |      |
|  |      |             |      |      |
|  |______|_____________|      |      |
|         |                    |      |
|         |____________________|      |
|                                     |
|_____________________________________|
</code></pre>
<p>Dieses Bild soll ein wenig deutlich zeigen, was ich vor habe. wenn ich jetzt in der bildebene lade und die kres-funktion lade, erhalte ich bei bewegen des kreises dieses unschönes effekt.<br />
gibts ne funktion die veranlasst das der kreis neu gezeichnet wird, aber die bildeben bestehen bleibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215800</guid><dc:creator><![CDATA[wreid]]></dc:creator><pubDate>Wed, 24 Jan 2007 10:04:01 GMT</pubDate></item><item><title><![CDATA[Reply to Beim verschieben des Kreises findet kein refresh stat on Wed, 24 Jan 2007 10:08:26 GMT]]></title><description><![CDATA[<p>falls du lust hat mein code anzuschauen, hier ist der link<br />
<a href="http://www.informatik.fh-wiesbaden.de/~wreid001/SDraw.rar" rel="nofollow">http://www.informatik.fh-wiesbaden.de/~wreid001/SDraw.rar</a><br />
freue mich für jede idee</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215804</guid><dc:creator><![CDATA[wreid]]></dc:creator><pubDate>Wed, 24 Jan 2007 10:08:26 GMT</pubDate></item><item><title><![CDATA[Reply to Beim verschieben des Kreises findet kein refresh stat on Wed, 24 Jan 2007 12:25:03 GMT]]></title><description><![CDATA[<p>Es spielt keine Rolle was Du zeichnest. Dir muss nur klar sein:<br />
Nur wenn Du in OnDraw zeichnest ist garantiert, dass in alen Fällen auch wieder alle Informationen angezeigt werden.</p>
<p>Wenn zum Beispiel Dein Fenster minimiert und wieder maximiert wird, dann wird ein WM_PAINT versendet. Du musst nun alles wieder Zeichnen was notwendig ist, und das muss in OnDraw passieren.</p>
<p>Egal welche Layer Du hier vorhast. Das Du hier unterschiedliche Schichten zeichnest ist doch egal. Mach es in OnDraw!</p>
<p>Wenn ein Teil Deines Programmes nun etwas verändert ruft er nur Invalidate aus, was wiederum eine neue WM_PAINT Nachricht versendet und OnDraw sorgt für das Neuzeichnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215919</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 24 Jan 2007 12:25:03 GMT</pubDate></item></channel></rss>