<?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[Warum flackert mein Dialog, wenn ich ihn größer ziehe?]]></title><description><![CDATA[<p>Hallo Forum,<br />
nachdem ich mein Problem mit den Buttons und Bitmaps gelöst habe, stehe ich vor dem nächsten Problem.<br />
Für meinen Dialog habe ich selbst eine Region definiert, in der der Benutzer anpacken und den Dialog größer/kleiner ziehen kann. Das funktioniert auch alles ganz wunderbar, nur flackert das ganze beim Ziehen gewaltig.<br />
Im Dialog sind nur Buttons (Klasse CPolyBtn von Codeproject), die halt neu gezeichnet werden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Danke schonmal! Ohne dieses Forum wäre ich schon oft völlig verloren gewesen!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/184207/warum-flackert-mein-dialog-wenn-ich-ihn-größer-ziehe</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Apr 2026 18:29:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/184207.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 13 Jun 2007 10:29:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Wed, 13 Jun 2007 10:29:11 GMT]]></title><description><![CDATA[<p>Hallo Forum,<br />
nachdem ich mein Problem mit den Buttons und Bitmaps gelöst habe, stehe ich vor dem nächsten Problem.<br />
Für meinen Dialog habe ich selbst eine Region definiert, in der der Benutzer anpacken und den Dialog größer/kleiner ziehen kann. Das funktioniert auch alles ganz wunderbar, nur flackert das ganze beim Ziehen gewaltig.<br />
Im Dialog sind nur Buttons (Klasse CPolyBtn von Codeproject), die halt neu gezeichnet werden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Danke schonmal! Ohne dieses Forum wäre ich schon oft völlig verloren gewesen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304709</guid><dc:creator><![CDATA[Lexaja]]></dc:creator><pubDate>Wed, 13 Jun 2007 10:29:11 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Wed, 13 Jun 2007 10:34:31 GMT]]></title><description><![CDATA[<p>Verdendest du beim zeichnen schonen eine MemoryDC Klasse, also zeichnet du erst in den Speicher? -&gt; Double Buffering</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304711</guid><dc:creator><![CDATA[HaJo.]]></dc:creator><pubDate>Wed, 13 Jun 2007 10:34:31 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Wed, 13 Jun 2007 10:39:02 GMT]]></title><description><![CDATA[<p>Also die Methode DrawItem() aus der Klasse CPolyBtn sieht so aus</p>
<pre><code>void CPolyBtn::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	CRect rect = lpDrawItemStruct-&gt;rcItem;
	CDC* pDC   = CDC::FromHandle(lpDrawItemStruct-&gt;hDC);
	UINT state = lpDrawItemStruct-&gt;itemState;
	UINT nStyle = GetStyle();

	int nSavedDC = pDC-&gt;SaveDC();

    CBrush br;
    br.CreateSolidBrush(m_clrFill);

    // fill interior
    pDC-&gt;SetPolyFillMode(ALTERNATE);
    CBrush *ob = pDC-&gt;SelectObject(&amp;br);
    pDC-&gt;Polygon(m_pPoints, m_edges.size());
    pDC-&gt;SelectObject(ob);

    pDC-&gt;SelectClipRgn(&amp;m_rgn);

    // draw bitmap
   if (m_bmpID!=0)
   {
      CPoint pos = m_bmpOffset;
      if ((state &amp; ODS_SELECTED))	
      {
         pos.x++;
         pos.y++;
      }

	  if(m_bMouseOnButton)
		_TransparentBlt(*pDC, m_bmp, pos.x, pos.y, m_clrTrans);
	  else
		_TransparentBlt(*pDC, m_bmpMouseover, pos.x, pos.y, m_clrTrans);
   }

   if ((state &amp; ODS_DISABLED) &amp;&amp; m_bmpIDD!=0)
   {
      _TransparentBlt(*pDC, m_bmpD, m_bmpOffset.x, m_bmpOffset.y, m_clrTransD);
   }

   // draw text
   CString txt;
   GetWindowText(txt);
   if (!txt.IsEmpty())
   {
      pDC-&gt;SetBkMode(TRANSPARENT);
      if ((state &amp; ODS_DISABLED))
      {
         CSize cz = pDC-&gt;GetTextExtent(txt);
         pDC-&gt;DrawState(m_textOffset, cz, txt, DSS_DISABLED, TRUE, 0, (HBRUSH)NULL);
      }
      else
      {
         CPoint pos = m_textOffset;
         if ((state &amp; ODS_SELECTED))	
         {
            pos.x++;
            pos.y++;
         }
         pDC-&gt;TextOut(pos.x, pos.y, txt);
      }
   }

   // paint the edges
   for (int i=0;i&lt;m_edges.size();i++)
   {
      int iPenStyle = PS_SOLID;

      COLORREF clr = m_edges.at(i).clr;

	  if(m_bMouseOnButton)
		  clr = m_edges.at(i).rolloverclr;
	  else 
		  clr = m_edges.at(i).focusclr;
		  /*
      if ((state &amp; ODS_SELECTED))	
      {
         clr = m_edges.at(i).downclr;
      }
      else if ((state &amp; ODS_DISABLED))
      {
         clr = m_edges.at(i).disabledclr;
      }
      else if (m_bMouseOnButton)
      {
         clr = m_edges.at(i).rolloverclr;
      }
	  */

      CPen pen(iPenStyle, 1, clr);

      CPen *opp = pDC-&gt;SelectObject(&amp;pen);

      pDC-&gt;MoveTo(m_edges.at(i).start);
      pDC-&gt;LineTo(m_edges.at(i).end);

      pDC-&gt;SelectObject(opp);
   }

   pDC-&gt;SelectClipRgn(NULL);
   pDC-&gt;RestoreDC(nSavedDC);
}
</code></pre>
<p>Ansonsten setze ich nur in OnSize() des Dialogs für jeden Button CRect neu. Die OnPaint()-Methode des Dialogs habe ich gar nicht verändert. Muss ich die Draw-Item Methode für die Buttons verändern und erst in einen MemoryDC zeichnen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304714</guid><dc:creator><![CDATA[Lexaja]]></dc:creator><pubDate>Wed, 13 Jun 2007 10:39:02 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Wed, 13 Jun 2007 10:40:19 GMT]]></title><description><![CDATA[<p>Versuch erst mal in OnEraseBkgnd FALSE zurückzugeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304715</guid><dc:creator><![CDATA[connan]]></dc:creator><pubDate>Wed, 13 Jun 2007 10:40:19 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Wed, 13 Jun 2007 10:48:33 GMT]]></title><description><![CDATA[<p>Also wenn ich in der OnEraseBkgnd() der Buttonklasse FALSE zurückgebe, ändert sich gar nichts.<br />
Gebe ich in meiner Dialogklasse bei OnEraseBkgnd() FALSE zurück, verschwindet der Hintergrund des Dialogs, d.h. es sind nur noch meine Buttons sichtbar, und außerdem verändert sich der Hintergrund des Dialogs nicht mehr, d.h. beim größer ziehen des Dialogs sieht man noch die Buttons vom kleineren Dialog usw.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304719</guid><dc:creator><![CDATA[Lexaja]]></dc:creator><pubDate>Wed, 13 Jun 2007 10:48:33 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Wed, 13 Jun 2007 10:59:04 GMT]]></title><description><![CDATA[<p>Zufällig habe ich das gleiche Problem. OnEraseBkgnd sendet als Returnwert FALSE bei mir. Mit einer Display-Buffer-Klasse arbeite ich auch. Denoch flackert meine von CButton abgeleitete Zeichenfläche beim größer ziehen.</p>
<p>Wäre es eine Lösung den Inhalt von DrawItem in OnEraseBkgnd zu schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304724</guid><dc:creator><![CDATA[alterego]]></dc:creator><pubDate>Wed, 13 Jun 2007 10:59:04 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Wed, 13 Jun 2007 11:03:47 GMT]]></title><description><![CDATA[<p>Ok, ich meinte natürlich die Dialogklasse, sorry.<br />
Flackern tut es aber erst mal nicht mehr? Jetzt könntest du in der OnPaint des Dialogs den Hintergrund selbst zeichnen (FloodFill).<br />
Was mir aber gerade noch einfällt, rufst du in der OnSize Invalidate auf?<br />
Wenn ja, versuchs mal Invalidate(FALSE);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304727</guid><dc:creator><![CDATA[connan]]></dc:creator><pubDate>Wed, 13 Jun 2007 11:03:47 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Wed, 13 Jun 2007 11:25:08 GMT]]></title><description><![CDATA[<p>Ich habe Invalidate() nicht aufgerufen. Habs gerade mal probiert, aber das ändert auch nichts leider.<br />
Ich habe jetzt folgendes in meine OnPaint()-Methode geschrieben, aber es tut sich nichts. was mache ich falsch?</p>
<pre><code>void CStartdialog3Dlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // Gerätekontext für Zeichnen

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Symbol in Client-Rechteck zentrieren
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&amp;rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Symbol zeichnen
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CRect rect;
		GetClientRect(&amp;rect);

		CPaintDC dc(this);

		dc.FloodFill(rect.left, rect.top, RGB(148,147,170));

		CDialog::OnPaint();
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1304737</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304737</guid><dc:creator><![CDATA[Lexaja]]></dc:creator><pubDate>Wed, 13 Jun 2007 11:25:08 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Wed, 13 Jun 2007 11:50:27 GMT]]></title><description><![CDATA[<p>Schau mal hier rein: <a href="http://www.codeproject.com/gdi/flickerfree.asp" rel="nofollow">http://www.codeproject.com/gdi/flickerfree.asp</a><br />
Vielleicht hilft Dir das weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304758</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Wed, 13 Jun 2007 11:50:27 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Wed, 13 Jun 2007 11:51:26 GMT]]></title><description><![CDATA[<p>Hm, ok, also ich habe nochmal ein bisschen rumprobiert und bin dabei auf das Problem gestoßen, dass mein Dialog ja nicht rechteckig ist und ich deswegen mit</p>
<pre><code>dc.FloodFill(rect.left, rect.top, RGB(148,147,170));
</code></pre>
<p>am falschen Punkt ansetze, da sich dieser Punkt gar nicht in meinem Dialog befindet. Ändere ich also auf</p>
<pre><code>CRect rect;
GetClientRect(&amp;rect);
CDC* dc = this-&gt;GetDC();
dc-&gt;FloodFill(d1.x, d2.x, RGB(148,147,170));
CDialog::OnPaint();
</code></pre>
<p>wird der Hintergrund immerhin weiß gezeichnet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304759</guid><dc:creator><![CDATA[Lexaja]]></dc:creator><pubDate>Wed, 13 Jun 2007 11:51:26 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Wed, 13 Jun 2007 12:10:27 GMT]]></title><description><![CDATA[<p>Hihi, sorry, das liegt daran, das wahscheinlich VS hinter dem Dialog liegt und dies als Hintergrund für den Dialog genommen wird. Guck mal genau da müstte auch Text stehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Lass das Floodfill in OnPaint weg und<br />
versuch mal in OnEraseBkgnd folgendes:</p>
<pre><code class="language-cpp">CRect rc;
GetClientRect(&amp;rc);
CBrush brush(RGB(148,147,170));
pDC-&gt;FillRect(&amp;rc,&amp;brush);
return TRUE;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1304777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304777</guid><dc:creator><![CDATA[connan]]></dc:creator><pubDate>Wed, 13 Jun 2007 12:10:27 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Wed, 13 Jun 2007 12:34:13 GMT]]></title><description><![CDATA[<p>connan schrieb:</p>
<blockquote>
<p>Hihi, sorry, das liegt daran, das wahscheinlich VS hinter dem Dialog liegt und dies als Hintergrund für den Dialog genommen wird. Guck mal genau da müstte auch Text stehen</p>
</blockquote>
<p>Ähm, ja, da steht auch ab und an mal Text <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Die andere Möglichkeit hab ich mal ausprobiert. Jetzt ist der Hintergrund zwar wieder farbig, aber dafür flackern doch wieder alles beim ziehen. Ich hab auch nochmal zur Kontrolle FALSE zurückgegeben und da flackert das ganze Ding nicht so <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304800</guid><dc:creator><![CDATA[Lexaja]]></dc:creator><pubDate>Wed, 13 Jun 2007 12:34:13 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Wed, 13 Jun 2007 12:53:17 GMT]]></title><description><![CDATA[<p>Ja, man muss, glaube ich, auch FALSE zurückgeben (hab nicht nachgeschaut <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> ).<br />
Aber jetzt dürften zumindest nur noch die Buttons flackern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304816</guid><dc:creator><![CDATA[connan]]></dc:creator><pubDate>Wed, 13 Jun 2007 12:53:17 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Wed, 13 Jun 2007 13:02:12 GMT]]></title><description><![CDATA[<p>Tja, ich weiß nicht so genau was da flackert! Alles irgendwie <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304828</guid><dc:creator><![CDATA[Lexaja]]></dc:creator><pubDate>Wed, 13 Jun 2007 13:02:12 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Wed, 13 Jun 2007 13:13:05 GMT]]></title><description><![CDATA[<p>Und wenn Du jetzt auch in OnEraseBkgnd der Buttons FALSE zurückgibst? Kann sein das Du dafür noch 'Benachrichtigen' einschalten musst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304837</guid><dc:creator><![CDATA[connan]]></dc:creator><pubDate>Wed, 13 Jun 2007 13:13:05 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Wed, 13 Jun 2007 13:38:30 GMT]]></title><description><![CDATA[<p>Dann flackert immer noch alles <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Trotzdem vielen Dank fürs viele Antworten, irgendeine Lösung finde ich sicher noch!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304866</guid><dc:creator><![CDATA[Lexaja]]></dc:creator><pubDate>Wed, 13 Jun 2007 13:38:30 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Wed, 13 Jun 2007 14:07:13 GMT]]></title><description><![CDATA[<p>Lass es uns aber wissen <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="😉"
    /><br />
Sorry, ich bin mit meinem Latein am Ende, vieleicht hilft ja wirklich nur noch ein MemDC <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304899</guid><dc:creator><![CDATA[connan]]></dc:creator><pubDate>Wed, 13 Jun 2007 14:07:13 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Thu, 14 Jun 2007 06:04:54 GMT]]></title><description><![CDATA[<p>Das Flackern beim Dialog Resize lässt sich nicth mit Double Buffering lösen, denn jedes Fenster hat seinen eigenen DC!</p>
<p>Besser WS_CLIPCHILDREN für den Dialog setzen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305319</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 14 Jun 2007 06:04:54 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Thu, 14 Jun 2007 08:24:35 GMT]]></title><description><![CDATA[<p>Ich hab auch noch mal nachgeschaut und glaube, daß das hier genau das richtige für Dich ist:<br />
<a href="http://www.codeproject.com/buttonctrl/NoFlicker.asp?df=100&amp;forumid=151835&amp;exp=0&amp;select=1036290" rel="nofollow">http://www.codeproject.com/buttonctrl/NoFlicker.asp?df=100&amp;forumid=151835&amp;exp=0&amp;select=1036290</a><br />
Dort wird, wie schon von Martin vorgeschlagen, WS_CLIPCHILDREN benutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305414</guid><dc:creator><![CDATA[connan]]></dc:creator><pubDate>Thu, 14 Jun 2007 08:24:35 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Thu, 14 Jun 2007 09:42:14 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Ihr seid echt klasse <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Das flackern ist jetzt endlich weitgehend weg. Jetzt hab ich noch das Problem, dass ein Button nicht immer richtig gezeichnet wird. Aber das liegt vermutlich eher an meinem Code <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Vielen vielen Dank nochmal!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305484</guid><dc:creator><![CDATA[Lexaja]]></dc:creator><pubDate>Thu, 14 Jun 2007 09:42:14 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Thu, 14 Jun 2007 10:56:49 GMT]]></title><description><![CDATA[<p>Hm, also ich hab mir das nochmal genauer angeschaut und getestet.<br />
Wenn ich das Fenster schön ganz langsam größer ziehe, funktioniert alles super. Mache ich jetzt mit der Maus eine ganz schnelle Bewegung beim Fenster größer ziehen, bleibt einer der Buttons an der alten Stelle stehen. Ohne das Flag WS_CLIPCHILDREN passiert das nicht. Wie kann ich das jetzt noch abfangen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305560</guid><dc:creator><![CDATA[Lexaja]]></dc:creator><pubDate>Thu, 14 Jun 2007 10:56:49 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Thu, 14 Jun 2007 11:08:29 GMT]]></title><description><![CDATA[<p>Ist denn das ein besonderer Button?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305567</guid><dc:creator><![CDATA[connan]]></dc:creator><pubDate>Thu, 14 Jun 2007 11:08:29 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Thu, 14 Jun 2007 11:33:26 GMT]]></title><description><![CDATA[<p>Nein, der ist genauso angelegt wie die anderen auch. Das einzige &quot;besondere&quot; daran ist die Tatsache, dass er als letzter angelegt wird und nicht trapezförmig ist wie die anderen, sondern achteckig in der Mitte aller anderen Buttons <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>EDIT: Eine noch genauere Analyse. Vielleicht kann mir ja noch irgendjemand helfen:<br />
Ich denke, es liegt (wie gesagt) am WS_CLIPCHILDREN. Dieser Fensterstil bewirkt ja, dass der Bereich, in dem sich die Child-Windows befinden, ausgespart wird beim neuen Zeichnen. Allerdings werden in der OnSize()-Methode alle Buttons mit neuen Koordinaten belegt und beim langsamen Ziehen ja auch neu gezeichner. Ich verwende auch noch zwei kleine Static-Controls in meinem Dialog, bei denen mit dem Fensterstil WS_CLIPCHILDREN der Hintergrund verschwindet und der Fensterhintergrund erscheint. Das könnte man evtl. mit OnCtlColor lösen, oder?<br />
Ich poste hier mal meine OnSize-Methode hin, vielleicht kann ja jemand meinen Fehler entdecken?</p>
<pre><code>void CStartdialog3Dlg::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);

	CRect rect;
	CRgn rgn, rgnDialogZiehen, rgnDialogVergroessern;
	GetClientRect(&amp;rect);

	if(rect.Height() &lt; rect.Width())
		offset = runden((double)rect.Height() / 3);
	else
		offset = runden((double)rect.Width() / 3);

	rect.SetRect(rect.left, rect.top, rect.left + 3 * offset, rect.top + 3 * offset);
	x = rect.left;
	y = rect.top;
	breite = rect.Width();
	hoehe = rect.Height();	

	// Array für Eckpunkte des Dialogs
	CPoint p_dialog[8];

	// Hilfsvariablen
	int tmp1 = runden(0.1 * (double)offset);
	int tmp2 = runden(0.05 * (double)offset);

	// Größen, die für die Berechnung des Achtecks gebraucht werden
	kantenlaenge = offset;
	hilfskante = runden((double)kantenlaenge / sqrt(2));
	kantenlaengeInnen = offset - 12 * tmp2;
	hilfskanteInnen = runden((double)kantenlaengeInnen / sqrt(2));
	kantenlaengeRand = offset - 2 * tmp2;
	hilfskanteRand = runden((double)kantenlaengeRand / sqrt(2));

	// Eckpunkte des Dialogs erzeugen
	CPoint d1(offset, tmp1);
	CPoint d2(2 * offset, tmp1);
	CPoint d0(d1.x - hilfskante, d1.y + hilfskante);
	CPoint d3(d2.x + hilfskante, d2.y + hilfskante);
	CPoint d4(d3.x, d3.y + kantenlaenge);
	CPoint d5(d2.x, d4.y + hilfskante);
	CPoint d6(d1.x, d5.y);
	CPoint d7(d0.x, d4.y);

	// Eckpunkte in Array speichern
	p_dialog[0] = d0;
	p_dialog[1] = d1;
	p_dialog[2] = d2;
	p_dialog[3] = d3;
	p_dialog[4] = d4;
	p_dialog[5] = d5;
	p_dialog[6] = d6;
	p_dialog[7] = d7;

	// 8-Eck erzeugen und zwei Regionen zum verschieben/vergrößern dransetzen
	rgn.CreatePolygonRgn(p_dialog, 8, ALTERNATE);
	rgnDialogZiehen.CreateEllipticRgn(d1.x - tmp1, 0, d1.x + tmp1, d1.y + tmp1);
	CombineRgn(rgn, rgn, rgnDialogZiehen, RGN_OR);
	rgnDialogVergroessern.CreateEllipticRgn(d5.x - tmp1, d5.y - tmp1, d5.x + tmp1, d5.y + tmp1);
	CombineRgn(rgn, rgn, rgnDialogVergroessern, RGN_OR);
	SetWindowRgn(static_cast&lt;HRGN&gt;(rgn.GetSafeHandle()), TRUE);

	if(m_buttonsInitialisiert)
	{
		// Innen - Eckpunkte des Achtecks innen erzeugen
		CPoint b(d1.x + 6 * tmp2, d1.y + 14 * tmp2);
		CPoint c(d2.x - 6 * tmp2, d2.y + 14 * tmp2);
		CPoint a(b.x - hilfskanteInnen, b.y + hilfskanteInnen);
		CPoint d(c.x + hilfskanteInnen, c.y + hilfskanteInnen);
		CPoint e(d.x, d.y + kantenlaengeInnen);
		CPoint f(c.x, e.y + hilfskanteInnen);
		CPoint g(b.x, f.y);
		CPoint h(a.x, e.y);	

		// Außen - Eckpunkte der Buttons erzeugen
		CPoint b_(d1.x + tmp2, d1.y + tmp2 + tmp2);
		CPoint c_(d2.x - tmp2, d2.y + tmp2 + tmp2);
		CPoint a_(b_.x - hilfskanteRand, b_.y + hilfskanteRand);
		CPoint d_(c_.x + hilfskanteRand, c_.y + hilfskanteRand);
		CPoint e_(d_.x, d_.y + kantenlaengeRand);
		CPoint f_(c_.x, e_.y + hilfskanteRand);
		CPoint g_(b_.x, f_.y);
		CPoint h_(a_.x, e_.y);

		// Vektor anlegen, der die Eckpunkte der Buttons aufnimmt
		std::vector&lt;CPoint&gt; pts;

		// Button1 anlegen
		pts.push_back(b_);
		pts.push_back(c_);
		pts.push_back(c);
		pts.push_back(b);
		m_button1.SetPoints(pts);
		m_button1.setRgn();

		// Button2 anlegen
		pts.clear();
		pts.push_back(c_);
		pts.push_back(d_);
		pts.push_back(d);
		pts.push_back(c);
		m_button2.SetPoints(pts);
		m_button2.setRgn();

		// Button3 anlegen
		pts.clear();
		pts.push_back(d);
		pts.push_back(d_);
		pts.push_back(e_);
		pts.push_back(e);
		m_button3.SetPoints(pts);
		m_button3.setRgn();

		// Button4 anlegen
		pts.clear();
		pts.push_back(e_);
		pts.push_back(f_);
		pts.push_back(f);
		pts.push_back(e);
		m_button4.SetPoints(pts);
		m_button4.setRgn();

		// Button5 anlegen
		pts.clear();
		pts.push_back(g);
		pts.push_back(f);
		pts.push_back(f_);
		pts.push_back(g_);
		m_button5.SetPoints(pts);
		m_button5.setRgn();

		// Button6 anlegen
		pts.clear();
		pts.push_back(g);
		pts.push_back(g_);
		pts.push_back(h_);
		pts.push_back(h);
		m_button6.SetPoints(pts);
		m_button6.setRgn();

		// Button7 anlegen
		pts.clear();
		pts.push_back(a_);
		pts.push_back(a);
		pts.push_back(h);
		pts.push_back(h_);
		m_button7.SetPoints(pts);
		m_button7.setRgn();

		// Button8 anlegen
		pts.clear();
		pts.push_back(a_);
		pts.push_back(b_);
		pts.push_back(b);
		pts.push_back(a);
		m_button8.SetPoints(pts);
		m_button8.setRgn();

		// Button9 anlegen
		pts.clear();
		pts.push_back(a);
		pts.push_back(b);
		pts.push_back(c);
		pts.push_back(d);
		pts.push_back(e);
		pts.push_back(f);
		pts.push_back(g);
		pts.push_back(h);
		m_button9.SetPoints(pts);
		m_button9.setRgn();

		rcVerschieben.SetRect(d1.x - runden(0.1 * (double)offset), 0, d1.x + tmp1, d1.y + tmp1);
		rcGroesseAendern.SetRect(d5.x - tmp1, d5.y - tmp1, d5.x + tmp1, d5.y + tmp1);

		if(symbol_verschieben-&gt;m_hWnd)
			symbol_verschieben-&gt;MoveWindow(rcVerschieben, TRUE);
		if(symbol_groesse_aendern-&gt;m_hWnd)
			symbol_groesse_aendern-&gt;MoveWindow(rcGroesseAendern, TRUE);
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1305570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305570</guid><dc:creator><![CDATA[Lexaja]]></dc:creator><pubDate>Thu, 14 Jun 2007 11:33:26 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Thu, 14 Jun 2007 11:45:13 GMT]]></title><description><![CDATA[<p>Das kann auch an einem fehlenden WS_CLIPSIBLINGS liegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305607</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 14 Jun 2007 11:45:13 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Thu, 14 Jun 2007 11:54:53 GMT]]></title><description><![CDATA[<p>Habe ich schon ausprobiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> Vor dem Aufruf</p>
<pre><code>CDialog::OnInitDialog();
</code></pre>
<p>in OnInitDialog() gibts einen Fehler, wenn ich das Programm starte, und wenn ich es hinter den Aufruf schreibe, ändert sich nichts...</p>
<p>Ich habe vorhin beim suchen was von BeginDeferWindowPos usw. gelesen. Kann mir das weiterhelfen? Wenn ja - wie und wo wird es benutzt?</p>
<p>EDIT: Wenn ich den Dialog schnell vergrößert habe und einer der Buttons nicht auf der aktuellen Position ist, wird er an die aktuelle Position gezeichnet, wenn ich mit der Maus drüberfahre. Kann ich dieses neu zeichnen nach dem resizen irgendwie erzwingen, nachdem ich die Maus wieder losgelassen habe und der Resize beendet ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305614</guid><dc:creator><![CDATA[Lexaja]]></dc:creator><pubDate>Thu, 14 Jun 2007 11:54:53 GMT</pubDate></item><item><title><![CDATA[Reply to Warum flackert mein Dialog, wenn ich ihn größer ziehe? on Thu, 14 Jun 2007 12:02:25 GMT]]></title><description><![CDATA[<p>Das macht man nicht in dem Dialog in OnInitDialog, sondern man gibt es direkt als Stil bei jedem Control im Dialogeditor an!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305633</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 14 Jun 2007 12:02:25 GMT</pubDate></item></channel></rss>