Subclassing again ...



  • Kann man auch eine Nachricht zweier Steuerelemente, auf einem Dialogfeld, subclassen ? ZB: Von button1 zu button2. Oder muss die Nachricht zu einer neuen Fensterklasse umgeleitet werden ? Muss diese Fensterklase leben, damit meine ich Nachrichten verarbeiten ?



  • Meine Dialogklasse heisst CMeinDialog.
    Die Click Nachricht soll von Button1 nach Button2 umgeleitet werden.
    Folgender Code:

    CMeinDialog.h:
    CButton* b1;
    CButton* b2;

    CMeinDialog.cpp, ...OnInitDialog... :
    b1 = (CButton*)GetDlgItem(IDC_BUTTON1);
    b2 = (CButton*)GetDlgItem(IDC_BUTTON2);
    b2->SubclassDlgItem(IDC_BUTTON1, this); // stürzt ab !


  • Mod

    Was soll das bitte für einen Sinn haben?

    Die MFC kann natürlich ein Control immer nur einmal subclassen. Der Grund ist einfach. Die MFC ordnet einem Handle immer genau eine Klassen-Objekt zu.

    Der zweite Subclass würde hier ein Problem machen, weil zwei Objekte einem Handle zugeordnet sind.

    Theoretisch kann man natürlich Controls x-Mal subclassen.
    Klasse wie CSubclassWnd (Paul DiLascia), oder CHookWnd (PJ Naughter) können das auch mit MFC Klassen.
    Auch mit der ATL und CWindowsImpl ist dies einfach möglich.
    Ich habe dafür eine eigene Klasse gebaut, die ähnlich wie CHookWnd funktioniert aber näher an der ATL dran ist,

    Die Frage ist dennoch erstmal: Warum?



  • Ich meinte auch nur einmal subclassen: Die Nachricht von Button1 zu Button2 weiterleiten. Mittlerweile habe ich das Subclassing verstanden. Bleibt mir nur noch die Frage, wie ich per Subclassing einer ListBox ein Hintergrundbild verpassen kann. Entschuldige bitte das Missverständnis.


  • Mod

    Indem Du eine Klasse CMyListBox von CListBox ableitest und WM_ERASEBKGND überschreibst.


Log in to reply