- 01: 名前:名無しさん投稿日:2005/02/20(日) 22:51
- Visio2003のGetWindowRectメソッドは、
ウィンドウのクライアント領域のサイズと
位置を取得するとHELPに書いてありますが、
誤差というより、かなり大きなずれがあるよ
うですが、いかがでしょう?
Visio2003 SDKのコードライブラリーには
MapDrawingToScreenという関数のサンプル
コードがあります。この関数は、Visioの図面
上の座標をWindowの座標に変換する簡単な
関数ですが、この関数では、WindowRect
(ウインドウのクライアント領域)とViewRect
(Visioの図面ウインドウの領域)とが等しい
ものとして、計算していますが、実際には
GetWindowRect関数の誤差のため、等しく
なっていないようです。このため「雑談欄」
にあります「マウスアイコンのアニメーション」
のマクロを作るときにMapDrawingToScreen
関数が使えず、おかしなキャリブレーション
をしなければならなくなりました。
- 02: 名前:yoda投稿日:2005/02/21(月) 21:09
- もう一つ、分かったことは、Visioのウインドウのズーム倍率
の性質です。ズームの倍率を連続的に変化させても、表示
された実際の倍率は段階的にしか変化しません。
そのため、指定したズームに対して、正確な倍率で表示され
るのは、ズームの値が以下の場合に限られるようです。
単位はパーセントです。
10,15,20,25,30,35,50,75,100,150,200,500
実際、Visioの画面で、ズームの値を最初100%にしておい
て、次に110%に変えても、画面が全く変わりません。
このため、01で問題にしたGetWindowRecの誤差をなくすこと
ができたとしても、GetWindowRecの誤差誤差を小さくすること
はできないので、意味がないかもしれません。
- 03: 名前:yoda投稿日:2005/02/23(水) 09:28
- Visioの画面のズームについて、マイクロソフトのマーク・ネルソンさんから
以下のようなコメントをいただきました。参考になるので原文のまま、引用します。
『Visio uses specific zoom factors to show drawings and cannot display intermediate zoom levels. This was done to keep an
integral number of pixels between gridlines in the drawing. If this isn't done, shape size and alignment can appear to vary.
(How do you display a line that is supposed to be 4.5 pixels long? 4 pixels or 5 pixels?)
This is probably a technical problem that can be overcome with today's modern rendering surfaces, but Visio would need to
rewrite a big portion of its display engine first.』
■トップに戻る リロード 単独スレ表示
|