Subclassing ...
-
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