ウマ耳画像あります

画像の拡大と縮小とスクロールができるようになりました

クリックして画像をつかみ、カーソルを動かす事によってスクロールができます。
またマウスホイールで拡大縮小ができるようになりました。
ちょっとやりにくいですが、それらを同時に行うことも可能です。

苦労の痕跡があちこちに残ったコードになりました。
ばこばことスレッドを立て、気づいたら使わないイベントオブジェクトまで定義していたり、
一度ある処理を行ってから、それと同じ事をするメソッドを呼び出していたり。

実装とか

ウィンドウメッセージが来るごとにいちいち拡大していては重すぎるので、倍率が変更されるごとに、とりあえずバッファへ描きます。
そのあとWM_PAINTのハンドラでバッファから窓へBitBltします。


バッファの大きさは最低でもデスクトップと同じで、それよりも大きく拡大したときは、デスクトップよりも大きくなります。
拡大しまくると65000x50000くらいになります。それ以上はエラーになりますが。


バッファと、バッファ上にある画像と、窓へBitBltする範囲の関係は下の図のようになります。
バッファのサイズとバッファ上の画像のサイズは、必ずしも一致しません。
また窓のサイズは変わりますから、下の赤い枠の大きさも変わります。
それと青い枠の中心(*1)は、バッファの中心と必ず一致します。

赤枠は、青枠をはみ出しません。つまり青枠の外がBitBltされることはありません。
ただし例外として、青枠が赤枠よりも小さい場合は、青枠の外も余白としてBitBltされます。(下の図)

ウマ耳

*1:対角線の交点かな