Als ich gerade ein altes Skript von mir aktualisiert habe, ist mir aufgefallen, wie man doch ohne Nachzudenken "übliche Verfahrensweisen" ohne diese zu hinterfragen einfach übernimmt.
Wenn wir uns die UDF für nicht-native Control ansehen fällt auf, dass ausnahmslos alle UDF, die intern das parent or owner window benötigen, dieses als Parameter in der _Create-Funktion anfordern.
Da ich das in den UDF so gesehen habe, habe ich das auch für meine Skripte ohne zu hinterfragen übernommen.
Jedenfalls bis ich das o.a. Skript überarbeitet habe. Ellenlange Parameterangaben in Funktionen sind dem Handling nicht gerade zuträglich. Deshalb habe ich nach Optimierung gesucht und dieses war das Parent-Handle: Es ist sinnfrei dieses anzufordern!
Warum? - Es gibt nur 2 Situationen der Control-Erstellung:
1. GuiCreate() wurde aufgerufen und ich erstelle nachfolgend Controls
2. GuiSwitch() wurde aufgerufen und ich erstelle nachfolgend Controls
In beiden Fällen befinde ich mich im Kontext des Parent/Owner-Window. Somit kann ich es bei meiner Control-Erstellung in einer UDF doch auch einfach erfragen:
Local $idDummy = GUICtrlCreateLabel('',0, 0, 1, 1) ; dummy control creation to get the current gui handle
Local $hGui = _WinAPI_GetParent(GUICtrlGetHandle($idDummy))
GUICtrlDelete($idDummy)
Das sind 3 Zeilen mehr Code, die aber einen Parameter überflüssig machen. Das sollte es doch wert sein.
Das echte Dummy-Ctrl (GUICtrlCreateDummy) kann dafür nicht verwendet werden, da es ein Fake-Ctrl ist, das kein Handle besitzt. War mir nicht bewusst, wurde aber beim Testen klar.
Falls also die Übergabe des Parameters einen tieferen Sinn haben sollte, erschließt sich dieser mir nicht. Vielleicht haben alle Autoren nach den 3 Lebensleitlinien gehandelt:
- Das haben wir schon immer so gemacht!
- Das haben wir noch nie so gemacht!
- Da könnte ja jeder kommen!