<?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[Problem mit Hintergrundbild in Dialog]]></title><description><![CDATA[<p>Hallo, ich habe das folgende Problem:</p>
<p>Ich möchte hinter meinen Buttons, animierten Gif's usw. ein Bild darstellen. Das funktioniert auch soweit. Das Problem ist, dass ich diese Verknüpfung mit dem Bild nicht in der OnInitDialog()-Funktion aufrufen kann, sondern in der OnPaint()-Funktion. Der Grund dafür ist, dass das entsprechende Bild nach dem Neuzeichnen des Dialoges ja nicht mehr angezeigt wird.</p>
<p>Nun kommt es aber immer dann zu einem Flackern, wenn beispielsweise ein Hilfetext zu einem Button angezeigt wird.</p>
<p>Wie kann ich dieses Problem umgehen?<br />
<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/topic/56698/problem-mit-hintergrundbild-in-dialog</link><generator>RSS for Node</generator><lastBuildDate>Tue, 02 Jun 2026 11:16:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/56698.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 28 Nov 2003 08:16:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Hintergrundbild in Dialog on Fri, 28 Nov 2003 08:16:52 GMT]]></title><description><![CDATA[<p>Hallo, ich habe das folgende Problem:</p>
<p>Ich möchte hinter meinen Buttons, animierten Gif's usw. ein Bild darstellen. Das funktioniert auch soweit. Das Problem ist, dass ich diese Verknüpfung mit dem Bild nicht in der OnInitDialog()-Funktion aufrufen kann, sondern in der OnPaint()-Funktion. Der Grund dafür ist, dass das entsprechende Bild nach dem Neuzeichnen des Dialoges ja nicht mehr angezeigt wird.</p>
<p>Nun kommt es aber immer dann zu einem Flackern, wenn beispielsweise ein Hilfetext zu einem Button angezeigt wird.</p>
<p>Wie kann ich dieses Problem umgehen?<br />
<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/403729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/403729</guid><dc:creator><![CDATA[Dressman1981]]></dc:creator><pubDate>Fri, 28 Nov 2003 08:16:52 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Hintergrundbild in Dialog on Fri, 28 Nov 2003 08:28:21 GMT]]></title><description><![CDATA[<p>wie machst dus denn,mit CClientDC o mit CPaintDC?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/403733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/403733</guid><dc:creator><![CDATA[etetrete]]></dc:creator><pubDate>Fri, 28 Nov 2003 08:28:21 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Hintergrundbild in Dialog on Fri, 28 Nov 2003 12:51:31 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>also ich hole mir einen Zeiger auf den Dialog und das entsprechende Handle:</p>
<pre><code class="language-cpp">HWND hWndHintergrundBild = GetSafeHwnd(); // Zeiger auf kompletten Dialog
HDC hDCHintergrund = ::GetDC(hWndHintergrundBild);
BildLaden(AktuellesVerzeichnis() + &quot;AutoInstallInfo.jpg&quot;); 
BildZeichnen(hWndHintergrundBild, hDCHintergrund);
</code></pre>
<p>Danach lade ich das Bild dann in den Speicher und zeichne es entsprechend:</p>
<pre><code class="language-cpp">/////////////////////////////////////////////////////////////////////////////
// Lädt das entsprechende Bild in den Speicher (*.jpg, *.bmp usw.)
bool BildLaden(LPCTSTR pszFileName)
{
	// Datei öffnen
  	HANDLE hFile = CreateFile(pszFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);

  	if(INVALID_HANDLE_VALUE == hFile) return FALSE;				// Wenn die Datei nicht geöffnet werden konnte, false zurückgeben

  	// Dateigröße ermitteln
  	DWORD dwFileSize = GetFileSize(hFile, NULL);

  	// Speicher in Größe der Datei allokieren
  	HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);	// Reserviert Speicherplatz auf dem globalen Heap
  	LPVOID  pvData  = GlobalLock(hGlobal);						// Liefert einen Zeiger auf den globalen Speicherblock

  	// Datei lesen und im Speicher behalten
  	DWORD dwBytesRead = 0;
  	BOOL  bRead       = ReadFile(hFile, pvData, dwFileSize, &amp;dwBytesRead, NULL);

  	if(!bRead) return FALSE;	// Wenn die Datei nicht ausgelesen werden konnte, false zurückgeben

  	GlobalUnlock(hGlobal);		// Hebt die Sperre für den angegebenen globalen Speicherblock auf
  	CloseHandle(hFile);			// Schließt das Handle (Verweis) auf das geöffnete Objekt

  	// IStream* aus dem Speicher erzeugen
  	LPSTREAM pstm = NULL;
  	HRESULT  hr   = CreateStreamOnHGlobal(hGlobal, TRUE, &amp;pstm);

  	// IPicture vom Bild erzeugen
  	if(Bild) Bild-&gt;Release();

  	hr = OleLoadPicture(pstm, dwFileSize, FALSE, IID_IPicture, (LPVOID*)&amp;Bild);
  	pstm-&gt;Release();

  	// Breite und Höhe vom Bild holen
  	Bild-&gt;get_Width(&amp;lLaenge);
  	Bild-&gt;get_Height(&amp;lHoehe);

  	HDC hdc = CreateIC(TEXT(&quot;DISPLAY&quot;), NULL, NULL, NULL);	// Liefert Informationen über den angegebenen Gerätekontext

  	// in Pixel-Einheiten umwandeln
  	iLaenge = (lLaenge  * GetDeviceCaps(hdc, LOGPIXELSX)) / 2540;	// Liefert gerätespezifische Informationen über das angegebene Gerät
  	iHoehe = (lHoehe * GetDeviceCaps(hdc, LOGPIXELSY)) / 2540;

  	return TRUE;
}
/////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////
// Zeigt das entsprechende Bild an
bool BildZeichnen(HWND hwnd, HDC hdc)
{
  if(Bild) // Wenn das Bild geladen wurde...
  {
   RECT rc;
   GetClientRect(hwnd, &amp;rc);	// Ermittelt die linke und untere rechte Ecke des Client-Bereichs

   // Bild anzeigen mittels Render
   Bild-&gt;Render(hdc, 0, 0, iLaenge, iHoehe, 0, lHoehe, lLaenge, -lHoehe, &amp;rc);

   return TRUE;
  }
  return FALSE;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/403865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/403865</guid><dc:creator><![CDATA[Dressman1981]]></dc:creator><pubDate>Fri, 28 Nov 2003 12:51:31 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Hintergrundbild in Dialog on Fri, 28 Nov 2003 12:57:24 GMT]]></title><description><![CDATA[<p>also, ich habs mal so gemacht:</p>
<pre><code class="language-cpp">//in CDlgMain::OnPaint()
// Hintergrundbitmap setzen:
//   CClientDC dc2( this ); ...geändert in CPaintDC, weil das Bitmap beim Zurückkehren von anderen Dialogen auf diesen, sich das Bitmap über die Buttons legte
      CPaintDC dc2(this);
      BITMAP bm;
      bgImage.GetObject( sizeof( bm ), &amp;bm );
      CDC SpeicherDC;
      SpeicherDC.CreateCompatibleDC( &amp;dc2 );
      SpeicherDC.SelectObject( &amp;bgImage );
      CRect Rect;
      GetClientRect( &amp;Rect );
      dc2.SetStretchBltMode( HALFTONE );
      dc2.StretchBlt( 0, 0, Rect.right, Rect.bottom, &amp;SpeicherDC,
      0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/403872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/403872</guid><dc:creator><![CDATA[etetrete]]></dc:creator><pubDate>Fri, 28 Nov 2003 12:57:24 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Hintergrundbild in Dialog on Fri, 28 Nov 2003 13:38:33 GMT]]></title><description><![CDATA[<p>Na ja, ich habe nicht das Problem, dass die Buttons hinter dem Bild verschwinden, da ich die Button auch in der OnPaint()-Funktion nach dem Bildaufruf immer wieder darstelle und nicht in der OnInitDialog()-Funktion wie mir das lieber wäre.<br />
Du machst im Prinzip nichts anderes, da du auch die OnPaint()-Funktion nutzt. Jetzt weiß ich nicht, ob ich in der BildLaden- bzw. BildZeichnen-Funktion etwas abändern muss, damit ich dieses Flackern verhindere, wenn der Hilfetext zu dem Button angezeigt wird.</p>
<p>Es müsste doch eine Möglichkeit existieren, dem Hintergrund des Dialoges das Bild direkt zuzuweisen und nicht bei jedem Neuzeichnen des Bildschirmbereiches immer wieder das Bild und die Buttons neu zu zeichnen, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/403909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/403909</guid><dc:creator><![CDATA[Dressman1981]]></dc:creator><pubDate>Fri, 28 Nov 2003 13:38:33 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Hintergrundbild in Dialog on Fri, 28 Nov 2003 13:52:39 GMT]]></title><description><![CDATA[<p>um ehrlich zu sein, hab ich kein problem mit flackernden bildern gehabt, meins war eben das beschriebene.. vielleicht weiss jemand rat, der sich damit schon mal rumgeschlagen hat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/403925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/403925</guid><dc:creator><![CDATA[tetetrete]]></dc:creator><pubDate>Fri, 28 Nov 2003 13:52:39 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Hintergrundbild in Dialog on Sat, 29 Nov 2003 10:17:57 GMT]]></title><description><![CDATA[<p>Ja trotzdem danke!</p>
<p>Kann mir echt keiner bei dem Problem helfen? <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="😕"
    /><br />
Ich denke, es liegt daran dass immer das komplette Bild neu geladen wird. Kann man es nicht irgendwie so ausführen, dass nur der Bereich neu gezeichnet wird, der wirklich neugezeichnet werden muss (beispielsweise, weil ein anderes Fenster über dem Dialog liegt oder der Hilfetext angezeigt wird)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/404290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/404290</guid><dc:creator><![CDATA[Dressman1981]]></dc:creator><pubDate>Sat, 29 Nov 2003 10:17:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Hintergrundbild in Dialog on Tue, 02 Dec 2003 06:27:54 GMT]]></title><description><![CDATA[<p>Ich bin's mal wieder...</p>
<p>Hab jetzt eine andere Klasse genutzt um mein Hintergrundbild direkt auf einem Picture-Object abzubilden. Nun wird das Bild aber immer über den Button dargestellt.</p>
<p>Wie kann ich den Button über allem anderen darstellen?</p>
<p>So nach dem Motto &quot;TopButton&quot; bzw. die ZOrder verändern? <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/406114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/406114</guid><dc:creator><![CDATA[Dressman1981]]></dc:creator><pubDate>Tue, 02 Dec 2003 06:27:54 GMT</pubDate></item></channel></rss>