<?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[template und virtual functionen]]></title><description><![CDATA[<p>hi, ich habe folgendes problem als beispiel</p>
<pre><code class="language-cpp">// basis klasse -&gt; kann nicht verändert werden

class CWnd
{
  void func();
};

// abgeleitete klasse -&gt; kann nicht verändert werden
class CEdit: public CWnd
{

};

// template
template &lt;class BASE&gt; class TWndD : public BASE
{
  virtual void xx()
  {

  };
};

// meine klasse
class CEditD : public TWndD&lt;CEdit&gt;
{
  CEditD()
  {
    //ich habe immer nur die möglichkeit mit der Basisklasse CWnd zu agieren
    TWndD&lt;CWnd&gt;* pWnd=(TWndD&lt;CWnd&gt;*)this;

    pWnd-&gt;xx();  // und hier ist der fehler, es wird immer eine andere function aufgerufen
  }

  void xx() {};

};
</code></pre>
<p>kann ich das problem überhaupt lösen, ich muss aber eine template benutzen, den es muss z.b. auch möglich sein:</p>
<pre><code class="language-cpp">class CComboBox: : public CWnd 
{

};

class CComboBoxD : public TWndD&lt;CComboBox&gt;
{
  void xx() {};
};
</code></pre>
<p>[ Dieser Beitrag wurde am 04.06.2003 um 08:26 Uhr von <strong>vdittrich</strong> editiert. ]</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/6062/template-und-virtual-functionen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 12:41:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/6062.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Jun 2003 06:23:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to template und virtual functionen on Wed, 04 Jun 2003 06:23:00 GMT]]></title><description><![CDATA[<p>hi, ich habe folgendes problem als beispiel</p>
<pre><code class="language-cpp">// basis klasse -&gt; kann nicht verändert werden

class CWnd
{
  void func();
};

// abgeleitete klasse -&gt; kann nicht verändert werden
class CEdit: public CWnd
{

};

// template
template &lt;class BASE&gt; class TWndD : public BASE
{
  virtual void xx()
  {

  };
};

// meine klasse
class CEditD : public TWndD&lt;CEdit&gt;
{
  CEditD()
  {
    //ich habe immer nur die möglichkeit mit der Basisklasse CWnd zu agieren
    TWndD&lt;CWnd&gt;* pWnd=(TWndD&lt;CWnd&gt;*)this;

    pWnd-&gt;xx();  // und hier ist der fehler, es wird immer eine andere function aufgerufen
  }

  void xx() {};

};
</code></pre>
<p>kann ich das problem überhaupt lösen, ich muss aber eine template benutzen, den es muss z.b. auch möglich sein:</p>
<pre><code class="language-cpp">class CComboBox: : public CWnd 
{

};

class CComboBoxD : public TWndD&lt;CComboBox&gt;
{
  void xx() {};
};
</code></pre>
<p>[ Dieser Beitrag wurde am 04.06.2003 um 08:26 Uhr von <strong>vdittrich</strong> editiert. ]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/29414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/29414</guid><dc:creator><![CDATA[vdittrich]]></dc:creator><pubDate>Wed, 04 Jun 2003 06:23:00 GMT</pubDate></item><item><title><![CDATA[Reply to template und virtual functionen on Wed, 04 Jun 2003 14:49:00 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<blockquote>
<p>TWndD&lt;CWnd&gt;* pWnd=(TWndD&lt;CWnd&gt;*)this;</p>
</blockquote>
<p>Dieser Cast ist schon mal verboten. *this ist ein CEditD. Legal wäre eine Konvertierung in eine der Basisklassen (TWndD&lt;CEdit&gt;, CEdit, CWnd).<br />
TWndD&lt;CWnd&gt; steht aber in *keiner* Beziehung mit CEditD.</p>
<blockquote>
<p>pWnd-&gt;xx();</p>
</blockquote>
<p>Mal abgesehen davon, dass der Aufruf hier undefiniertes Verhalten hat würde er auch nicht das tun, was du scheinbar denkst.<br />
Du bist innerhalb eiens Ctors dort gibt es keine dynamische Bindung. Wenn du hier eine virtuelle Methode einer Hierarchie aufrufst, wird immer die Methode der Klasse aufgerufen, in dessen Konstruktor du dich befindest (hier also CEditD::xx).</p>
<p>Was willst du eigentlich machen? Ich verstehe das Problem ehrlich gesagt nicht.</p>
<p>[ Dieser Beitrag wurde am 04.06.2003 um 16:50 Uhr von <strong>HumeSikkins</strong> editiert. ]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/29415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/29415</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Wed, 04 Jun 2003 14:49:00 GMT</pubDate></item><item><title><![CDATA[Reply to template und virtual functionen on Thu, 05 Jun 2003 06:40:00 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/110">@HumeSikkins</a></p>
<p>was will ich machen -&gt; nicht ganz einfach zu beantworten.</p>
<p>die klassenhierarchie ist die mfc und das ist schon das erste problem.</p>
<p>die hierarchie:</p>
<p>CWnd<br />
|<br />
CEdit<br />
|<br />
CEditD -- meine erweiterte klasse</p>
<p>CWnd<br />
|<br />
CComboBox<br />
|<br />
CComboBoxD -- meine erweiterte klasse</p>
<p>warum will und brache ich virtual functionen.</p>
<p>1. die fensterklasse combobox hat einen 3D border der in der Win-Fensterklasse bei WM_Paint gezeichnet wird. ich habe WM_Paint soweit bearbeitet das dieser border nicht mehr gezeichnet wird (funktioniert).</p>
<p>2. GetWindowRect(hWnd, &amp;rc) gibt mir die grösse zurück</p>
<p>3. da ich aber den border (ausschneide) brauche ich eine virtuale function, die mir die korrekte grösse zurückgibt.</p>
<p>3. SetWindowPos &amp;&amp; MoveWindow werden genauso bearbeitet</p>
<p>meine momentane klassenhierarchie mit den oben genannte eigenschaften funktioniert, der nachteil ich prüfe zur laufzeit die jeweilige klasse und cast sie dementsprechend (performents verlust).</p>
<p>in der mfc bekomme ich über CWnd* pWnd=CWnd::FromHandle(hWnd); die basisklasse</p>
<p>CWnd<br />
|<br />
CComboBox<br />
|<br />
CComboBoxD</p>
<p>ich habe mir gedacht mit template</p>
<p>CWnd<br />
|<br />
CComboBox<br />
|<br />
TWndD<br />
|<br />
CComboBoxD -&gt;class CComboBox: public TWndD&lt;CComboBox&gt;</p>
<p>gibt es eine möglichkeit im template TWndD virtuale functionen unterzubringen,<br />
die ich über *einen* aufruf von FromHandle(hWnd); aufrufen kann ????</p>
<p>volker</p>
]]></description><link>https://www.c-plusplus.net/forum/post/29416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/29416</guid><dc:creator><![CDATA[vdittrich]]></dc:creator><pubDate>Thu, 05 Jun 2003 06:40:00 GMT</pubDate></item><item><title><![CDATA[Reply to template und virtual functionen on Thu, 05 Jun 2003 09:38:00 GMT]]></title><description><![CDATA[<p>Hallo,<br />
sorry ich kann nicht folgen. Kannst du vielleicht ein kleines Beispiel zusammenbasteln (am Besten ohne MFC) das dein Problem bzw. dein Ziel verdeutlicht?</p>
<blockquote>
<p>gibt es eine möglichkeit im template TWndD virtuale functionen unterzubringen,<br />
die ich über *einen* aufruf von FromHandle(hWnd); aufrufen kann ????</p>
</blockquote>
<p>Natürlich kann eine Templateklasse eine virtuelle Methode einer Basisklasse überschreiben. Warum betonst du das *einen*?</p>
<p>Sehe ich es richtig, dass du dir über FromHandle ein Basisklassenpointer (CWnd) holen möchtest, über den du dann eine virtuelle Methode aufrufen willst mit dem Ergebnis das die Methode in der Templateklasse TWnd&lt;T&gt; aufgerufen werden soll?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/29417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/29417</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Thu, 05 Jun 2003 09:38:00 GMT</pubDate></item><item><title><![CDATA[Reply to template und virtual functionen on Thu, 05 Jun 2003 12:54:00 GMT]]></title><description><![CDATA[<p>hallo,</p>
<blockquote>
<p>Sehe ich es richtig, dass du dir über FromHandle ein Basisklassenpointer (CWnd) holen möchtest, über den du dann eine virtuelle Methode aufrufen willst mit dem Ergebnis das die Methode in der Templateklasse TWnd&lt;T&gt; aufgerufen werden soll?</p>
</blockquote>
<p>genau so ist es.</p>
<p>das problem ist</p>
<p>CWnd -basisklass kann vom inhalt nicht mehr verändert werden-<br />
|<br />
[eine klasse z.b CEdit]<br />
<em>die klasse beschreibt z.b die eigenschaften von einem Eingabefeld<br />
und kann ebenfals nicht mehr verändert werden</em><br />
|<br />
und hier beginnt meine arbeit. wie du schon oben erwähnt hast gibt mir eine statische function die basisklasse CWnd anhand eines Fensterhandle zurück.</p>
<pre><code class="language-cpp">class CWnd
{
  //hier stehen nur standartzugriffe z.b
  DWORD GetStyle()
  {
    return ::GetWindowLong(m_hWnd, GWL_STYLE);
  }
};

// template
template &lt;class BASE&gt; class TWndD : public BASE
{
  virtual void meineVirtualFunction()
  {
    //hier bearbeite ich standart
  };
};
</code></pre>
<p>mein template kann sowohl direkt</p>
<pre><code class="language-cpp">class CAbgeleitet_von_CWnd: public TWndD&lt;CWnd&gt;
{
  virtual void meineVirtualFunction()
  {
  //diese will ich nutzen
  };

};
</code></pre>
<p>als auch z.b von CEdit abgeleitet werden.</p>
<pre><code class="language-cpp">class CEdit: public CWnd
{
  //hier stehen nur allgemeine zugriffe für ein eingabefeld drin
};

class CEditD: public TWndD&lt;CEdit&gt;
{
 virtual void meineVirtualFunction()
  {
  //diese will ich nutzen
  };
};
</code></pre>
<p>mein ziehl wäre es</p>
<p>[cpp]<br />
//hwnd ist mein fensterhandle<br />
TWndD&lt;void/*weis ich ja nicht*/&gt;* pClass=TWndD&lt;void&gt;::FromHandle(hwnd);</p>
<p>//pClass soll jetzt meine klasse (basis) sein wo ich meine virtual functionen<br />
//schreiben und ansprechen kann. <em>es ist ja vorstellbar, das ich ein<br />
//pointer von pClass erhalte obwohl in meiner klassenhierarchie kein template<br />
//existiert.</em></p>
<p>pClass-&gt;meineVirtualFunction(); //und jetzt auf die virtual function zugreifen</p>
<p>DWORD n=pClass-&gt;GetStyle(); //steht in CWnd[/cpp]</p>
<p>hast du eine idee ??</p>
<p>[ Dieser Beitrag wurde am 05.06.2003 um 15:35 Uhr von <strong>vdittrich</strong> editiert. ]</p>
<p>[ Dieser Beitrag wurde am 05.06.2003 um 15:36 Uhr von <strong>vdittrich</strong> editiert. ]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/29418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/29418</guid><dc:creator><![CDATA[vdittrich]]></dc:creator><pubDate>Thu, 05 Jun 2003 12:54:00 GMT</pubDate></item><item><title><![CDATA[Reply to template und virtual functionen on Fri, 06 Jun 2003 06:01:00 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/110">@HumeSikkins</a></p>
<p>kann ich dich noch mal zu meinen problem befragen ?<br />
brauchst du vom mir noch zuarbeit oder kannst du meine vorstellung bzw. vorgehensweise nicht nachvollziehen.</p>
<p>volker</p>
]]></description><link>https://www.c-plusplus.net/forum/post/29419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/29419</guid><dc:creator><![CDATA[vdittrich]]></dc:creator><pubDate>Fri, 06 Jun 2003 06:01:00 GMT</pubDate></item><item><title><![CDATA[Reply to template und virtual functionen on Fri, 06 Jun 2003 10:02:00 GMT]]></title><description><![CDATA[<p>Hallo,<br />
sorry. Ich habe gestern abend zwar drüber nachgedacht, bin aber nicht wirklich dahinter gekommen wo genau der Schuh dich drückt.</p>
<blockquote>
<p>wie du schon oben erwähnt hast gibt mir eine statische function die basisklasse CWnd anhand eines Fensterhandle zurück.</p>
</blockquote>
<p>Also so:</p>
<pre><code class="language-cpp">class CWnd
{
public:
static CWnd* FromHandle( HWND hWnd );

};
</code></pre>
<blockquote>
<p>class CAbgeleitet_von_CWnd: public TWndD&lt;CWnd&gt;<br />
{<br />
virtual void meineVirtualFunction()<br />
{<br />
//diese will ich nutzen<br />
};</p>
<p>};</p>
</blockquote>
<p>Was bedeutet &quot;meineVirtualFunction&quot; in diesem Fall. Ist das eine beliebige virtuelle Funktion, die in CWnd deklariert ist und die du in deinen abgeleiteten Klassen überschreiben möchtest oder ist das eine *neue* virtuelle Funktion, die es in CWnd nicht gibt und erst in der Templateklasse zur Hierarchie hinzugefügt wird?</p>
<blockquote>
<p>TWndD&lt;void/*weis ich ja nicht*/&gt;* pClass=TWndD&lt;void&gt;::FromHandle(hwnd);</p>
</blockquote>
<p>Das kann nicht gehen. void ist keine gültige Basisklasse. Was soll hier stehen? Und vorallem wo tritt dieser Code auf?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/29420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/29420</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Fri, 06 Jun 2003 10:02:00 GMT</pubDate></item><item><title><![CDATA[Reply to template und virtual functionen on Fri, 06 Jun 2003 11:07:00 GMT]]></title><description><![CDATA[<p>hallo, entschulige der aufbau und hierarchie habe ich vieleicht doch etwas umständlich erklärt.</p>
<p>Also so: --&gt; korrekt</p>
<pre><code class="language-cpp">class CWnd
{
public:
static CWnd* FromHandle( HWND hWnd );

};
</code></pre>
<blockquote>
<p>Was bedeutet &quot;meineVirtualFunction&quot; in diesem Fall. Ist das eine beliebige virtuelle Funktion, die in CWnd deklariert ist und die du in deinen abgeleiteten Klassen überschreiben möchtest oder ist das eine *neue* virtuelle Funktion, die es in CWnd nicht gibt und erst in der Templateklasse zur Hierarchie hinzugefügt wird?</p>
</blockquote>
<pre><code class="language-cpp">//auszug aus CWnd
class CWnd
{
public:
  static CWnd* FromHandle( HWND hWnd );

  DWORD GetStyle() const;
  BOOL ModifyStyle(DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0);
  void GetWindowRect(LPRECT lpRect) const;

 //..
};

//auszug template
template &lt;class BASE&gt; class TWndD : public BASE
{
  virtual DWORD GetStyle() const
  {
    return BASE::GetStyle();     //wird standartmäßig weitergeleitet 
  };

  virtual BOOL ModifyStyle(DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0)
  {
    return BASE::ModifyStyle(DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0);
  };

  virtual void GetWindowRect(LPRECT lpRect) const
  {
    BASE::GetWindowRect(LPRECT lpRect);
  };

  enum cTyp
  {
    CEditD=0,
    CComboBoxD,
  };

  cTyp GetTyp()
  {
    //..
  }; 

  virtual SetClip(bool bClip)
  {
    //..
  };
};

//z.b teil hierarchie
class CEditD: public TWndD&lt;CEdit&gt;    //class CEdit:public CWnd; 
{

  virtual DWORD GetStyle() const
  {
    //..
  };

  virtual void GetWindowRect(LPRECT lpRect) const
  {
    //..
  };

};

class CComboBoxD:public TWndD&lt;CComboBox&gt;  //class CComboBox:public CWnd;
{
 virtual DWORD GetStyle() const
  {
    //..
  };

  virtual BOOL ModifyStyle(DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0)
  {
    //..
  };

  virtual void GetWindowRect(LPRECT lpRect) const
  {
    //..
  };

};

//und jetzt noch codebeispiel was ich in template umwandeln will

// extern CWndD class
#define CEditD_CWnd         &quot;CEditD&quot;
#define CComboBoxD_CWnd     &quot;CComboBoxD&quot;

class CWndD: public CWnd
{
public:
void CWndD::GetWindowRect(LPRECT lpRect) const
{
  CRuntimeClass* prt = this-&gt;GetRuntimeClass();
  char *sRet, *sClass=(char*)prt-&gt;m_lpszClassName;
  if ((sRet=strstr(sClass, CEditD_CWnd))!=0 &amp;&amp; (sRet-sClass)==0)
  {
    ((CEditD*)this)-&gt;GetWindowRect(lpRect);
    return;
  }
  if ((sRet=strstr(sClass, CComboBoxD_CWnd))!=0 &amp;&amp; (sRet-sClass)==0)
  {
    ((CComboBoxD*)this)-&gt;GetWindowRect(lpRect);
    return;
  }
  this-&gt;CWnd::GetWindowRect(lpRect);
}

//..

private:

struct eParam
{
  HRGN rgn;
  HWND hwnd;
};

BOOL CWndD::EnumChildProc(HWND hwndChild, LPARAM lParam) 
{
  eParam* tParam=(eParam*)lParam;
  if ((tParam-&gt;hwnd==::GetParent(hwndChild)) &amp;&amp; ::IsWindowVisible(hwndChild))
  {
    CWndD* pWnd=(CWndD*)CWnd::FromHandle(hwndChild);
    #ifdef _DEBUG
    {  
      ASSERT(pWnd &amp;&amp; pWnd-&gt;m_hWnd); 
      //CRuntimeClass* prt = pWnd-&gt;GetRuntimeClass();
      //TRACE(&quot;CALLBACK EnumChildProc %x class:%s\n&quot;, hwndChild, prt-&gt;m_lpszClassName);
    }
    #endif
    RECT rc; pWnd-&gt;GetWindowRect(&amp;rc);      //hier jetzt bitte die richtige grösse
    HRGN rgn=::CreateRectRgnIndirect(&amp;rc);
    ::CombineRgn(tParam-&gt;rgn, tParam-&gt;rgn, rgn, RGN_DIFF);   
    ::DeleteObject(rgn); 
  }
  return 1;
}

//..

};
</code></pre>
<p>ich habe das jetzt alles mal in einander kopiert, hoffenlich ist es für dich jetzt etwas übersichtlicher</p>
<p>[ Dieser Beitrag wurde am 06.06.2003 um 13:14 Uhr von <strong>vdittrich</strong> editiert. ]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/29421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/29421</guid><dc:creator><![CDATA[vdittrich]]></dc:creator><pubDate>Fri, 06 Jun 2003 11:07:00 GMT</pubDate></item><item><title><![CDATA[Reply to template und virtual functionen on Fri, 06 Jun 2003 16:33:00 GMT]]></title><description><![CDATA[<p>scheint also doch keine lösung zu geben ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/29422</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/29422</guid><dc:creator><![CDATA[vdittrich]]></dc:creator><pubDate>Fri, 06 Jun 2003 16:33:00 GMT</pubDate></item><item><title><![CDATA[Reply to template und virtual functionen on Fri, 06 Jun 2003 16:41:00 GMT]]></title><description><![CDATA[<blockquote>
<p>scheint also doch keine lösung zu geben ?</p>
</blockquote>
<p>Keine Ahnung. Ich für meinen Teil bin noch nicht mal dazu gekommen, dein letztes Posting zu lesen. Neben dem Forum erfordern schließlich auch andere Dinge meine Aufmerksamkeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/29423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/29423</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Fri, 06 Jun 2003 16:41:00 GMT</pubDate></item><item><title><![CDATA[Reply to template und virtual functionen on Fri, 06 Jun 2003 16:58:00 GMT]]></title><description><![CDATA[<blockquote>
<p>Original erstellt von HumeSikkins:<br />
<strong>[quote] scheint also doch keine lösung zu geben ?</strong></p>
</blockquote>
<p>**<br />
Keine Ahnung. Ich für meinen Teil bin noch nicht mal dazu gekommen, dein letztes Posting zu lesen. Neben dem Forum erfordern schließlich auch andere Dinge meine Aufmerksamkeit.**[/QUOTE]</p>
<p>das ist doch klar <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/110">@HumeSikkins</a>, ich bin doch froh wenn mir jemand helfen kann,<br />
ich finde keine lösung.</p>
<p>wenn du zeit hast, ich wäre dir sehr dankbar.</p>
<p>volker</p>
]]></description><link>https://www.c-plusplus.net/forum/post/29424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/29424</guid><dc:creator><![CDATA[vdittrich]]></dc:creator><pubDate>Fri, 06 Jun 2003 16:58:00 GMT</pubDate></item><item><title><![CDATA[Reply to template und virtual functionen on Fri, 06 Jun 2003 17:52:00 GMT]]></title><description><![CDATA[<p>Hallo,<br />
also ich verstehe nicht viel von der MFC, aber so wie ich das sehe machst du einiges verkehrt.</p>
<p>Erste Beobachtung:<br />
Die Methoden GetStyle(), ModifyStyle(), und GetWindowRect() sind in der Basisklasse als *nicht* virtuell deklariert. Sie können also *nicht* überschrieben werden und es macht überhaupt keinen Sinn sie in abgeleiteten Klassen als virtuelle Methoden zu implementieren. Ein Aufruf über eine CWnd::Referenz (CWnd) wird *immer* die Methoden von CWnd aufrufen.</p>
<p>Die virtuellen Methoden in deinen abgeleiteten Klassen überdecken die Basisklassen-Methoden. Das virtuell gilt erst für weiter abgeleitete Klassen.</p>
<p>Zweite Beobachtung:<br />
Die Implementationen deiner neuen virtuellen Methoden forwarden eh nur zur Basisklasse. Sie sind also überflüssig und können weg.</p>
<p>Dritte Beobachtung:<br />
Die Implementation von CWnd::GetWindowRect() sieht so aus:</p>
<pre><code class="language-cpp">_AFXWIN_INLINE void CWnd::GetWindowRect(LPRECT lpRect) const
{ ASSERT(::IsWindow(m_hWnd)); ::GetWindowRect(m_hWnd, lpRect); }
</code></pre>
<p>Es wird also nur die globale GetWindowRect-Funktion aufgerufen. Ein Überschreiben war wohl nie geplant. Der Aufruf ist unabhängig vom Window-Typ.</p>
<p>Vierte Beobachtung:<br />
Deine Implementation von CWndD::GetWindowRect macht unter Berücksichtung meiner ersten drei Beobachtungen überhaupt keinen Sinn.</p>
<p>Fünfte Beobachtung:<br />
Mir scheint du bist auf dem völlig falschen Dampfer.<br />
Kann es sein, dass du viel eher die virtuelle Funktion CalcWindowRect überschreiben musst?</p>
<p>Sechste Beobachtung:<br />
Was du hier brauchst und versuchst zu implementieren ist *dynamische* Polymorphie. Ein Template hilft dir hier also nicht weiter.</p>
<p>Siebte Beobachtung:<br />
Mir scheint das ganze ist eher ein MFC-Problem bzw. eine Frage danach, wie man ein bestimmtes Ziel zusammen mit der MFC erreicht.<br />
Ein Standard-C++ Problem sehe ich zumindest nicht. Insofern denke ich, du wärst im MFC-Forum besser aufgehoben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/29425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/29425</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Fri, 06 Jun 2003 17:52:00 GMT</pubDate></item><item><title><![CDATA[Reply to template und virtual functionen on Fri, 06 Jun 2003 18:25:00 GMT]]></title><description><![CDATA[<p>danke,</p>
<p>das thema kann geschlossen werden, da eine combobox ohne border nicht dargestellt werden kann. es ist zwangsläufig notwendig GetWindowRect(RECT&amp; rc)<br />
zu überladen -&gt;oder man baue sich eine combobox selbst.</p>
<p>danke volker</p>
]]></description><link>https://www.c-plusplus.net/forum/post/29426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/29426</guid><dc:creator><![CDATA[vdittrich]]></dc:creator><pubDate>Fri, 06 Jun 2003 18:25:00 GMT</pubDate></item></channel></rss>