<?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[Flackern]]></title><description><![CDATA[<p>hi,</p>
<p>ich zeichne in eine TreeView eine verschiebbare horizontale Linie. Immer wenn ich die verschiebe, flackert es extrem.</p>
<p>ich habe versucht das ganze mit WM_SETREDRAW zu umgehen, das geht aber nicht:<br />
(das Gerüst der Funktion habe ich aus nem Proj ausm INet)</p>
<pre><code class="language-cpp">[code]void CPropertyTreeClassView::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
	// was das ganze hier so recht zu sagen ist ist mir nicht ganz klar
	// siehe http://www.mimec.org/articles/mctree
	NMCUSTOMDRAW* pNMCustomDraw = (NMCUSTOMDRAW*)pNMHDR;
	NMTVCUSTOMDRAW* pNMTVCustomDraw = (NMTVCUSTOMDRAW*)pNMHDR;

	switch (pNMCustomDraw-&gt;dwDrawStage)
	{
	case CDDS_PREPAINT:
		*pResult = CDRF_NOTIFYITEMDRAW;
		break;

	case CDDS_ITEMPREPAINT:
		*pResult = CDRF_DODEFAULT | CDRF_NOTIFYPOSTPAINT;
		break;

	case CDDS_ITEMPOSTPAINT:
		{
			HTREEITEM hItem = (HTREEITEM)pNMCustomDraw-&gt;dwItemSpec;
			CRect rcItem = pNMCustomDraw-&gt;rc;

			if (rcItem.IsRectEmpty())
			{
				// nothing to paint
				*pResult = CDRF_DODEFAULT;
				break;
			}
SendMessage(WM_SETREDRAW, 0);
			CDC dc;
			dc.Attach(pNMCustomDraw-&gt;hdc);

			// ----------------------------------------------
			// sooooooo, ab hier beginnt der Zeichenspaß :D
			// ----------------------------------------------

			// damit die Line genau im Fenster liegt
			CRect Rect;
			GetWindowRect(&amp;Rect);

			// Rect ist zur Zeit noch in Bildschirm und nicht in Fensterkoordinaten angegeben
			Rect.bottom -= Rect.top;
			Rect.top = 0;

			Rect.left = ColPos-LineWidth;
			Rect.right = ColPos;

			// Farbe festlegen
			CBrush Brush(DisplacePos != 1?DisplaceLineColor:LineColor);

			// und zeichnen
			dc.FillRect(&amp;Rect,&amp;Brush);

			dc.Detach();

			SendMessage(WM_SETREDRAW, 1);
			RedrawWindow(0, 0, RDW_ERASE |
							RDW_INVALIDATE |
							RDW_ALLCHILDREN |
							RDW_UPDATENOW);

		}
		*pResult = CDRF_DODEFAULT;
		break;

	default:
		*pResult = CDRF_DODEFAULT;
	}
}[/code]
</code></pre>
<p>das resultiert nämlich nur darin, das die Linie gar nicht (bzw. nur ganz kurz) gezeichnet wird.</p>
<p>spricht, Meister!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/160765/flackern</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Jul 2026 22:49:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/160765.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 29 Sep 2006 06:54:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Flackern on Fri, 29 Sep 2006 06:54:26 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>ich zeichne in eine TreeView eine verschiebbare horizontale Linie. Immer wenn ich die verschiebe, flackert es extrem.</p>
<p>ich habe versucht das ganze mit WM_SETREDRAW zu umgehen, das geht aber nicht:<br />
(das Gerüst der Funktion habe ich aus nem Proj ausm INet)</p>
<pre><code class="language-cpp">[code]void CPropertyTreeClassView::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
	// was das ganze hier so recht zu sagen ist ist mir nicht ganz klar
	// siehe http://www.mimec.org/articles/mctree
	NMCUSTOMDRAW* pNMCustomDraw = (NMCUSTOMDRAW*)pNMHDR;
	NMTVCUSTOMDRAW* pNMTVCustomDraw = (NMTVCUSTOMDRAW*)pNMHDR;

	switch (pNMCustomDraw-&gt;dwDrawStage)
	{
	case CDDS_PREPAINT:
		*pResult = CDRF_NOTIFYITEMDRAW;
		break;

	case CDDS_ITEMPREPAINT:
		*pResult = CDRF_DODEFAULT | CDRF_NOTIFYPOSTPAINT;
		break;

	case CDDS_ITEMPOSTPAINT:
		{
			HTREEITEM hItem = (HTREEITEM)pNMCustomDraw-&gt;dwItemSpec;
			CRect rcItem = pNMCustomDraw-&gt;rc;

			if (rcItem.IsRectEmpty())
			{
				// nothing to paint
				*pResult = CDRF_DODEFAULT;
				break;
			}
SendMessage(WM_SETREDRAW, 0);
			CDC dc;
			dc.Attach(pNMCustomDraw-&gt;hdc);

			// ----------------------------------------------
			// sooooooo, ab hier beginnt der Zeichenspaß :D
			// ----------------------------------------------

			// damit die Line genau im Fenster liegt
			CRect Rect;
			GetWindowRect(&amp;Rect);

			// Rect ist zur Zeit noch in Bildschirm und nicht in Fensterkoordinaten angegeben
			Rect.bottom -= Rect.top;
			Rect.top = 0;

			Rect.left = ColPos-LineWidth;
			Rect.right = ColPos;

			// Farbe festlegen
			CBrush Brush(DisplacePos != 1?DisplaceLineColor:LineColor);

			// und zeichnen
			dc.FillRect(&amp;Rect,&amp;Brush);

			dc.Detach();

			SendMessage(WM_SETREDRAW, 1);
			RedrawWindow(0, 0, RDW_ERASE |
							RDW_INVALIDATE |
							RDW_ALLCHILDREN |
							RDW_UPDATENOW);

		}
		*pResult = CDRF_DODEFAULT;
		break;

	default:
		*pResult = CDRF_DODEFAULT;
	}
}[/code]
</code></pre>
<p>das resultiert nämlich nur darin, das die Linie gar nicht (bzw. nur ganz kurz) gezeichnet wird.</p>
<p>spricht, Meister!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1146311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1146311</guid><dc:creator><![CDATA[ESS_CB]]></dc:creator><pubDate>Fri, 29 Sep 2006 06:54:26 GMT</pubDate></item><item><title><![CDATA[Reply to Flackern on Fri, 29 Sep 2006 10:15:24 GMT]]></title><description><![CDATA[<p>Lass bitte den ganzen Quark mit</p>
<pre><code class="language-cpp">SendMessage(WM_SETREDRAW, 0);
</code></pre>
<p>und ganz besonders diesen Code weg:</p>
<pre><code class="language-cpp">SendMessage(WM_SETREDRAW, 1);
            RedrawWindow(0, 0, RDW_ERASE |
                            RDW_INVALIDATE |
                            RDW_ALLCHILDREN |
                            RDW_UPDATENOW);
</code></pre>
<p>Du bist während des Customdraw in der WM_PAINT Routine. Du kannst Dich darin nicht ein erneutes Zeichnen sofort erzwingen und vor allem nach belieben den Redraw ein und ausschalten.</p>
<p>Was hast Du Dir den bei diesem Code gedacht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1146454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1146454</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 29 Sep 2006 10:15:24 GMT</pubDate></item><item><title><![CDATA[Reply to Flackern on Fri, 29 Sep 2006 10:59:30 GMT]]></title><description><![CDATA[<p>ESS_CB schrieb:</p>
<blockquote>
<p>Immer wenn ich die verschiebe, flackert es extrem.</p>
</blockquote>
<p>vieleicht dieses Flackern wegzubekommen?? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1146475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1146475</guid><dc:creator><![CDATA[ESS_CB]]></dc:creator><pubDate>Fri, 29 Sep 2006 10:59:30 GMT</pubDate></item><item><title><![CDATA[Reply to Flackern on Fri, 29 Sep 2006 14:38:51 GMT]]></title><description><![CDATA[<p>Du malst im Moment direkt auf den Screen. Versuche mal in einen MemDC zu malen und am Ende mit BitBlt den Kram auf den Schirm zu bringen.</p>
<p>Hier ein hint:<br />
<a href="http://www.google.de/search?hl=de&amp;q=Offscreen+Drawing+DC+CreateCompatibleDC&amp;meta=" rel="nofollow">http://www.google.de/search?hl=de&amp;q=Offscreen+Drawing+DC+CreateCompatibleDC&amp;meta=</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1146625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1146625</guid><dc:creator><![CDATA[NickHappy]]></dc:creator><pubDate>Fri, 29 Sep 2006 14:38:51 GMT</pubDate></item><item><title><![CDATA[Reply to Flackern on Fri, 29 Sep 2006 15:00:40 GMT]]></title><description><![CDATA[<p>Also um so mehr ich mir diesen Code ansehe, umso schlimmer ist er.<br />
Wieso malst Du eigentlich über das rectangle hinaus, dass Du im custom draw angeboten bekommst?<br />
Wieso GetWindowRect? GetClientRect wäre korrekt.</p>
<p>Regel: Das Customdraw gibt Dir die Koordinaten in die Du Zeichnen sollst. Es wäre fatal über diese Bereiche hinaus zu zeichnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1146636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1146636</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 29 Sep 2006 15:00:40 GMT</pubDate></item><item><title><![CDATA[Reply to Flackern on Sat, 30 Sep 2006 07:48:56 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/35992">@Martin</a> Richter</p>
<p>ESS_CB schrieb:</p>
<blockquote>
<p>ich zeichne in eine TreeView eine verschiebbare horizontale Linie.</p>
</blockquote>
<p>meinst du nicht dass das eher bescheiden aussieht, wenn diese Linie nur so groß ist wie die aktuellen Items, ach ja ja ja .... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>ach übrigens, weißer (!!) Herr, das Flickern ist davon auch noch lange nicht weg!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1146871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1146871</guid><dc:creator><![CDATA[ESS_CB]]></dc:creator><pubDate>Sat, 30 Sep 2006 07:48:56 GMT</pubDate></item><item><title><![CDATA[Reply to Flackern on Sat, 30 Sep 2006 08:07:37 GMT]]></title><description><![CDATA[<p>Ich werde wahnsinnig, selbst wenn ich das Linienzeichnen komplett weglasse, und nur die Items neuzeichne flackert es noch. Aber bei nem ListControl flackert doch auch nichts, wenn ich die Reiter verschiebe und trotzdm wandert der TExt mit ??!!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1146874</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1146874</guid><dc:creator><![CDATA[ESS_CB]]></dc:creator><pubDate>Sat, 30 Sep 2006 08:07:37 GMT</pubDate></item><item><title><![CDATA[Reply to Flackern on Sat, 30 Sep 2006 14:21:43 GMT]]></title><description><![CDATA[<p>Dann bleibt die Frage was Du in Deinem Mausmove Code machst. Führst Du dort ein Invalidate auf das ganze Fenster durch? Dann würde es mich nicht wundern, dass es flackert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1147031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1147031</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sat, 30 Sep 2006 14:21:43 GMT</pubDate></item><item><title><![CDATA[Reply to Flackern on Sun, 01 Oct 2006 11:34:42 GMT]]></title><description><![CDATA[<p>ok, hat sich.</p>
<p>thx wenn ich nur die entsprechenden Bereiche invalidate() gehts außreichend gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1147343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1147343</guid><dc:creator><![CDATA[ESS_CB]]></dc:creator><pubDate>Sun, 01 Oct 2006 11:34:42 GMT</pubDate></item></channel></rss>