J'écris une application dessine dans la fenêtre d'une autre application (c'est sous OS X avec Cocoa, mais la question est assez générale que j'espère qu'elle ne sera pas enlisée par le système d'exploitation/problèmes de cadre), et je me heurte à un problème qui semble devoir être résolu, mais qui me rend absolument fou. Voici le problème:Conserver les marges pour dessiner après le redimensionnement de la fenêtre
Je dessine un rectangle à l'intérieur de la fenêtre d'une autre application qui doit être à un certain endroit par rapport au haut et à gauche de la fenêtre (ie les marges entre mon rectangle et le haut de la fenêtre cible doivent rester fixe). Je peux calculer les coordonnées x, y relatives requises en pourcentage de la taille de la fenêtre, ce qui fonctionne bien: le rectangle s'affiche correctement. Cependant, l'utilisateur redimensionne la fenêtre, et je peux redimensionner correctement le rectangle en utilisant une transformation basée sur le rapport de la nouvelle hauteur et largeur à l'ancienne hauteur et largeur, mais je perds mon positionnement relatif: les coordonnées du rectangle sont maintenant incorrectes (Voir l'image - c'est une maquette approximative du problème).
image http://img30.imageshack.us/img30/5273/resizeexample.png
Maintenant, je ne peux pas comprendre comment calculer les nouvelles coordonnées x, y par rapport au haut et à gauche de la fenêtre. La fenêtre n'est pas carrée. son redimensionnement est contraint par l'autre application, mais le rapport hauteur/largeur change par une fonction inconnue. Lorsque je mesure les coordonnées y requises en termes relatifs, le pourcentage change lorsque la fenêtre est redimensionnée. Numériquement, il ressemble à ceci:
Avant Redimensionner:
taille de la fenêtre: h => 760, w => 546
origine rectangle: x => 355, y => 84 (par exemple 84/546 = 15,3 % de la hauteur)
Après redimensionnement:
taille de la fenêtre: h => 1009, origine rectangle w => 717
doit être:? (Je peux le mesurer comme quelque chose comme x => 474, y => 99, mais je ne peux pas prédire ces valeurs, 99/717 maintenant = 13,8% de la hauteur). J'ai essayé tous les rapports des mesures des deux fenêtres auxquelles je peux penser; J'ai également croisé l'idée de traduire vers l'origine, de redimensionner, puis de traduire en arrière pour éviter le problème de mise à l'échelle en déplaçant les coordonnées - mais je ne sais pas où traduire à! Cela a probablement une solution géométrique/trigonométrique simple, mais rien ne me vient à l'esprit, peu importe le nombre de diagrammes que je dessine. Je suis prêt à accepter l'embarras inévitable de quelqu'un qui pointe une solution d'une ligne à ce problème s'il peut simplement me pointer dans la bonne direction ici!
"Je dessine un rectangle dans la fenêtre d'une autre application ..." Comment faites-vous cela? –
Désolé, ça a l'air bizarre comme je l'ai écrit. Je ne dessine pas directement dans leur fenêtre, je crée juste une nouvelle fenêtre sur les coordonnées spécifiées (NSWindow avec le niveau défini sur NSStatusWindowLevel). – Winawer