<?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[&amp;quot;Zeichnen auf Knopfdruck&amp;quot;]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab folgendes Problem in eine dialog. Anwendung:<br />
Ich zeichne etwas in OnPaint(), funktioniert wunderbar. Jetzt soll aber, sobald der Anwender auf einen Button klickt, noch etwas zusätzliches gezeichnet werden. Wenn ich in der Methode des Buttons einen neuen DC erstelle und dort rein zeichne, funktioniert das zwar, allerdings ist das gezeichnete nachdem man minimniert hat wieder weg! Am besten wäre es, wenn ich auf Buttondruck OnPaint() nocheinmal mit anderen Funktionswerten aufrufen könnte, allerding passiert gar nix wenn ich in die OnClick Methode einfach nur OnPaint() schreibe. Weiß da jemand Rat?!</p>
<p>Und noch eine Frage: Wenn ich z. B. eine Linie zeichne, wie könnte ich die denn auf Buttonklick wieder löschen?? Also nicht mit &quot;Tricks&quot; wie drübermalen mit Hintergrundfarbe!</p>
<p>Viele Dank!!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/54968/quot-zeichnen-auf-knopfdruck-quot</link><generator>RSS for Node</generator><lastBuildDate>Mon, 01 Jun 2026 22:23:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/54968.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Nov 2003 13:34:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to &amp;quot;Zeichnen auf Knopfdruck&amp;quot; on Wed, 12 Nov 2003 13:34:08 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab folgendes Problem in eine dialog. Anwendung:<br />
Ich zeichne etwas in OnPaint(), funktioniert wunderbar. Jetzt soll aber, sobald der Anwender auf einen Button klickt, noch etwas zusätzliches gezeichnet werden. Wenn ich in der Methode des Buttons einen neuen DC erstelle und dort rein zeichne, funktioniert das zwar, allerdings ist das gezeichnete nachdem man minimniert hat wieder weg! Am besten wäre es, wenn ich auf Buttondruck OnPaint() nocheinmal mit anderen Funktionswerten aufrufen könnte, allerding passiert gar nix wenn ich in die OnClick Methode einfach nur OnPaint() schreibe. Weiß da jemand Rat?!</p>
<p>Und noch eine Frage: Wenn ich z. B. eine Linie zeichne, wie könnte ich die denn auf Buttonklick wieder löschen?? Also nicht mit &quot;Tricks&quot; wie drübermalen mit Hintergrundfarbe!</p>
<p>Viele Dank!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/392504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/392504</guid><dc:creator><![CDATA[FreakX]]></dc:creator><pubDate>Wed, 12 Nov 2003 13:34:08 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;Zeichnen auf Knopfdruck&amp;quot; on Wed, 12 Nov 2003 15:07:56 GMT]]></title><description><![CDATA[<p>Du könntest Dir für jede &quot;Zeichenoperation&quot; ein Objekt anlegen das diese Aufgabe übernimmt.</p>
<p>Die Objekte haben alle z.B. paint(DC <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="😉"
    /> und werden in einer Liste eingefügt wenn dein Knopf gedrückt wird.</p>
<p>In OnPaint läufst Du über die Liste und rufst paint() jedes Objektes auf das in der Liste steckt.</p>
<p>Wenn Du nun 1 Objekt rauslöschst wird es auch nicht mehr gezeichnet (so wirst Du die Linie wieder los).</p>
<p>Und neuzeichnen :</p>
<p>versuchs mal mit invalidate update refresh oder so was.</p>
<p>(Ist nur ein schubs in die richtung, hab selbst mit onpaint noch nicht gearbeitet.)</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">struct PaintClass
{
  virtual void paint(CDC * dc) = 0;
};

class Line : public PaintClass
{
   int top;
   int left;
   int width;
   int height;

public:

   Line();
   virtual ~Line();

   set_und_get_Methode(); // Damit die Linie weiß wo sie hinsoll)
   virtual void paint(CDC * dc); // oder doch DC * ka virtual um ableiten zu können

};
</code></pre>
<pre><code class="language-cpp">class RechtEck : public PaintClass
{
   int top;
   int left;
   int width;
   int height;

public:

   RechtEck();
   virtual ~RechtEck();

   set_und_get_Methode(); // Damit die Linie weiß wo sie hinsoll)
   virtual void paint(CDC * dc); // oder doch DC * ka virtual um ableiten zu können

};
</code></pre>
<p>dann:</p>
<pre><code class="language-cpp">// Eine ID um das Objekt später wieder zu finden
  std::map&lt;int,PaintClass *&gt; m_paintJob;
</code></pre>
<p>Beim Knopf:</p>
<pre><code class="language-cpp">void Irgendwas::OnBtnClick_ZeichneLinie()
{
   Linie * temp = new Linie;
   Linie.DerLinieSagenWoSieHinSoll();
   int EindeutigeID = 12; // Für jedes Objekt ne neue ID
   m_paintJob.insert(std::make_pair(EindeutigeID,temp))
}

void Irgendwas::OnBtnClick_ZeichneRechteck()
{
   Rechteck * temp = new Rechteck;
   Linie.DerLinieSagenWoSieHinSoll();
   int EindeutigeID = 112; // Für jedes Objekt ne neue ID
   m_paintJob.insert(std::make_pair(EindeutigeID,temp))
}
</code></pre>
<p>Bei OnPaint:</p>
<pre><code class="language-cpp">CPaintDC dc(this); // Gerätekontext zum Zeichnen

  std::map&lt;int,PaintClass *&gt;::iterator pos;

  for(pos = m_paintJob.begin();pos != m_paintJob.end();++pos)
    pos-&gt;second-&gt;paint(dc); // Das Objekt zeichnen
</code></pre>
<p>Im Destruktor das Löschen nicht vergessen !!</p>
<pre><code class="language-cpp">std::map&lt;int,PaintClass *&gt;::iterator pos;
  for(pos = m_paintJob.begin();pos != m_paintJob.end();++pos)
    delete pos-&gt;second;
</code></pre>
<p>Da ich in MFC nicht wirklich fitt bin steckt viel standard drinne. Wenn Du also mehr auf MFC stehst musste mal pusseln. Aber der Ansatz dürfte hinkommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/392560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/392560</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Wed, 12 Nov 2003 15:07:56 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;Zeichnen auf Knopfdruck&amp;quot; on Thu, 13 Nov 2003 06:30:30 GMT]]></title><description><![CDATA[<p>Vielen Dank, das werd ich mich gleich mal durcharbeiten und es versuchen anzupassen!!</p>
<p>Gruß!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/392964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/392964</guid><dc:creator><![CDATA[FreakX]]></dc:creator><pubDate>Thu, 13 Nov 2003 06:30:30 GMT</pubDate></item></channel></rss>