<?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[Für GDI+ HDC nur für Teil eines Fensters Fensters?]]></title><description><![CDATA[<p>Ich habe vor kurzem mal angefangen, mit der GDI+ zu arbeiten. Mit BeginPaint kann man sich ja einen Device Content Handle für ein Fenster schaffen. Bei mir ist es aber nun abzusehen, dass ich nur in einen Teil des Fenster zeichnen werde. Es wäre also praktischer, wenn ich den HDC nur für einen Teil des Fensters schaffen könnte, denn das würde die Positionsangaben sehr erleichtern.</p>
<p>Ist da in die Richtung was möglich?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/178805/für-gdi-hdc-nur-für-teil-eines-fensters-fensters</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Jul 2026 13:13:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/178805.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 15 Apr 2007 10:07:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Für GDI+ HDC nur für Teil eines Fensters Fensters? on Sun, 15 Apr 2007 10:07:35 GMT]]></title><description><![CDATA[<p>Ich habe vor kurzem mal angefangen, mit der GDI+ zu arbeiten. Mit BeginPaint kann man sich ja einen Device Content Handle für ein Fenster schaffen. Bei mir ist es aber nun abzusehen, dass ich nur in einen Teil des Fenster zeichnen werde. Es wäre also praktischer, wenn ich den HDC nur für einen Teil des Fensters schaffen könnte, denn das würde die Positionsangaben sehr erleichtern.</p>
<p>Ist da in die Richtung was möglich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1266362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1266362</guid><dc:creator><![CDATA[Sniffman]]></dc:creator><pubDate>Sun, 15 Apr 2007 10:07:35 GMT</pubDate></item><item><title><![CDATA[Reply to Für GDI+ HDC nur für Teil eines Fensters Fensters? on Sun, 15 Apr 2007 10:34:22 GMT]]></title><description><![CDATA[<p>Naja du kannst den DC von einer Bitmap mit der entsprechenden Größe holen und die Bitmap dann am Ende einfach auf deinen normalen DC malen ... sollte eigentlich gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1266380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1266380</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 15 Apr 2007 10:34:22 GMT</pubDate></item><item><title><![CDATA[Reply to Für GDI+ HDC nur für Teil eines Fensters Fensters? on Sun, 15 Apr 2007 12:05:26 GMT]]></title><description><![CDATA[<p>Gibt es denn da wirklich nichts eigens dafür vorgesehenes? Das finde ich schwer vorstellbar, denn es ist doch bestimmt nicht so selten, dass man seie Objekte nicht anhand der Fensterdimensionen positionieren will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1266427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1266427</guid><dc:creator><![CDATA[Sniffman]]></dc:creator><pubDate>Sun, 15 Apr 2007 12:05:26 GMT</pubDate></item><item><title><![CDATA[Reply to Für GDI+ HDC nur für Teil eines Fensters Fensters? on Sun, 15 Apr 2007 12:19:25 GMT]]></title><description><![CDATA[<p>Hmm in wie weit soll das überhaupt die Positionsangabe erleichtern? Und doch normal orientiert man sich an einem RECT und arbeitet damit ... dann kannst du auch auf vergrößerungen/verkleinerungen deines Fensters reagieren usw.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1266435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1266435</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 15 Apr 2007 12:19:25 GMT</pubDate></item><item><title><![CDATA[Reply to Für GDI+ HDC nur für Teil eines Fensters Fensters? on Sun, 15 Apr 2007 12:24:11 GMT]]></title><description><![CDATA[<p>Und wo ist eig. das Problem?</p>
<pre><code class="language-cpp">// HDC oder der gleichen als Ausgangspunkt.
Gdiplus::Graphics graphic_wnd(hDC);
Gdiplus::Bitmap* pBitmap = new Gdiplus::Bitmap(100, 200);
Gdiplus::Graphics* pGraphic = new Gdiplus::Graphics::FromImage(pBitmap);
// pGraphic nutzen
delete pGraphic;
graphic_wnd.DrawImage(pBitmap, 0, 0); // oder halt anstelle der Nullen einfach die Position für die komplette Grafik angeben.
delete pBitmap;
</code></pre>
<p>So wäre das mit dem Weg über ne Bitmap ...</p>
<p><strong>Edit</strong><br />
Achja ... am besten ist es, da du ja nicht auf irgendwas reagierst, die Bitmap dann nur am Anfang einmal zu erstellen und zu bemahlen und dann im Zeichenvorgang immer nur die Bitmap drauf zeichnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1266439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1266439</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 15 Apr 2007 12:24:11 GMT</pubDate></item><item><title><![CDATA[Reply to Für GDI+ HDC nur für Teil eines Fensters Fensters? on Sun, 15 Apr 2007 12:26:28 GMT]]></title><description><![CDATA[<p>Wie gesagt, ich bin absoluter Anfänger, was die GDI angeht.</p>
<p>Wenn es dir nicht zu viel Arbeit ist, könntest du dann mal kurz erläutern, wie du deine Methode mit dem Rect meinst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1266440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1266440</guid><dc:creator><![CDATA[Sniffman]]></dc:creator><pubDate>Sun, 15 Apr 2007 12:26:28 GMT</pubDate></item><item><title><![CDATA[Reply to Für GDI+ HDC nur für Teil eines Fensters Fensters? on Sun, 15 Apr 2007 13:21:38 GMT]]></title><description><![CDATA[<p>Naja du gehst halt hin und holst dir das RECT vom Fenster ... und dazu passend auch den Device bzw das Graphic Objekt per HDC ... so ... dann gehst du halt hin und passt dir das Rect so an das du nur den Bereich hast und gehst davon dann immer aus:</p>
<pre><code class="language-cpp">Gdiplus::Graphics graphic_wnd(hDC);
RECT rect;
GetClientRect(hWnd, &amp;rect);

// Beispiel
rect.left += 40;
rect.top += 40;
rect.bottom -= 120;
rect.right -= 20;
</code></pre>
<p>so damit hast du dir den Bereich festgelegt ... und das Graphic-Objekt geholt. Jetzt nimmst du bei der X Koordinate halt immer rect.right oder rect.left und bei der Y Koordinate immer rect.top und rect.bottom wenn de was zeichnen willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1266463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1266463</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 15 Apr 2007 13:21:38 GMT</pubDate></item><item><title><![CDATA[Reply to Für GDI+ HDC nur für Teil eines Fensters Fensters? on Sun, 15 Apr 2007 15:29:48 GMT]]></title><description><![CDATA[<p>Stimmt, das geht wohl so. Bis jetzt hatte ich es einfach vor jegliche Draws mit dem Graphics-Objekt eine Translation vorangestellt, die von der oberen linken Ecke des Fensters entsprechend verschiebt.</p>
<p>Aber was mir gerade noch in den Sinn gekommen ist: Gibt es irgendwie eine Beschränkung, wie oft man pro verarbeiteter Message BeginDraw und EndDraw ausführen darf? Denn ich habe hier gerade folgendes gemacht:</p>
<pre><code class="language-cpp">void Anzeige::Zeichnen(HWND hwnd) {
    PAINTSTRUCT ps;
    HDC hdc;
    hdc = BeginPaint(hwnd, &amp;ps);
    Graphics graphics(hdc);
    /*Zeichenoperationen...*/
    EndPaint(hwnd, &amp;ps);
    EinzelteilZeichnen(hwnd);
}

void Anzeige::EinzelteilZeichnen(HWND hwnd) {
    PAINTSTRUCT ps;
    HDC hdc;
    hdc = BeginPaint(hwnd, &amp;ps);
    Graphics graphics(hdc);
    /*Zeichenoperationen...*/
    EndPaint(hwnd, &amp;ps);
}
</code></pre>
<p>Aber dabei wird alles, was in der zweiten Funktion gezeichnet werden sollte, einfach unterschlagen und taucht nicht auf. Müsste man da irgendwas beachten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1266523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1266523</guid><dc:creator><![CDATA[Sniffman]]></dc:creator><pubDate>Sun, 15 Apr 2007 15:29:48 GMT</pubDate></item><item><title><![CDATA[Reply to Für GDI+ HDC nur für Teil eines Fensters Fensters? on Sun, 15 Apr 2007 15:47:23 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void Display::draw(HWND hWnd) 
{
    PAINTSTRUCT ps;
    HDC hDC = BeginPaint(hWnd, &amp;ps);
    RECT rect;
    GetClientRect(hWnd, &amp;rect);

    Gdiplus::Graphics graphics(hDC);
    // Double Buffering ...
    Gdiplus::Bitmap* pMemBitmap = new Gdiplus::Bitmap(rect.right - rect.left, rect.bottom - rect.top);
    Gdiplus::Graphics* pMemGraphics = new Gdiplus::Graphics::FromImage(pMemBitmap);
    // Ab hier kannst du mit pMemGraphics zeichnen!

    draw_items(pMemGraphics);
    delete pMemGraphics;
    graphics.DrawImage(pMemBitmap, 0, 0);
    delete pMemBitmap;

    EndPaint(hWnd, &amp;ps);
}

void Display::draw_items(Gdiplus::Graphics* graphics) 
{
    graphics-&gt;DrawRectangle(...); // oder so was in der art ^^
}
</code></pre>
<p>... so würde ich es machen ... ich würde eigentlich sogar noch einen Schritt weiter gehen und das pMemGraphics und das pMemBitmap Objekt als Memebervariablen anlegen und dann bei WM_SIZE nur neu erstellen ... damit sparst du Zeit beim Zeichnen und verhinderst gleichzeitig noch das Flickern durchs Double Buffering.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1266539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1266539</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 15 Apr 2007 15:47:23 GMT</pubDate></item><item><title><![CDATA[Reply to Für GDI+ HDC nur für Teil eines Fensters Fensters? on Sun, 15 Apr 2007 16:07:10 GMT]]></title><description><![CDATA[<p>Also, so wie ich das verstehe (ohne viel Vorkenntnis), wird vom Graphics-Objekt zuerst alles in das Bild geschrieben, und das dann auf einen Schlag sichtbar gemacht, richtig? Ist diese Methode denn auch nützlich, wenn ich überhaupt nicht mit Bildern irgendeiner Art arbeite, mal abgesehen davon, dass sie Flackern unterdrückt (wobei ich jetzt weder sehr anspruchsvolle Sachen zeichne, noch das Fenster in der Größe veränderbar ist).</p>
<p>Ansonsten gebe ich mich auch hiermit zufrieden. Bin nur nach wie vor geschockt, wie umständlich so was einfaches wie ein Teil eines Fensters auszuwählen sein kann. Dafür hatte ich sogar eine Funktion erwartet. <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>
<p>Achja, eins noch: Wo genau liegt denn der Unterschied, ob man die Methode FromImage oder den Konstruktor, der ein Bild einliest, benutzt? Beziehungsweise, wieso sind die beiden Objekte Graphics und Bitmap überhaupt dynamisch allokiert? Würde es nicht ausreichen, wenn sie nach Ende der Funktion einfach Out-of-Scope gehen würden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1266556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1266556</guid><dc:creator><![CDATA[Sniffman]]></dc:creator><pubDate>Sun, 15 Apr 2007 16:07:10 GMT</pubDate></item><item><title><![CDATA[Reply to Für GDI+ HDC nur für Teil eines Fensters Fensters? on Sun, 15 Apr 2007 16:11:29 GMT]]></title><description><![CDATA[<p>hmm hab gerade nicht die Konstruktor alle im Kopf ... aber ich nutz das halt oft in Kombination mit Membervariable und kann nur so dann das Resizen bzw neuerstellen des Objektes bewirken ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1266558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1266558</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 15 Apr 2007 16:11:29 GMT</pubDate></item><item><title><![CDATA[Reply to Für GDI+ HDC nur für Teil eines Fensters Fensters? on Sun, 15 Apr 2007 20:45:55 GMT]]></title><description><![CDATA[<p>Okay, eine Frage noch. <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>
<p>Was hat es mit dem Double Buffering auf sich? Mir ist klar was das ist, aber wieso wird das gerade bei dieser Umsetzung erzeugt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1266772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1266772</guid><dc:creator><![CDATA[Sniffman]]></dc:creator><pubDate>Sun, 15 Apr 2007 20:45:55 GMT</pubDate></item><item><title><![CDATA[Reply to Für GDI+ HDC nur für Teil eines Fensters Fensters? on Sun, 15 Apr 2007 20:56:53 GMT]]></title><description><![CDATA[<p>Hmm nicht nur bei dieser Umsetzung. Bei jeder! Wenn de es vollständig optimierst, verringert es die Zeit die zum Zeichnen brauchst und verhindert Flackern usw.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1266776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1266776</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 15 Apr 2007 20:56:53 GMT</pubDate></item></channel></rss>