Ich schreibe eine Anwendung zeichnet in einem anderen Anwendungsfenster (das ist unter OS X mit Cocoa, aber die Frage ist allgemein genug, dass ich hoffe, dass es nicht vom Betriebssystem festgefahren wird/Framework-Probleme), und ich stoße auf ein Problem, das anscheinend eine einfache Antwort haben sollte, aber es macht mich absolut verrückt. Hier ist das Problem:Ränder für das Zeichnen nach der Fenstergrößenänderung beibehalten
Ich zeichne ein Rechteck in einem anderen Anwendungsfenster, das an einer bestimmten Stelle relativ zum oberen und linken Rand des Fensters sein muss (dh die Ränder zwischen meinem Rechteck und dem oberen & links vom Zielfenster müssen fest bleiben). Ich kann die relativen x, y Koordinaten berechnen, die als Prozentsatz der Fenstergröße benötigt werden, was gut funktioniert: das Rechteck wird korrekt angezeigt. Der Benutzer ändert dann jedoch die Größe des Fensters, und ich kann das Rechteck korrekt ändern, indem eine Transformation basierend auf dem Verhältnis der neuen Höhe und Breite zur alten Höhe und Breite verwendet wird, aber ich verliere meine relative Positionierung: Die Koordinaten des Rechtecks sind jetzt falsch (siehe Bild - das ist ein grober Nachbau des Problems).
image http://img30.imageshack.us/img30/5273/resizeexample.png
Nun habe ich nicht herausfinden kann, wie die neuen x zu berechnen, y-Koordinaten relativ zu dem oberen und dem Fenster verlassen. Das Fenster ist nicht quadratisch; Die Größenänderung wird durch die andere Anwendung eingeschränkt, aber das Seitenverhältnis Breite/Höhe ändert sich um eine unbekannte Funktion. Wenn ich die erforderlichen y-Koordinaten relativ ausmache, ändert sich der Prozentsatz, wenn das Fenster seine Größe ändert. Numerisch, sieht es so etwas wie diese:
Vor Resize:
Fenstergröße: h => 760, w => 546
Rechteck Herkunft: x => 355, y => 84 (zB 84/546 = 15,3 % der Höhe)
Nach resize:
Fenstergröße: h => 1009, w => 717
sollte Rechteck Ursprung sein:? (Ich kann es als etwas wie x => 474, y => 99 messen, aber ich kann nicht vorherzusagen diese Werte; 99/717 jetzt = 13,8% der Höhe).
Ich habe jedes Verhältnis der beiden Fenster Messungen ausprobiert, die ich mir vorstellen kann; Ich bin auch auf die Idee gestoßen, in den Ursprung zu übersetzen, zu skalieren und dann zurück zu übersetzen, um das Problem der Skalierung beim Verschieben der Koordinaten zu vermeiden - aber ich weiß nicht, wohin ich zurückübersetzen soll! Dies hat wahrscheinlich eine einfache geometrische/trigonometrische Lösung, aber mir fällt nichts ein, egal wie viele Diagramme ich zeichne. Ich bin bereit, die unvermeidliche Verlegenheit zu akzeptieren, dass jemand auf eine Ein-Zeilen-Lösung für dieses Problem hinweist, wenn sie mich hier in die richtige Richtung weisen kann!
"Ich zeichne ein Rechteck in das Fenster einer anderen Anwendung ..." Wie geht es Ihnen? –
Sorry, das hört sich komisch an, so wie ich es geschrieben habe. Ich zeichne nicht direkt in ihr Fenster, ich erzeuge nur ein neues Fenster über den angegebenen Koordinaten (NSWindow mit der Ebene NSStatusWindowLevel). – Winawer