- ベストアンサー
クリックした点を中止に拡大・縮小
CScrollViewを使い図形を描画し、 ルーペで図形を拡大したいと思っています。 単純な拡大は表示スケールをそのまま倍にすればよいのですが、クリックした点を中心に拡大することが出来ません。 どうしたらよいでしょうか? よろしくお願いします。
- みんなの回答 (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)、アプリケーション上の都合でビューポイントを 負にしたくないような場合があり、そのときは座標の調整が少し複雑になります。
その他の回答 (1)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
回答No.1
クリックした点を中心とした矩形が取得できれば、あとはCDC::StretchBlt()でしょうね。
お礼
どうもありがとうございます。 数式を書いてみると分かりやすいですね。