<?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[Kreise, Vierecke, Dreiecke und Textelemente auf dem DC =(]]></title><description><![CDATA[<pre><code>class CMyDrawObject : public CObject  
{
// die Basis-Klasse
DECLARE_SERIAL( CMyDrawObject )

public:

	//Default Constructor und Destructor
	virtual ~CMyDrawObject();
	CMyDrawObject(){};

	CRect Pos;
	int Type;

	virtual void Serialize(CArchive&amp; ar)
		{ if (ar.IsStoring())
			ar &lt;&lt; Pos;
			else
			ar &gt;&gt; Pos;
		};

	virtual BOOL IsHit(CPoint &amp;point){ return FALSE;};
	virtual void Draw(CDC* pDC){};

	inline CRect&amp; GetPos(){return Pos;};

	inline void SetPos(CPoint nPos){
		CRect rect(nPos, nPos);
		rect.InflateRect(20,20);
		Pos=rect;
	};

};

class CMyCircleObject : public CMyDrawObject  
{
	DECLARE_SERIAL( CMyCircleObject )

public:

	virtual BOOL IsHit(CPoint &amp;point)
		{	CMyRgn HitRgn;
			HitRgn.CreateEllipticRgnIndirect(Pos);
			return HitRgn.PtInRegion(point);
		};
	virtual void Draw(CDC* pDC){ pDC-&gt;Ellipse(Pos);};

};

class CMyRectObject : public CMyDrawObject  
{
	DECLARE_SERIAL( CMyRectObject ) // für automatische Serialisierung

public:
	// keine extra constructoren und destruktoren definieren

	virtual BOOL IsHit(CPoint &amp;point)
		{	CMyRgn HitRgn;
			HitRgn.CreateRectRgnIndirect(Pos);
			return HitRgn.PtInRegion(point);
		};
	virtual void Draw(CDC* pDC){ pDC-&gt;Rectangle(Pos);};
};
</code></pre>
<p>Soweit alles gut und schön, ich kann sowohl Kreise als auch Vierecke durch klicken auf den DC erzeugen und bei anklicken verschieben.</p>
<p>Nun will ich aber weitere Elemente hinzufügen, Dreiecke und Textelemente.<br />
Später will ich das noch resizeable machen.</p>
<pre><code>class CMyTriangleObject : public CMyDrawObject  
{
	DECLARE_SERIAL( CMyTriangleObject ) // für automatische Serialisierung

public:
	CMyTriangleObject(){
			p[0]=CPoint(1,1);
			p[1]=CPoint(20,10);
			p[2]=CPoint(1,10);
			p[3]=CPoint(1,1);
	};

	virtual BOOL IsHit(CPoint &amp;point)
		{	CMyRgn HitRgn;
			HitRgn.CreateRectRgnIndirect(Pos);
			return HitRgn.PtInRegion(point);
		};
	virtual void Draw(CDC* pDC){pDC-&gt;Polyline(p,4);};

	CPoint p[4] ;
};
</code></pre>
<p>Das Ergebnis ist nun leider das er das Dreieck fest in die obere Linke ecke setzt. Ich kann der Polyline aber keine Position mitgeben. Gibt es da eine Mgl das ich die trotzdem verschoben bekomme?</p>
<p><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>Gruß<br />
McSnoop</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/179676/kreise-vierecke-dreiecke-und-textelemente-auf-dem-dc</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 22:19:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/179676.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 24 Apr 2007 12:04:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kreise, Vierecke, Dreiecke und Textelemente auf dem DC =( on Tue, 24 Apr 2007 12:04:56 GMT]]></title><description><![CDATA[<pre><code>class CMyDrawObject : public CObject  
{
// die Basis-Klasse
DECLARE_SERIAL( CMyDrawObject )

public:

	//Default Constructor und Destructor
	virtual ~CMyDrawObject();
	CMyDrawObject(){};

	CRect Pos;
	int Type;

	virtual void Serialize(CArchive&amp; ar)
		{ if (ar.IsStoring())
			ar &lt;&lt; Pos;
			else
			ar &gt;&gt; Pos;
		};

	virtual BOOL IsHit(CPoint &amp;point){ return FALSE;};
	virtual void Draw(CDC* pDC){};

	inline CRect&amp; GetPos(){return Pos;};

	inline void SetPos(CPoint nPos){
		CRect rect(nPos, nPos);
		rect.InflateRect(20,20);
		Pos=rect;
	};

};

class CMyCircleObject : public CMyDrawObject  
{
	DECLARE_SERIAL( CMyCircleObject )

public:

	virtual BOOL IsHit(CPoint &amp;point)
		{	CMyRgn HitRgn;
			HitRgn.CreateEllipticRgnIndirect(Pos);
			return HitRgn.PtInRegion(point);
		};
	virtual void Draw(CDC* pDC){ pDC-&gt;Ellipse(Pos);};

};

class CMyRectObject : public CMyDrawObject  
{
	DECLARE_SERIAL( CMyRectObject ) // für automatische Serialisierung

public:
	// keine extra constructoren und destruktoren definieren

	virtual BOOL IsHit(CPoint &amp;point)
		{	CMyRgn HitRgn;
			HitRgn.CreateRectRgnIndirect(Pos);
			return HitRgn.PtInRegion(point);
		};
	virtual void Draw(CDC* pDC){ pDC-&gt;Rectangle(Pos);};
};
</code></pre>
<p>Soweit alles gut und schön, ich kann sowohl Kreise als auch Vierecke durch klicken auf den DC erzeugen und bei anklicken verschieben.</p>
<p>Nun will ich aber weitere Elemente hinzufügen, Dreiecke und Textelemente.<br />
Später will ich das noch resizeable machen.</p>
<pre><code>class CMyTriangleObject : public CMyDrawObject  
{
	DECLARE_SERIAL( CMyTriangleObject ) // für automatische Serialisierung

public:
	CMyTriangleObject(){
			p[0]=CPoint(1,1);
			p[1]=CPoint(20,10);
			p[2]=CPoint(1,10);
			p[3]=CPoint(1,1);
	};

	virtual BOOL IsHit(CPoint &amp;point)
		{	CMyRgn HitRgn;
			HitRgn.CreateRectRgnIndirect(Pos);
			return HitRgn.PtInRegion(point);
		};
	virtual void Draw(CDC* pDC){pDC-&gt;Polyline(p,4);};

	CPoint p[4] ;
};
</code></pre>
<p>Das Ergebnis ist nun leider das er das Dreieck fest in die obere Linke ecke setzt. Ich kann der Polyline aber keine Position mitgeben. Gibt es da eine Mgl das ich die trotzdem verschoben bekomme?</p>
<p><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>Gruß<br />
McSnoop</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1272357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272357</guid><dc:creator><![CDATA[McSnoop]]></dc:creator><pubDate>Tue, 24 Apr 2007 12:04:56 GMT</pubDate></item><item><title><![CDATA[Reply to Kreise, Vierecke, Dreiecke und Textelemente auf dem DC =( on Tue, 24 Apr 2007 12:12:40 GMT]]></title><description><![CDATA[<p>Die Position des Polygons steckt in den Eckpunten (also in dem Array <code>CPoint p[4];</code> ), also mußt du die dort stehenden Koordinaten auch entsprechend anpassen (entweder direkt in der SetPos()-Methode oder vor dem Zeichnen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1272369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272369</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 24 Apr 2007 12:12:40 GMT</pubDate></item><item><title><![CDATA[Reply to Kreise, Vierecke, Dreiecke und Textelemente auf dem DC =( on Tue, 24 Apr 2007 13:22:22 GMT]]></title><description><![CDATA[<pre><code>class CMyTriangleObject : public CMyDrawObject  
{
	DECLARE_SERIAL( CMyTriangleObject ) // für automatische Serialisierung

public:

	CMyTriangleObject(){
	};

	virtual BOOL IsHit(CPoint &amp;point)
		{	CMyRgn HitRgn;
			HitRgn.CreateRectRgnIndirect(Pos);

			return HitRgn.PtInRegion(point);
		};

	virtual void Draw(CDC* pDC){ 

		pDC-&gt;Polyline(p,4);
	};

	inline void SetPos(CPoint nPos){
		CRect rect(nPos, nPos);
		rect.InflateRect(20,20);
	 	Pos=rect;

		// punkte sind erst einmal frei gewählt
		p[0]=CPoint(nPos.x,nPos.y);
		p[1]=CPoint(nPos.x,nPos.y+20);
		p[2]=CPoint(nPos.x+20,nPos.y);
		p[3]=CPoint(nPos.x+20,nPos.y+20);

	};

	CPoint p[4];

};
</code></pre>
<p>Meinst du das so?</p>
<p>Leider zeichnet er noch nichts, aber die Rgn setzt er an die Stelle wo ich hinklicke und ich kann diese auch verschieben. <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/1272425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272425</guid><dc:creator><![CDATA[McSnoop]]></dc:creator><pubDate>Tue, 24 Apr 2007 13:22:22 GMT</pubDate></item><item><title><![CDATA[Reply to Kreise, Vierecke, Dreiecke und Textelemente auf dem DC =( on Tue, 24 Apr 2007 15:43:04 GMT]]></title><description><![CDATA[<pre><code>virtual void Draw(CDC* pDC){ 

        p[0]=CPoint(Pos.left+((Pos.right-Pos.left)/2),Pos.top);
		p[1]=CPoint(Pos.left,Pos.bottom);
		p[2]=CPoint(Pos.right,Pos.bottom);
		p[3]=CPoint(Pos.left+((Pos.right-Pos.left)/2),Pos.top);

		pDC-&gt;Polyline(p,4);

	};
</code></pre>
<p>Jetzt zeichnet er mir auch die Polyline, aber erst wenn ich auf die Polyline nochmals klicke verschwindet die Spur die entsteht wenn ich die Polyline bewege.</p>
<p><a href="http://mcsnoop.mc.funpic.de/MFC/Problem.JPG" rel="nofollow">http://mcsnoop.mc.funpic.de/MFC/Problem.JPG</a></p>
<p>Was noch anzumerken ist, das bei dem Kreis und bei dem Viereck das nicht auftritt, obwohl bei den beiden das ebenfalls so gemacht wird wie bei dem Dreieck.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1272485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272485</guid><dc:creator><![CDATA[McSnoop]]></dc:creator><pubDate>Tue, 24 Apr 2007 15:43:04 GMT</pubDate></item><item><title><![CDATA[Reply to Kreise, Vierecke, Dreiecke und Textelemente auf dem DC =( on Tue, 24 Apr 2007 17:10:31 GMT]]></title><description><![CDATA[<p>hab den fehler gefunden.</p>
<p>Die Rect auf der die Elemente gezeichnet werden bildet die Grenze, sprich wenn diese Bewegt wird dann wird das neu gezeichnet was sich auf der Rect befindet und wenn nun was drauf ist was die Maße ein bisschen überschreitet bleibt das auf dem DC solange bin dieser für ungültig erklärt wird und die bestehenden Rgn Objecte neu gezeichnet werden.</p>
<p>Thread kann geclosed werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1272647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272647</guid><dc:creator><![CDATA[McSnoop]]></dc:creator><pubDate>Tue, 24 Apr 2007 17:10:31 GMT</pubDate></item></channel></rss>