プロが教えるわが家の防犯対策術!

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

A 回答 (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)、アプリケーション上の都合でビューポイントを
負にしたくないような場合があり、そのときは座標の調整が少し複雑になります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/08/07 10:23

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

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!