Subclassing ...
-
Was versteht man denn unter Subclassing und wie wendet man es an ?
-
Bitte such mit Hilfe von Google.
-
Sag mal? Google kennst Du?
Du suchst nach "subclassing" und der dritte Link ist das:
http://msdn.microsoft.com/en-us/library/windows/desktop/bb773183(v=vs.85).aspxSubclassing bedeutet, dass Du Dich mit einer eigenen WindowProc in bestehende Fenster einklinkst.
Evtl. solltest Du vielleicht etwas mehr Windows KnowhHow ansammeln bevor Du an Skinning denkst.
-
Kann man mit Subclassing auch Hintergrundbilder für eine ComboBox einrichten ? zB. indem man als Basisklasse ein WM_ERASEBKGND bzw WM_PAINT Event abfängt ? Eigentlich ja, so wie Du Martin es beschrieben hast. Hoffentlich ist die Frage nicht zu dumm ! Es soll ja keine dummen Fragen geben !!
-
Du kannst alles machn was Du mit einer normalen Fensterprozedur auch machst.
Allerdings besteht eine ComboBox aus evtl. 3 Fenstern!
-
Gegoogelt habe ich schon, ohne Erfolg. Stattdessen habe ich etwas gefunden in folgendem Buch: Inside Visual C++.NET von Shepart und Kruglinski Seite 321. Danke nochmals !
-
In dem Buch folgendes:
Wenn es um ein CEdit Fenster in einem Dialogfeld geht, mit der ID ID_EDIT1, so legt man eine neue Klasse abgeleitet von CEdit an ( Subklasse ) und nennt sie vieleicht CMySubclassEdit und fängt darin die gewünschte Nachricht ab. In der Dialog Klasse schreibt man in OnInitDialog folgendes:
CMySubclassEdit edi;
edi.SubclassDlgItem(ID_EDIT1, this);Beim Google habe ich so etwas nicht gefunden.
-
MFC basiert grundsätzlich auf subclassing.
-
Bisher hat es nicht geklappt. Ich wollte den Hintergrund einer CListBox ( auf einem Dialogfeld ) mittels Subklasse blau färben. Dazu habe ich einen Subklasse mit Namen CMySubclass, abgeleitet von CListBox, erstellt, und habe einen Händler für das WM_CTLCOLOR Ereignis geschrieben. Nur der Hintergrund der ListBox blieb weiss. Interessanterweise wurde dieser Händler nie aufgerufen. CMySubclass verarbeitet offensichtlich keine Nachrichten. CMySubclass war darüberhinaus noch jungfräulich. Was mache ich falsch ?
-
Nochmals, In OnInitDialog habe ich wie oben:
CMySubclass edi;
edi.SubclassDlgItem(IDC_LIST1, this);eingetragen. IDC_LIST1 ist die ID der ListBox.
-
Du hast CMySubclass edi; in OnInitDialog? Dann wird es das Objekt nicht lange geben...
Du musst das als Member der Dialog-Klasse erzeugen, also im Header.in .h
CMySubclass m_edi;
und dann im .cpp
entweder im DoDataExchangeDDX_Control(pDX, IDC_LIST1, m_edi)
oder eben
m_edi.SubclassDlgItem(IDC_LIST1, this);
-
Ganz vergessen, ich habe es schon im Header deklariert. Ich denke, dass die Nachrichten erst verarbeitet werden, wenn das Fenster mit Show geöffnet wird, ich möchte aber bei der Subklasse kein Fenster öffnen.
-
Du möchtest ein Control Subclassen um es mit einem anderen Hintergrund darzustellen, aber kein Fenster anzeigen? Wenn ich nicht ganz daneben stehe, hättest du gerne heiße Eislutscher. Erklär mal genau was du erreichen willst.
-
Die Subklasse übernimmt die Nachrichten die normalerweise an die ListBox geht, zB. WM_CTLCOLOR und bewirkt das der Hintergrund von der ListBox gezeichnet wird. Meiner Meinung nach.
-
Die Subklasse selber soll kein Fenster öffnen !
-
Könnte mir vielleicht jemand zeigen, wie so eine Subklasse auszusehen hat ? Und vielleicht wie ein Subclassing rundrum aussieht.
-
Artikel mit Beispielcode
http://social.msdn.microsoft.com/search/de-de?query=concept%20subclassing&ac=8