<?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 weiß es gibt schon ziemlich viele Beiträge zum Thema flackern.<br />
Ich hab mir jetzt auch nicht jeden einzeln genauestens angeschaut, aber ich denke, dass keiner mein Problem dazu lösen könnte...<br />
Also ich hab einen simplen Texteditor mit dem Wizard generiert, indem ich eine Klasse von CEditView abgeleitet habe. An den rechten Rand möchte ich eine Leiste zeichnen, das funktioniert auch schon ganz gut, außer, dass es etwas flackert.</p>
<p>OnPaint sieht folgendermaßen aus:</p>
<pre><code>OnPaint()
{
	int m_bottomline = 1;
	CString m_format;
	m_format = &quot;%05i&quot;;
	int m_topmargin = 1;	// Current top margin
	int m_topline = 0;		// Current top line number

	CPaintDC dcPaint( this );
	COLORREF m_fgcol = 0, m_bgcol = 16318463;
	CRect rect;
	GetClientRect( &amp;rect );
	m_bgcol = RGB(209,255,176);

	// We double buffer the drawing - 
	// preparing the memory CDC
	CDC dc;
	dc.CreateCompatibleDC( &amp;dcPaint );
	int saved = dc.SaveDC();

	// Create GDI and select objects
	CBitmap bmp;
	CPen pen;
	bmp.CreateCompatibleBitmap( &amp;dcPaint, rect.Width(), rect.Height() );
	pen.CreatePen( PS_SOLID, 1, m_fgcol );
	dc.SelectObject( &amp;bmp );
	dc.SelectObject( &amp;pen );

	// Painting the background
	dc.FillSolidRect( &amp;rect, m_bgcol );
	dc.MoveTo( rect.right - 1, 0 );
	dc.LineTo( rect.right - 1, rect.bottom );

	// Setting other attributes
	dc.SetTextColor( m_fgcol );
	dc.SetBkColor( m_bgcol );
	dc.SelectObject( GetParent()-&gt;GetFont() );
	rect.right = 100;
	dcPaint.BitBlt( 0, 0, rect. right, rect.bottom, &amp;dc, 0, 0, SRCCOPY );

	CMemDC memDC(&amp;dc, &amp;rect);
	//CMemDC pDC(&amp;dc);
    CnewceditviewDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	dc.RestoreDC( saved );
	CWnd::DefWindowProc( WM_PAINT, (WPARAM)memDC.m_hDC, 0 );

}
</code></pre>
<p>Bitte nicht erschrecken, diese Methode ist ein Beispiel von Codeproject, den ich etwas modifiziert habe.</p>
<p>Ich hab außerem noch OnKeyDown überschrieben, weil es sonst gar nicht geht:</p>
<pre><code>OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	// TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard.
	this-&gt;InvalidateRect(NULL);
	CEditView::OnKeyDown(nChar, nRepCnt, nFlags);
}
</code></pre>
<p>Jetzt ist halt das Problem, dass es bei fast jedem Zeilenumbruch flackert.<br />
Ich hab schon probiert OnEraseBkgnd zu überschreiben, das geht nur teilweise, da<br />
der Client-Bereich transpharent wird und es immer noch leicht flackert, wenn ich einen Zeilenumbruch mache.</p>
<p>Ich wäre echt für jeden Vorschlag wahnsinnig dankbar, da ich schon ziemlich viel Zeit in das Problem investiert habe und ich nicht mehr weiter komme.</p>
<p>Überhaupt wünsche ich alle frohe Ostern <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/144144/flackern</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Jul 2026 22:22:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/144144.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 15 Apr 2006 00:45:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Flackern on Sat, 15 Apr 2006 00:45:59 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich weiß es gibt schon ziemlich viele Beiträge zum Thema flackern.<br />
Ich hab mir jetzt auch nicht jeden einzeln genauestens angeschaut, aber ich denke, dass keiner mein Problem dazu lösen könnte...<br />
Also ich hab einen simplen Texteditor mit dem Wizard generiert, indem ich eine Klasse von CEditView abgeleitet habe. An den rechten Rand möchte ich eine Leiste zeichnen, das funktioniert auch schon ganz gut, außer, dass es etwas flackert.</p>
<p>OnPaint sieht folgendermaßen aus:</p>
<pre><code>OnPaint()
{
	int m_bottomline = 1;
	CString m_format;
	m_format = &quot;%05i&quot;;
	int m_topmargin = 1;	// Current top margin
	int m_topline = 0;		// Current top line number

	CPaintDC dcPaint( this );
	COLORREF m_fgcol = 0, m_bgcol = 16318463;
	CRect rect;
	GetClientRect( &amp;rect );
	m_bgcol = RGB(209,255,176);

	// We double buffer the drawing - 
	// preparing the memory CDC
	CDC dc;
	dc.CreateCompatibleDC( &amp;dcPaint );
	int saved = dc.SaveDC();

	// Create GDI and select objects
	CBitmap bmp;
	CPen pen;
	bmp.CreateCompatibleBitmap( &amp;dcPaint, rect.Width(), rect.Height() );
	pen.CreatePen( PS_SOLID, 1, m_fgcol );
	dc.SelectObject( &amp;bmp );
	dc.SelectObject( &amp;pen );

	// Painting the background
	dc.FillSolidRect( &amp;rect, m_bgcol );
	dc.MoveTo( rect.right - 1, 0 );
	dc.LineTo( rect.right - 1, rect.bottom );

	// Setting other attributes
	dc.SetTextColor( m_fgcol );
	dc.SetBkColor( m_bgcol );
	dc.SelectObject( GetParent()-&gt;GetFont() );
	rect.right = 100;
	dcPaint.BitBlt( 0, 0, rect. right, rect.bottom, &amp;dc, 0, 0, SRCCOPY );

	CMemDC memDC(&amp;dc, &amp;rect);
	//CMemDC pDC(&amp;dc);
    CnewceditviewDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	dc.RestoreDC( saved );
	CWnd::DefWindowProc( WM_PAINT, (WPARAM)memDC.m_hDC, 0 );

}
</code></pre>
<p>Bitte nicht erschrecken, diese Methode ist ein Beispiel von Codeproject, den ich etwas modifiziert habe.</p>
<p>Ich hab außerem noch OnKeyDown überschrieben, weil es sonst gar nicht geht:</p>
<pre><code>OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	// TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard.
	this-&gt;InvalidateRect(NULL);
	CEditView::OnKeyDown(nChar, nRepCnt, nFlags);
}
</code></pre>
<p>Jetzt ist halt das Problem, dass es bei fast jedem Zeilenumbruch flackert.<br />
Ich hab schon probiert OnEraseBkgnd zu überschreiben, das geht nur teilweise, da<br />
der Client-Bereich transpharent wird und es immer noch leicht flackert, wenn ich einen Zeilenumbruch mache.</p>
<p>Ich wäre echt für jeden Vorschlag wahnsinnig dankbar, da ich schon ziemlich viel Zeit in das Problem investiert habe und ich nicht mehr weiter komme.</p>
<p>Überhaupt wünsche ich alle frohe Ostern <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1037734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1037734</guid><dc:creator><![CDATA[nightrider]]></dc:creator><pubDate>Sat, 15 Apr 2006 00:45:59 GMT</pubDate></item><item><title><![CDATA[Reply to Flackern on Sat, 15 Apr 2006 15:15:13 GMT]]></title><description><![CDATA[<p>nightrider schrieb:</p>
<blockquote>
<p>Ich hab mir jetzt auch nicht jeden einzeln genauestens angeschaut, aber ich denke, dass keiner mein Problem dazu lösen könnte...</p>
</blockquote>
<p>Ich frage mich wie du auf die Idee kommst, denn da irrst du dich gewaltig.<br />
Ich empfehle mal diesen Link zu lesen:<br />
<a href="http://www.codeproject.com/cs/media/flickerfree.asp" rel="nofollow">http://www.codeproject.com/cs/media/flickerfree.asp</a></p>
<p>Im Forum gab es schon andere Lösungswege, bzw. ähnliche, aber anders geproggt usw.</p>
<p>Und noch was. Du zeichnest bei OnPaint? Also ich weiss ja nicht, aber CEditView ist ja auch von CView abgeleitet. Wäre es nicht sinnvoller bei OnDraw zu zeichnen. Denn dann hast auch schon ein CDC erstellt, musst dich also selber gar nicht mehr darum kümmern.</p>
<p>Frohe Ostern und Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1037969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1037969</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 15 Apr 2006 15:15:13 GMT</pubDate></item><item><title><![CDATA[Reply to Flackern on Sat, 15 Apr 2006 17:32:18 GMT]]></title><description><![CDATA[<p>Also ich habs jetzt mal mit einem Timer probiert, indem ich einfach die Methode<br />
SetTimer() aufgerufen habe und in OnTimer() InvalidateRect() aufgerufen habe.<br />
Leider flackert es jetzt noch mehr als zuvor.<br />
Es ist jetzt wahrscheinlich ein bisschen viel verlangt, aber wenn ihr Profis mal schnell meinen OnPaint- und OnKeyDown - Code in eine CEditView abgeleitete Anwendung stecken könntet, würdet ihr sicher auf das Problem kommen, das wäre echt super.<br />
Es ist nämlich so, dass ich das nach Möglichkeit bis Montag haben sollte...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1038036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1038036</guid><dc:creator><![CDATA[nightrider]]></dc:creator><pubDate>Sat, 15 Apr 2006 17:32:18 GMT</pubDate></item></channel></rss>