2009-06-20 5 views
0

私はアプリケーションを別のアプリケーションのウィンドウに描画しています(これはOS XのCocoaですが、一般的に問題はオペレーティングシステム/フレームワークの問題)、私はそれが単純な答えを持つべきであるように見える問題にぶち当たっていますが、それは私を絶対に狂ってしまいます。ここに問題があります:ウィンドウのサイズ変更後に描画の余白を維持する

私は、ウィンドウの左と上の特定の位置にある別のアプリケーションのウィンドウ内に矩形を描画します(つまり、私の四角形とターゲットウィンドウの最上部の余白は、固定されたままである)。ウィンドウのサイズのパーセンテージとして必要な相対x、y座標を計算できます。これは正常に機能します。長方形が正しく表示されます。しかし、ユーザーはウィンドウのサイズを変更して、古い高さと幅に対する新しい高さと幅の比率に基づく変換を使用して矩形のサイズを正しく変更できますが、相対位置が失われます:矩形の座標が正しくない(画像を参照してください - これは問題の概略です)。

image http://img30.imageshack.us/img30/5273/resizeexample.png

さて、私は新しいのxを計算する方法を見つけ出すことはできません、yはトップに相対して、ウィンドウの左座標。ウィンドウは正方形ではありません。そのサイズ変更は他のアプリケーションによって制約されますが、アスペクト比の幅/高さは未知の機能によって変化します。必要なy座標を相対的に測定すると、ウィンドウのサイズが変更されたときにパーセンテージが変化します。例えば= 15.3 546分の84のx => 355、Y => 84(:リサイズ前


ウィンドウのサイズ:H => 760、W => 546
長方形の原点数値、それは次のようになります高さの%)

リサイズ後:
ウィンドウサイズ:H => 1009、W => 717
矩形の原点は次のようになりますか? (私はx => 474、y => 99のように測定できますが、と予測できません; 99/717は現在高さの13.8%です)。

私は考えることができる2つのウィンドウの測定値のあらゆる比率を試しました。私は原点に変換し、スケーリングし、座標を移動するスケーリングの問題を避けるために翻訳するというアイデアを実行しましたが、どこに翻訳するのかはわかりません!これには幾つかの単純な幾何学的/三角法の解決策があるかもしれませんが、いくつの図を描いても何も起こりません。私はここに正しい方向に私を向けることができれば、この問題に対するいくつかの1行の解決法を指摘する誰かの避けられない恥ずかしさを受け入れることを望んでいます!

+0

「別のアプリケーションのウィンドウ内に長方形を描画しています...どうしていますか? –

+0

申し訳ありませんが、私はそれを書いたように奇妙に聞こえます。私は自分のウィンドウに直接描画していない、私は指定されたcoordiantes(レベルをNSStatusWindowLevelに設定してNSWindow)上に新しいウィンドウを作成しています。 – Winawer

答えて

0

Appleと他の人がどうやってこれをやっているのか分かりません。正直言って、私がやりとりしようとしているアプリケーションは、これが覚えていないと思います。問題を解決するために、私はちょうど一組の異なる(x、y)ペアをサンプリングし、任意の座標の正しい座標を予測する線形モデルを構築しました。ちょっとしたハンマーですが、私が思いつくのは最高です。

0

あなたはそれが上から左top単位からleft台になりたい場合は、としての起源を試してみてください。

X:left
Y:後世のためにwindow.frame.size.height - rectangle.frame.size.height - top

+0

しかし、...ウィンドウのサイズが変更された後のトップがわかりません。それは未知の量です。または私はここに何かを逃していますか?移動前に矩形を546 + 84(原点は左上)に配置できますが、ウィンドウのサイズ変更後、新しい高さは717になります。新しい原点は717 + xでなければなりませんが、前のように上から同じ相対距離を保つようにxを設定するもの。 (私はそれを99として測定しましたが、私が持っている値からその値を計算する方法はわかりません) – Winawer

+0

トップからの距離を一定に保たれたくありませんでしたか? –

+0

余白は一定ですが、ウィンドウのサイズ変更のために上からの距離はありません。私はそれをより良く説明する方法を知らない。おそらく問題の一部である。 Interface Builderでは、自動調整コントロールでは次のようになります。http://img221.imageshack.us/img221/7292/ibexample.pngウィンドウのサイズが変更されても、マージンが同じままであることに注意してください。これが私自身のアプリなら、ココアは私のためにそれをするだろうが、私は今自分でこれを計算しなければならないことに直面しており、問題がある。 – Winawer