Clicky

Welcome to MSDN Blogs Sign in | Join | Help

News

  • This blog is in Japanese only. コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。
Silverlight 2 の新機能 - Deep Zoom(マウスホイール編)

前エントリでは、Deep Zoom の基本的な使い方について、ご紹介しました。ここで取り上げた Hard Rock Memorabilia では、マウスのホイールによってズーム(拡大縮小)を操作できるようになっています。このホイールの機能を自分のアプリケーションに実装するにはどうすればよいでしょう。

残念ながら、現在の Silverlight にはマウスホイールを扱う機能はありません。しかし、Live Search Maps がマウスホイールで地図の拡大縮小を行えるのですから、方法はあります。Live Search Maps では JavaScript を使っていますが、今回は Silverlight ですからマネージコードを使いたいでしょう。そのためには自分でホイールイベントを処理して、ブラウザの違いを吸収して……という処理が必要なのですが、Pete Blois さんという方が、ブログのエントリで、まさにこの処理のためのクラスを紹介されていました。どのような処理が必要かは、このソースコードを見るとわかります。

さて、このクラスを使うことで、昨日のプログラムを以下のように拡張できます。

    using akadia;

    ......

        Point lastPos = new Point(); // ホイールのためにマウスの最後の位置を保存しておく

        public Page()
        {
            InitializeComponent();

            // マウスホイールを扱うクラスのオブジェクトを生成し、ハンドラでズーム処理
            new MouseWheelHelper(this).Moved += delegate(object sender, MouseWheelEventArgs e)
            {
                if (e.Delta < 0)
                    Zoom(lastPos, 0.8);
                else
                    Zoom(lastPos, 1.2);
                e.Handled = true;
            };
        }

また、OnMouseMove イベントハンドラの最後には、以下のコードを追加しておきます。

                msi.ViewportOrigin = msi.ElementToLogicalPoint(p);
            }

            lastPos = e.GetPosition(msi); // マウスの最後の位置を保存
        }

今回は、昨日よりも小さいイメージですが(写真としては1枚)、少し遊びの要素を入れてみました。試してみてください。
→「平井昌人を探せ!

Posted: Wednesday, March 12, 2008 7:54 PM by mohno
Filed under: ,

Comments

Anonymous comments are disabled
Page view tracker