MSG verarbeitung in klasse einbetten



  • Hi,

    Es ist schon spät am Abend und meine Ausdrucksweise könnte etwas zu wünschen übrig lassen 🙂
    Ich scheine das mit der windows message verarbeitung noch nicht ganz geschnallt zu haben, vlt könnt ihr mir da nochmal auf die sprünge helfen.

    Ich weiß leider nicht wie ich die CALLBACK funktion mit einem child fenster Assozieren kann.

    An die LRESULT CALLBACK wird das handle und die initiale instanz sowie zwei parameter übergeben.

    Wenn ich jetzt mehrere child fenster habe die ich mit unterschiedlichen WM_PAINT routinen abarbeiten will, oder mit sendmessage andere Nachrichten, so übergebe ich Sendmessage zwar das HWND, aber woher "weiß" die CALLBACK fkt das die gemeint ist und keine andere??

    Ich wollte eigentlich die Nachrichtenverarbeitung von verschiedenen Childfenstertypen in Klassen einbetten, um für mich die übersichtlichkeit zu wahren, aber klappt leider net...

    kann mir da jemand mal auf die Sprünge helfen?

    Seid gegrüßt

    edit:
    -----------------------------------------------------
    Bei der initialen instanz weiß ich das eine wnd classe regristriert ist die auch den fkt namen der callback fkt enthält,....



  • Ok,... äh wie schon gesagt es ist spät am abend,...

    ich muss die klasse, auch wenns fürs child ist, registrieren,..

    uiuiui 🙄



  • CWindow::Create(...)
    {
    	CreateWindowEx(..., (LPVOID)this);
    }
    
    LRESULT CWindow::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    	switch (uMsg)
    	{
    		case WM_CREATE:
    			OnCreate();
    			break;
    
    		case xx:
    			OnXX();
    			break;
    
    		default:
    			return DefWindowProc(m_hwnd, ...);
    	}
    	return 0;
    }
    
    // redirect to class
    LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    	CWindow *win = (CWindow *)GetProp(hwnd, TEXT("THIS"));
    	if (uMsg == WM_NCCREATE)
    	{
    		win = (CWindow*)((CREATESTRUCT*)lParam)->lpCreateParams;
    		win->m_hwnd = hwnd;
    		SetProp(hwnd, TEXT("THIS"), (HANDLE)win);
    	}
    	if (uMsg == WM_NCDESTROY)
    	{
    		RemoveProp(hwnd, TEXT("THIS"));
    	}
    	return win ? win->WndProc(uMsg, wParam, lParam) : DefWindowProc(...);
    }
    

Anmelden zum Antworten