Parameter an Window-Prozedur übergeben



  • Wie macht man das?
    Bisher benutze ich dafür immer globale Variablen, die ja bekanntlich nicht so den besten Ruf genießen. Ein Beispiel wäre toll...

    Danke.



  • Von WO aus willst Du denn WAS übergeben?



  • Indem du das CREATESTRUCT auswertest, das dir bei WM_CREATE als LPARAM geliefert wird.
    Du kannst Strukturen im Freispeicher anlegen und einen Zeiger per CreateWindow(Ex) als letzten Parameter angeben. Dieser wird genau so im CREATESTRUCT gespeichert.
    Eine andere Möglichkeit dazu wäre SetWindowLongPtr mit bspw. GWL_USERDATA. Die Abfrage des Wertes analog mit GetWindowLongPtr.

    Du kannst für jedes Fenster auch noch zusätzlichen Speicher anfordern.



  • Meinst du so?

    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	switch (message) // hier wird die nachricht abgefangen
    		{  
    
    			case WM_CREATE:
                                CREATESTRUCT ct = lParam;
    		}
        return DefWindowProc (hwnd, message, wParam, lParam);
    }
    
    // Jetzt auswerten
    


  • Ja... und in der CREATESTRUCT gibt es den Wert "lpCreateParams", welcher Du in CreateWindow(Ex) mitgegeben hast...
    http://msdn.microsoft.com/en-us/library/ms632603



  • Funktioniert das denn?
    Wohl eher nicht, oder? LPARAM ist unter 32Bit 4 Byte groß, schau dir doch mal CREATESTRUCT an, ist etwas größer.
    Du erhälst also nur einen Zeiger.

    case WM_CREATE:
    {
        LPCREATESTRUCT pStruct = reinterpret_cast<LPCREATESTRUCT>(lParam);
        ...
    }
    

    LPCREATESTRUCT ist direkt hinter CREATESTRUCT als ein Zeiger auf die Struktur definiert.

    Edit: Dein Kommentar // Jetzt auswerten irritiert mich ein wenig.


Log in to reply