Unity3d user32.dll Fenster ziehen und den Fokus zurücknehmen

8

Ich habe eine randlose Fensteranwendung und eine "falsche" Titelleiste erstellt, um sie zu ziehen.

Ich benutze user32.dll,

Dies, um das Ziehen des Fensters zu starten (ausgelöst durch Unity IBeginDragHandler):

%Vor%

Und damit aufhören zu ziehen (nicht sicher über diesen Teil):

%Vor%

Es funktioniert gut auf Editor und auf Build, aber ein Fehler, der auf developement build erzeugt:

  

Eine abnormale Situation ist aufgetreten: die PlayerLoop interne Funktion   wurde rekursiv aufgerufen. Bitte kontaktieren Sie den Kundendienst mit einem   Beispielprojekt, damit wir das Problem reproduzieren und Fehler beheben können   es. LauncherWindow: SendMessage (IntPtr, Int32, Int32, Int32)   LauncherWindow: StartWindowDrag () (bei E: \ Unity Projects \ Crime Club   Startprogramm \ Assets \ Skripts \ Lib \ LauncherWindow.cs: 115)   WindowDragZone: UnityEngine.EventSystems.IBeginDragHandler.OnBeginDrag (PointerEventData)   (unter E: \ Unity-Projekte \ Crime Club Launcher \ Assets \ WindowDragZone.cs: 9)   UnityEngine.EventSystems.ExecuteEvents: Execute (IBeginDragHandler,   BaseEventData) (um   C: \ Buildslave \ Unity \ Build \ Erweiterungen \ guisystem \ UnityEngine.UI \ EventSystem \ ExecuteEvents.cs: 64)   UnityEngine.EventSystems.ExecuteEvents: Ausführen (GameObject,   BaseEventData, EventFunction'1) (um   C: \ Buildslave \ Unity \ Build \ Erweiterungen \ guisystem \ UnityEngine.UI \ EventSystem \ ExecuteEvents.cs: 261)   UnityEngine.EventSystems.PointerInputModule: ProcessDrag (PointerEventData)   (beim   C: \ Buildslave \ Unity \ Build \ Erweiterungen \ guisystem \ UnityEngine.UI \ EventSystem \ InputModules \ PointerInputModule.cs: 261)   UnityEngine.EventSystems.StandaloneInputModule: ProcessMouseEvent (Int32)   (beim   C: \ Buildslave \ Unity \ Build \ Erweiterungen \ guisystem \ UnityEngine.UI \ EventSystem \ InputModules \ StandaloneInputModule.cs: 434)   UnityEngine.EventSystems.StandaloneInputModule: ProcessMouseEvent () (at   C: \ Buildslave \ Unity \ Build \ Erweiterungen \ guisystem \ UnityEngine.UI \ EventSystem \ InputModules \ StandaloneInputModule.cs: 412)   UnityEngine.EventSystems.StandaloneInputModule: Process () (at   C: \ Buildslave \ Unity \ Build \ Erweiterungen \ guisystem \ UnityEngine.UI \ EventSystem \ InputModules \ StandaloneInputModule.cs: 186)   UnityEngine.EventSystems.EventSystem: Update () (um   C: \ Buildslave \ Unity \ Build \ Erweiterungen \ guisystem \ UnityEngine.UI \ EventSystem \ EventSystem.cs: 283)

Was denkst du darüber?

BEARBEITEN: Okay, ich habe diesen Fehler endlich beseitigt, indem ich

ersetzt habe %Vor%

von:

%Vor%

Jetzt habe ich ein letztes kleines Problem: Die Fenster werden gezogen, fallen bei der Maus-Freigabe, aber ich sehe aus, als ob das Fenster den Fokus auf etwas wie das verliert: Der erste Klick fehlt immer, ich muss zweimal klicken, um wieder ziehen zu können oder einfach mit der Unity-App zu interagieren.

Ich habe Funktionen von User32 in OnEndDrag ausprobiert: ShowWindow, SetActiveWindow, SetFocus usw. Alles, was ich gefunden habe, hängt mit diesem Problem zusammen, aber alle haben keinen sichtbaren Effekt und ich muss immer noch zweimal klicken.

    
FLX 29.04.2017, 12:07
quelle

1 Antwort

3

Endlich wurde dieser Fehler behoben, indem SendMessage () ersetzt wurde durch:

%Vor%     
FLX 05.05.2017, 16:13
quelle

Tags und Links