• ベストアンサー

クリックした点を中止に拡大・縮小

CScrollViewを使い図形を描画し、 ルーペで図形を拡大したいと思っています。 単純な拡大は表示スケールをそのまま倍にすればよいのですが、クリックした点を中心に拡大することが出来ません。 どうしたらよいでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

拡大前のビューポイント=(Xv,Yv) (つまりウィンドウの左上点の図形上での座標) クリックした位置のビューポート上の座標=(Xp、Yp) とすると、クリックした位置の図形上での座標は(Xv+Xp、Yv+Yp) 拡大後にマウス位置が同じ点になるようにすればよいわけですな。 s倍に拡大したとすると、(s(Xv+Xp)、s(Yv+Yp)) この位置がビューポート上で(Xp、Yp)になればよいので、 ビューポイントを(sXv+(s-1)Xp、sYv+(s-1)Yp) にすればよいことになります。 ただし縮小する場合(s<1)、アプリケーション上の都合でビューポイントを 負にしたくないような場合があり、そのときは座標の調整が少し複雑になります。

youking
質問者

お礼

どうもありがとうございます。 数式を書いてみると分かりやすいですね。

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

クリックした点を中心とした矩形が取得できれば、あとはCDC::StretchBlt()でしょうね。

関連するQ&A