<?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[Invalidate und OnDraw]]></title><description><![CDATA[<p>Hallo,<br />
bei mir tritt ein komisches Verhalten der Zeichenfläche auf, wenn ich Objekte zeichnen will. Geometrien sind vorgegeben. Ich öffne einen Dialog und beim schließen durch OnOk sollen die Objekte gezeichnet werden durch die Funktion Invalidate bzw. InvalidateRect. Das hat auch bisher geklappt.</p>
<p>In diesem Dialog habe ich jetzt eine Funktion zum verschieben der Objekte eingebaut, nur nachdem ich ihn wieder schließen will, werden bei bestimmten Werten z.B. 7000 in y-Richtung die Objekte abgeschnitten und bei anderen Werten in die gleiche Richtung z.B. 5000 nicht.</p>
<p>Wenn ich scrolle werden sie weiterhin abgeschnitten gezeichnet. Wenn ich aber das Fenster verkleinere oder vergrößere, werden die Objekte plötzlich richtig gezeichnet.</p>
<p>Hat jemand eine Vorstellung, woran es liegen kann, dass sie einmal korrekt und ein anderes mal nicht korrekt dargestellt werden?</p>
<p>MapMode ist HIMETRIC.</p>
<pre><code class="language-cpp">void CProgView::OnEditBodies() //Dialogaufruf
{
	CSonicwavesDoc* pDoc	= GetDocument();
	Dialog_Bodies			aDlg;							//Creates a Dialog_Bodies Object

	aDlg.pBody_List			= pDoc-&gt;pStorage-&gt;GET_BODY_LIST();	//creates Pointer to BodyList of Storage Object
	aDlg.pStorage			= pDoc-&gt;pStorage;						//Gives Adress of Storage Object to Pointer pStorage in aDlg

	aDlg.DoModal();												//Dialog always active until closed

	CRect rect;
	this-&gt;GetWindowRect(rect);
	InvalidateRect(rect,1);
}
</code></pre>
<pre><code class="language-cpp">void Dialog_Bodies::OnOK() //Dialog schließen
{
	CDialog::OnOK();
	int i;
	for (i = 0; i&lt;pStorage-&gt;GET_MAX_BODIES(); i++)
	{
		if(pStorage-&gt;GET_POINTER_TO_BODY(i)-&gt;GET_BODY_ACTIVE() == true)
		{
			pStorage-&gt;GET_POINTER_TO_BODY(i)-&gt;CALC_BODY_POINTS_TO_SYS();
			pStorage-&gt;GET_POINTER_TO_BODY(i)-&gt;SET_POINTS_TO_LINES();
			//pStorage-&gt;GET_POINTER_TO_BODY(i)-&gt;LINE_CONNECTION_TESTER();
		}
	}
	pStorage-&gt;FILL_LINE_LIST_WITH_BODIES();

//Beides versucht, gleiches Ergebnis:
	//CRect rect;
	//this-&gt;GetActiveWindow()-&gt;GetWindowRect(rect);
	//InvalidateRect(rect,0);
	Invalidate(0);

}
</code></pre>
<p>Danke schonmal für Ideen.<br />
Besten Gruß<br />
Kyp</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/186642/invalidate-und-ondraw</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 06:15:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/186642.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 11 Jul 2007 04:45:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Invalidate und OnDraw on Wed, 11 Jul 2007 04:45:55 GMT]]></title><description><![CDATA[<p>Hallo,<br />
bei mir tritt ein komisches Verhalten der Zeichenfläche auf, wenn ich Objekte zeichnen will. Geometrien sind vorgegeben. Ich öffne einen Dialog und beim schließen durch OnOk sollen die Objekte gezeichnet werden durch die Funktion Invalidate bzw. InvalidateRect. Das hat auch bisher geklappt.</p>
<p>In diesem Dialog habe ich jetzt eine Funktion zum verschieben der Objekte eingebaut, nur nachdem ich ihn wieder schließen will, werden bei bestimmten Werten z.B. 7000 in y-Richtung die Objekte abgeschnitten und bei anderen Werten in die gleiche Richtung z.B. 5000 nicht.</p>
<p>Wenn ich scrolle werden sie weiterhin abgeschnitten gezeichnet. Wenn ich aber das Fenster verkleinere oder vergrößere, werden die Objekte plötzlich richtig gezeichnet.</p>
<p>Hat jemand eine Vorstellung, woran es liegen kann, dass sie einmal korrekt und ein anderes mal nicht korrekt dargestellt werden?</p>
<p>MapMode ist HIMETRIC.</p>
<pre><code class="language-cpp">void CProgView::OnEditBodies() //Dialogaufruf
{
	CSonicwavesDoc* pDoc	= GetDocument();
	Dialog_Bodies			aDlg;							//Creates a Dialog_Bodies Object

	aDlg.pBody_List			= pDoc-&gt;pStorage-&gt;GET_BODY_LIST();	//creates Pointer to BodyList of Storage Object
	aDlg.pStorage			= pDoc-&gt;pStorage;						//Gives Adress of Storage Object to Pointer pStorage in aDlg

	aDlg.DoModal();												//Dialog always active until closed

	CRect rect;
	this-&gt;GetWindowRect(rect);
	InvalidateRect(rect,1);
}
</code></pre>
<pre><code class="language-cpp">void Dialog_Bodies::OnOK() //Dialog schließen
{
	CDialog::OnOK();
	int i;
	for (i = 0; i&lt;pStorage-&gt;GET_MAX_BODIES(); i++)
	{
		if(pStorage-&gt;GET_POINTER_TO_BODY(i)-&gt;GET_BODY_ACTIVE() == true)
		{
			pStorage-&gt;GET_POINTER_TO_BODY(i)-&gt;CALC_BODY_POINTS_TO_SYS();
			pStorage-&gt;GET_POINTER_TO_BODY(i)-&gt;SET_POINTS_TO_LINES();
			//pStorage-&gt;GET_POINTER_TO_BODY(i)-&gt;LINE_CONNECTION_TESTER();
		}
	}
	pStorage-&gt;FILL_LINE_LIST_WITH_BODIES();

//Beides versucht, gleiches Ergebnis:
	//CRect rect;
	//this-&gt;GetActiveWindow()-&gt;GetWindowRect(rect);
	//InvalidateRect(rect,0);
	Invalidate(0);

}
</code></pre>
<p>Danke schonmal für Ideen.<br />
Besten Gruß<br />
Kyp</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322705</guid><dc:creator><![CDATA[kyp]]></dc:creator><pubDate>Wed, 11 Jul 2007 04:45:55 GMT</pubDate></item><item><title><![CDATA[Reply to Invalidate und OnDraw on Wed, 11 Jul 2007 04:52:17 GMT]]></title><description><![CDATA[<p>PS: Wenn ich die Funktion Invalidate(1) ans Ende der OnEditButton() Funktion setze funktionierts wieder. Trotzdem tritt jetzt bei mir die Frage auf, warum durch die Funktion InvalidateRect(rect,1) mit</p>
<pre><code class="language-cpp">CRect rect;
rect = this-&gt;GetWindowRect(rect);
</code></pre>
<p>nicht das komplette Feld neu gezeichnet wurde. Verstehe ich diese Funktion falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322709</guid><dc:creator><![CDATA[kyp]]></dc:creator><pubDate>Wed, 11 Jul 2007 04:52:17 GMT</pubDate></item></channel></rss>