Verständnisproblem beim Subclassing



  • Hallo,

    Mein Wissen:

    eine MFC Applikation beinhaltet EINE Procedur (WndProc) um Nachrichten zu verarbeiten. In diese Procedur laufen ALLE Nachrichten rein und werden an weitere Child Wnds abgegeben. Die Child Wnds führen den Speziellen Code aus.

    Subclassing:
    Die WndProc Procedur kann durch das eigene ersetzt werden. Dazu muss die Fkt SetWindowLong aufgerufen werden.

    Problem:
    SetWindowLong erwartet einen Handler (hWnd) aber für was? Der WndProc wird doch der Hwnd als Parameter übergeben aber nicht einen Hwnd zugewissen.
    Bedeutet es vielleicht dass ich der Subclassing Procedur durch den Handler sagen kann dass alle Nachrichten für bestimmtes ChildWnd empfangen will?
    Aber wie kann ich das Problem lösen wenn ich z.B. auf alle CEdit und CListBox die Nachricht WM_SETFOCUS abfangen will?


  • Mod

    Michael S. schrieb:

    Mein Wissen:

    eine MFC Applikation beinhaltet EINE Procedur (WndProc) um Nachrichten zu verarbeiten. In diese Procedur laufen ALLE Nachrichten rein und werden an weitere Child Wnds abgegeben. Die Child Wnds führen den Speziellen Code aus.

    Nein! Die MFC verwendet zwar eine Fenster-Prozedur, aber es wird jedem Fenster eine eigene Klasse zugeordnet, die dann die Nachrichten bearbeiten.

    Technisch gesehen nutzt die MFC bereits subclassing, weil die originale Fensterprozedur umgebogen wird auf die MFC AfxWndProc!

    Subclassing:
    Die WndProc Procedur kann durch das eigene ersetzt werden. Dazu muss die Fkt SetWindowLong aufgerufen werden.

    Problem:
    SetWindowLong erwartet einen Handler (hWnd) aber für was? Der WndProc wird doch der Hwnd als Parameter übergeben aber nicht einen Hwnd zugewissen.
    Bedeutet es vielleicht dass ich der Subclassing Procedur durch den Handler sagen kann dass alle Nachrichten für bestimmtes ChildWnd empfangen will?
    Aber wie kann ich das Problem lösen wenn ich z.B. auf alle CEdit und CListBox die Nachricht WM_SETFOCUS abfangen will?

    Dann musst Du jedes der Fenster erneut subclassen. Oder Du leitest Deine eigene CEdit Klasse , benutzt die (wieder durch Subclassing 😉 ) ab und behandelst WM_SETFOCUS dort.

    Sie auch CSubclassWnd von Paul DiLascia...


Anmelden zum Antworten