CodeFatal
Erfahrenes Mitglied
Hi zusammen,
ich hab ein Problem mit dem Thema Vererbung genauer Mehrfach-Vererbung.
Ich möchte folgendes erreichen:
Klasse "CMyWnd" von "CWnd" abgeleitet
Klasse "CMyStatic" von "CStatic" und "CMyWnd" abgeleitet
Meine Problem ist nun die Funktiionalität von CStatic mit der von CMyWnd in CMyStatic zu verbinden.
Meine Idee ist das in der Klasse CMyWnd alle allgemeinen Dinge ablaufen wie z.B die Entscheidung ob der Hintergrund gelöscht wird oder nicht. oder ob eine Grafik auf den Hintergrund gezeichnet wird oder nicht.
Die Klasse CMyStatic soll im ersten Schritt nach außen wie CStatic arbeiten und jediglich den Hintergrund wie in CMyWnd bearbeiten.
Dazu müsste aber erst die OnPaint funktion von CMyWnd ausgeführt werden und darauf die Standard OnPaint von CStatic.
Meine Frage ist nun wie schaffe ich dies?
Zu beachten ist dabei das in Zukunft die Klassen CMyWnd und CMyStatic erweitert werden. CMyWnd soll ebenfalls in anderen Objekten wie CEdit und Co zum Einsatz kommen.
Was muss ich tun um dies zu erreichen? Als erstes beschwert sich der Kompiler darüber, das auf CWnd auf zwei wegen zugegriffen wird und er nicht weiß welchen er nehmen soll. Die Problematik ist klar aber die Lösung nicht in Sicht
Habt ihr nen guten Tip das Problem zu lösen? Bzw wie kann ich die Aufgabe lösen ohne das ich den Code von CMyWnd in CMyStatic implementiere und anschließend in alle anderen Objekte kopiere...
Folgende Stukturen habe ich bereits
CMyWnd - Header Datei:
CMyWnd - CPP Datei:
CMyStatic - Header Datei:
CMyStatic - CPP Datei:
Hier müsste CMyWnd ebenfalls eingearbeitet sein
Ich hoffe ihr könnt mir helfen...
Danke schon mal im voraus
Gruß Michael
ich hab ein Problem mit dem Thema Vererbung genauer Mehrfach-Vererbung.
Ich möchte folgendes erreichen:
Klasse "CMyWnd" von "CWnd" abgeleitet
Klasse "CMyStatic" von "CStatic" und "CMyWnd" abgeleitet
Meine Problem ist nun die Funktiionalität von CStatic mit der von CMyWnd in CMyStatic zu verbinden.
Meine Idee ist das in der Klasse CMyWnd alle allgemeinen Dinge ablaufen wie z.B die Entscheidung ob der Hintergrund gelöscht wird oder nicht. oder ob eine Grafik auf den Hintergrund gezeichnet wird oder nicht.
Die Klasse CMyStatic soll im ersten Schritt nach außen wie CStatic arbeiten und jediglich den Hintergrund wie in CMyWnd bearbeiten.
Dazu müsste aber erst die OnPaint funktion von CMyWnd ausgeführt werden und darauf die Standard OnPaint von CStatic.
Meine Frage ist nun wie schaffe ich dies?
Zu beachten ist dabei das in Zukunft die Klassen CMyWnd und CMyStatic erweitert werden. CMyWnd soll ebenfalls in anderen Objekten wie CEdit und Co zum Einsatz kommen.
Was muss ich tun um dies zu erreichen? Als erstes beschwert sich der Kompiler darüber, das auf CWnd auf zwei wegen zugegriffen wird und er nicht weiß welchen er nehmen soll. Die Problematik ist klar aber die Lösung nicht in Sicht

Habt ihr nen guten Tip das Problem zu lösen? Bzw wie kann ich die Aufgabe lösen ohne das ich den Code von CMyWnd in CMyStatic implementiere und anschließend in alle anderen Objekte kopiere...
Folgende Stukturen habe ich bereits
CMyWnd - Header Datei:
Code:
class CMyWnd:public CWnd
{
public://Konstruktor - Destruktor
CMyWnd();
~CMyWnd();
...
public://MessageMap
//{{AFX_MSG(CMyWnd)
afx_msg virtual void OnPaint();
afx_msg virtual BOOL OnEraseBkgnd(CDC* pDC);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CMyWnd - CPP Datei:
Code:
BEGIN_MESSAGE_MAP(CMyWnd, CWnd)
//{{AFX_MSG_MAP(CMyWnd)
ON_WM_PAINT()
ON_WM_ERASEBKGND()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//Konstruktor
CMyWnd::CMyWnd()
{
...
}
//Destruktor
CMyWnd::~CMyWnd()
{
...
}
//afx Funktionen
void CMyWnd::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein.
// CWnd::OnPaint() soll zum Zeichnen von Meldungen nicht aufgerufen werden.
//Zeichen Operation die für alle abgeleiteten Objekte identisch sein sollen.
...
}
BOOL CMyWnd::OnEraseBkgnd(CDC* pDC)
{
//Allgemeine Entscheidung ob Erase oder nicht
...
return CWnd::OnEraseBkgnd(pDC);
}
CMyStatic - Header Datei:
Code:
class CMyStatic:virtual public CStatic,virtual public CMyWnd
{
public:
CMyStatic();
~CMyStatic();
public://MessageMap
//{{AFX_MSG(CMyStatic)
afx_msg virtual void OnPaint();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CMyStatic - CPP Datei:
Hier müsste CMyWnd ebenfalls eingearbeitet sein
Code:
BEGIN_MESSAGE_MAP(CMyStatic, CStatic)
//{{AFX_MSG_MAP(CMyStatic)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//Konstruktor
CMyStatic::CMyStatic():CStatic(),CMyWnd()
{
}
//Destruktor
CMyStatic::~CMyStatic()
{
}
//afx Funktionen
void CMyStatic::OnPaint()
{
CPaintDC dc(this); // device context for painting
...//Änderungen für Zeichen des Objekts
}
Ich hoffe ihr könnt mir helfen...
Danke schon mal im voraus
Gruß Michael