Handle auf CComboBox via subclassing erhalten
-
Guten Tag,
ich möchte eine CComboBox um einige Memberfunktionen erweitern und hoffe dass Subclassing ein möglicher Weg ist.
Allerdings benötige ich in der von CComboBox abgeleiteten Klasse das Handle auf die ComboBox, da ich die KomboBox in der abgeleiteten Klasse füllen möchte.
Wie komme ich an das Handle?
Danke.
-
Was willst Du?
Subclassing erweitert nicht die Klasse. Es ermöglicht Dir selber die Fensternachrichten zu bearbeiten und das bevor sie in der MFC oder anderen Fensterprozeduren ankommen.
-
Das Window-Handle der ComboBox erhältst du über den Cast-Operator CWnd::operator HWND (CWnd ist die Basisklasse aller Controls)
Aber warum benötigst du das HWND denn, du kannst doch in abgeleiteten Klassen direkt auf die (public und protected) Member der Basisklasse zugreifen?
-
Th69 schrieb:
Das Window-Handle der ComboBox erhältst du über den Cast-Operator CWnd::operator HWND (CWnd ist die Basisklasse aller Controls)
Aber warum benötigst du das HWND denn, du kannst doch in abgeleiteten Klassen direkt auf die (public und protected) Member der Basisklasse zugreifen?
Sorry, ich hatte mich falsch ausgedrückt. Ich benötigte den Zeiger auf die übergeordnete Combobox und dachte ich könnte über "this" darauf zugreifen und hatte es probiert, wobei dieser Zeiger bei mir leer war.
Als ich gestern in einem anderen Beispiel gesehen habe, dass dort this verwendet wird habe ich es nochmal getestet und es ging.
Danke
-
Martin Richter schrieb:
Was willst Du?
Subclassing erweitert nicht die Klasse. Es ermöglicht Dir selber die Fensternachrichten zu bearbeiten und das bevor sie in der MFC oder anderen Fensterprozeduren ankommen.
Ich habe Subclassing bisher auch immer nur (in vorgefertigeten Projekten) benutzt, um Fensternachrichten zu manipulieren.
Da ich nun in einem alten MFC VC6++ Projekt eine CComboBox benötige, die einige neue Funktionalitäten haben muss, wie man es von MS Access her kennt (gebundene unsichtbare und ungebundene sichtbare Spalten). Und weiterhin neue Funktionalitäten wie:
füllen der Box in einem Rutsch:
m_cCbo1.AddStringList("U01,U02,U03,U07,U04,U05,U09,RealTextU01,RealTextU02,RealTextU03,RealTextU07,RealTextU04,RealTextU05,RealTextU09");
//U01 .. U09 wird ausgewertet und RealTextU01 .. RealTextUxx" wird angezeigtfüllen aus einer DB.Tabelle mit gebundener und ungebundener Spalte:
m_cCbo1.AddStringListSql("DSN","SELECT * FROM tblComboBox WHERE rubrik=1);haben muss.
Hierzu habe ich einfach neue Member in die "Subclass" eingeführt und es funktioniert damit. Die Subclass erbt ja von CComboBox.
Wenn es dafür einen anderen Ansatz gibt, wäre eine Info sehr hilfreich.
Danke im Voraus.
-
Subclassing ist für mich in einem Windows System immer noch das Ersetzen der Fenster-Prozedur.
Du hast einfach eine neue Klasse abgeleitet... was ja nicht verkehrt ist für das was Du machen willst.