<?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[Wiederholtes Zeichnen]]></title><description><![CDATA[<p>Hallo<br />
Ich bin recht neu in C++ und noch neuer in der WinAPI und habe bis jetzt nur mit Online Tutorials gearbeitet(Buch kommt bald). Es kann daher gut sein das meine Frage in euren Ohren ziemlich bescheuert kling.</p>
<p>So zu meiner Frage:</p>
<p>Ich habe ein kleines Programm geschrieben, dass Räuber-Beute-Beziehungen berechnet und diese dann in einem Koordinatensystem graphisch darstellt.<br />
Man gibt die Werte ein, klickt auf &quot;Berechnen&quot; und er zeigt das Schaubild an.</p>
<p><a href="http://img145.imageshack.us/my.php?image=clipboard02rf1.jpg" rel="nofollow">Hier gibts ein Bild</a></p>
<p>Soweit so gut.<br />
Doch das Problem ist, dass wen ich das zweite mal auf &quot;Berechnen&quot; drücke, dass dann nichts passiert nichts.<br />
Am liebsten währe mir, dass mein Programm wen man dass zweite mal drückt die ersten beiden Linien löscht und die neuen Zeichnet.</p>
<p>Hier mal mein WM_PAINT:</p>
<pre><code class="language-cpp">case WM_PAINT:
    {

		 PAINTSTRUCT    ps;
		 HDC            hDC;

         hDC = BeginPaint(hWnd, &amp;ps);
		 if(zeichne == true)
		 {

			 static POINT    point1;
		     static POINT    point2;
		     double bes1;
		     double bes2;
		     double zu1;
		     double zu2;
		     double ab1;
		     double ab2;
		     double besneu1;
		     double besneu2;
		     double strecken1;
		     double strecken2;
		     char edit[10];
		     char edit2[10];
		     char edit3[10];
		     char edit4[10];
		     char edit5[10];
		     char edit6[10];
		     char editstrecken1[10];
		     char editstrecken2[10];

			GetWindowText(hEdit, edit, 10);
			GetWindowText(hEdit2, edit2, 10);
			GetWindowText(hEdit3, edit3, 10);
			GetWindowText(hEdit4, edit4, 10);
			GetWindowText(hEdit5, edit5, 10);
			GetWindowText(hEdit6, edit6, 10);
			GetWindowText(hstrecken1, editstrecken1, 10);
			GetWindowText(hstrecken2, editstrecken2, 10);

			bes1 = atof (edit);
			zu1 = atof (edit2);
			ab1 = atof (edit3);
			bes2 = atof (edit4);
			zu2 = atof (edit5);
			ab2 = atof (edit6);
			strecken1 = atof (editstrecken1);
			strecken2 = atof (editstrecken2);
			if(strecken1 == 0);
			{
				strecken1 = 1;
			}
			if(strecken2 == 0)
			{
				strecken2 = 1;
			}	
			while(zaehlen&lt;51)
			{
				besneu1 = bes1 + (zu1 * bes1 - ab1 * bes1 * bes2);
				besneu2 = bes2 + (zu2 * bes2 * bes1 - ab2 * bes2);

				HPEN hOldPen = (HPEN)SelectObject(hDC, 
										 CreatePen(PS_SOLID, 3, RGB(227, 29, 41)));
				if(zaehlen == 1)
				{
				    MoveToEx(hDC, 30, 570 - bes1*strecken1*1.6, NULL);
				}
				else
				{
					MoveToEx(hDC, point1.x, point1.y, NULL);
				}
				LineTo(hDC, 30+zaehlen*15, 570-besneu1*strecken1*1.6);
			    point1.x = 30+zaehlen*15;
				point1.y = 570-besneu1*strecken1*1.6;
				DeleteObject(SelectObject(hDC, hOldPen));

				HPEN hOldPen2 = (HPEN)SelectObject(hDC, 
										 CreatePen(PS_SOLID, 3, RGB(0, 255, 0)));
				if(zaehlen == 1)
				{
				    MoveToEx(hDC, 30, 570 - bes2*strecken2*1.6, NULL);
				}
				else
				{
					MoveToEx(hDC, point2.x, point2.y, NULL);
				}
				LineTo(hDC, 30+zaehlen*15, 570-besneu2*strecken2*1.6);
	            point2.x = 30+zaehlen*15;
				point2.y = 570-besneu2*strecken2*1.6;
				DeleteObject(SelectObject(hDC, hOldPen2));

				bes1 = besneu1;
				bes2 = besneu2;
				zaehlen += 1;
			}

			EndPaint(hWnd, &amp;ps);
			zeichne = false;
			return 0;
			}

		}
</code></pre>
<p>zeichne wird true wenn der Button gedrückt wird<br />
(Das zeichnen des Koordinatensystemes habe ich mal drausen gelassen)</p>
<p>Ich bedanke mich schonmal im voraus.</p>
<p>MFG Tim</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/233036/wiederholtes-zeichnen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Apr 2026 02:50:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/233036.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 30 Jan 2009 14:58:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wiederholtes Zeichnen on Fri, 30 Jan 2009 15:12:41 GMT]]></title><description><![CDATA[<p>Hallo<br />
Ich bin recht neu in C++ und noch neuer in der WinAPI und habe bis jetzt nur mit Online Tutorials gearbeitet(Buch kommt bald). Es kann daher gut sein das meine Frage in euren Ohren ziemlich bescheuert kling.</p>
<p>So zu meiner Frage:</p>
<p>Ich habe ein kleines Programm geschrieben, dass Räuber-Beute-Beziehungen berechnet und diese dann in einem Koordinatensystem graphisch darstellt.<br />
Man gibt die Werte ein, klickt auf &quot;Berechnen&quot; und er zeigt das Schaubild an.</p>
<p><a href="http://img145.imageshack.us/my.php?image=clipboard02rf1.jpg" rel="nofollow">Hier gibts ein Bild</a></p>
<p>Soweit so gut.<br />
Doch das Problem ist, dass wen ich das zweite mal auf &quot;Berechnen&quot; drücke, dass dann nichts passiert nichts.<br />
Am liebsten währe mir, dass mein Programm wen man dass zweite mal drückt die ersten beiden Linien löscht und die neuen Zeichnet.</p>
<p>Hier mal mein WM_PAINT:</p>
<pre><code class="language-cpp">case WM_PAINT:
    {

		 PAINTSTRUCT    ps;
		 HDC            hDC;

         hDC = BeginPaint(hWnd, &amp;ps);
		 if(zeichne == true)
		 {

			 static POINT    point1;
		     static POINT    point2;
		     double bes1;
		     double bes2;
		     double zu1;
		     double zu2;
		     double ab1;
		     double ab2;
		     double besneu1;
		     double besneu2;
		     double strecken1;
		     double strecken2;
		     char edit[10];
		     char edit2[10];
		     char edit3[10];
		     char edit4[10];
		     char edit5[10];
		     char edit6[10];
		     char editstrecken1[10];
		     char editstrecken2[10];

			GetWindowText(hEdit, edit, 10);
			GetWindowText(hEdit2, edit2, 10);
			GetWindowText(hEdit3, edit3, 10);
			GetWindowText(hEdit4, edit4, 10);
			GetWindowText(hEdit5, edit5, 10);
			GetWindowText(hEdit6, edit6, 10);
			GetWindowText(hstrecken1, editstrecken1, 10);
			GetWindowText(hstrecken2, editstrecken2, 10);

			bes1 = atof (edit);
			zu1 = atof (edit2);
			ab1 = atof (edit3);
			bes2 = atof (edit4);
			zu2 = atof (edit5);
			ab2 = atof (edit6);
			strecken1 = atof (editstrecken1);
			strecken2 = atof (editstrecken2);
			if(strecken1 == 0);
			{
				strecken1 = 1;
			}
			if(strecken2 == 0)
			{
				strecken2 = 1;
			}	
			while(zaehlen&lt;51)
			{
				besneu1 = bes1 + (zu1 * bes1 - ab1 * bes1 * bes2);
				besneu2 = bes2 + (zu2 * bes2 * bes1 - ab2 * bes2);

				HPEN hOldPen = (HPEN)SelectObject(hDC, 
										 CreatePen(PS_SOLID, 3, RGB(227, 29, 41)));
				if(zaehlen == 1)
				{
				    MoveToEx(hDC, 30, 570 - bes1*strecken1*1.6, NULL);
				}
				else
				{
					MoveToEx(hDC, point1.x, point1.y, NULL);
				}
				LineTo(hDC, 30+zaehlen*15, 570-besneu1*strecken1*1.6);
			    point1.x = 30+zaehlen*15;
				point1.y = 570-besneu1*strecken1*1.6;
				DeleteObject(SelectObject(hDC, hOldPen));

				HPEN hOldPen2 = (HPEN)SelectObject(hDC, 
										 CreatePen(PS_SOLID, 3, RGB(0, 255, 0)));
				if(zaehlen == 1)
				{
				    MoveToEx(hDC, 30, 570 - bes2*strecken2*1.6, NULL);
				}
				else
				{
					MoveToEx(hDC, point2.x, point2.y, NULL);
				}
				LineTo(hDC, 30+zaehlen*15, 570-besneu2*strecken2*1.6);
	            point2.x = 30+zaehlen*15;
				point2.y = 570-besneu2*strecken2*1.6;
				DeleteObject(SelectObject(hDC, hOldPen2));

				bes1 = besneu1;
				bes2 = besneu2;
				zaehlen += 1;
			}

			EndPaint(hWnd, &amp;ps);
			zeichne = false;
			return 0;
			}

		}
</code></pre>
<p>zeichne wird true wenn der Button gedrückt wird<br />
(Das zeichnen des Koordinatensystemes habe ich mal drausen gelassen)</p>
<p>Ich bedanke mich schonmal im voraus.</p>
<p>MFG Tim</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1655065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1655065</guid><dc:creator><![CDATA[char_Tim*4**]]></dc:creator><pubDate>Fri, 30 Jan 2009 15:12:41 GMT</pubDate></item><item><title><![CDATA[Reply to Wiederholtes Zeichnen on Fri, 30 Jan 2009 15:22:59 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">case button_malen_gedrückt:
{
   RECT rec;
   DeleteDC(hDC); - dc löschen
   GetClientRect(hWnd, &amp;rec); - fenster infos in rc speichern
   InvalidateRect(hWnd, &amp;rec, true); -  fenster neu malen

}break;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1655073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1655073</guid><dc:creator><![CDATA[blah123]]></dc:creator><pubDate>Fri, 30 Jan 2009 15:22:59 GMT</pubDate></item><item><title><![CDATA[Reply to Wiederholtes Zeichnen on Fri, 30 Jan 2009 16:08:53 GMT]]></title><description><![CDATA[<p>Also es wird jetzt zwar gelöscht aber danach zeichnet sich nur das Koordinatensystem das ich auch in WM_PAINT zeichne neu gezeichnet, aber die Linien nicht.</p>
<pre><code class="language-cpp">case WM_PAINT:
    {

         PAINTSTRUCT    ps;
         HDC            hDC;

         hDC = BeginPaint(hWnd, &amp;ps);
         if(zeichne == true)
         {

             ...Zeichnen(siehe oben)...

            EndPaint(hWnd, &amp;ps);

            DeleteDC(hDC); &lt;-- änderung

            zeichne = false;
            return 0;
            }

         }
</code></pre>
<p>und der Code der im Button steht:</p>
<pre><code class="language-cpp">zeichne = true;
RECT rec; 
GetClientRect(hWnd, &amp;rec);
InvalidateRect(hWnd, &amp;rec, true);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1655086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1655086</guid><dc:creator><![CDATA[char_Tim*4**]]></dc:creator><pubDate>Fri, 30 Jan 2009 16:08:53 GMT</pubDate></item><item><title><![CDATA[Reply to Wiederholtes Zeichnen on Fri, 30 Jan 2009 16:17:58 GMT]]></title><description><![CDATA[<p>setz da mal ein InvalidateRect(hWnd, 0, 1) rein.</p>
<p>und deletedc ist falsch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1655096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1655096</guid><dc:creator><![CDATA[helferlein]]></dc:creator><pubDate>Fri, 30 Jan 2009 16:17:58 GMT</pubDate></item><item><title><![CDATA[Reply to Wiederholtes Zeichnen on Fri, 30 Jan 2009 16:19:43 GMT]]></title><description><![CDATA[<p>So?:</p>
<pre><code class="language-cpp">zeichne = true;
InvalidateRect(hWnd, 0, 1);
</code></pre>
<p>Da ist es wieder so, dass die Linien verschwinden aber sich dann nicht neu Zeichnen. Nur das Koordinatensystem.</p>
<p>Vielleicht bringt es ja was wenn ihr den kompletten Code seht:<br />
<a href="http://gist.github.com/55122" rel="nofollow">Klick mich</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1655099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1655099</guid><dc:creator><![CDATA[char_Tim*4**]]></dc:creator><pubDate>Fri, 30 Jan 2009 16:19:43 GMT</pubDate></item><item><title><![CDATA[Reply to Wiederholtes Zeichnen on Sun, 01 Feb 2009 07:43:55 GMT]]></title><description><![CDATA[<p>Mir fällt so spontan auf das du zaehlen nicht neu setzt, &quot;while(zaehlen&lt;51)&quot; wird wenn ich das richtig sehe daher nur 1x durchlaufen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1655784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1655784</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Sun, 01 Feb 2009 07:43:55 GMT</pubDate></item><item><title><![CDATA[Reply to Wiederholtes Zeichnen on Sun, 01 Feb 2009 12:45:47 GMT]]></title><description><![CDATA[<p>Super Danke das wars.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1655909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1655909</guid><dc:creator><![CDATA[char_Tim*4**]]></dc:creator><pubDate>Sun, 01 Feb 2009 12:45:47 GMT</pubDate></item></channel></rss>