プログラム・コード(MainWindow.xaml.vb)
プログラム・コード(MainWindow.xaml.vb)
では、次にプログラム・コード(MainWindows.xaml.vbファイル)を見ていきましょう。
コードは4回のコードと似通っている部分については割愛します。4回のコード説明を参照してください。異なる部分のみ解説します。
名前空間の読み込み
「Imports Leap」と「System.Windows.Ink」名前空間の他に、今回はコード内でStoryboardを扱うため「System.Windows.Media.Animation」名前空間を読み込んでおきます。
メンバー変数の宣言
次にメンバー変数を宣言します。
今回もWin32 APIを使用するためにWin32 APIの宣言も行います。4回と同じWin32 APIを使用しています。Win32 APIに関しては4回と同じですが、定数メンバー変数は、
「Private Const MOUSEEVENTF_LEFTDOWN = &H2」
「Private Const MOUSEEVENTF_MOVE = &H1」
の2つを宣言します。
「leap」、「touchIndicator」、「touchPoint」、「windowWidth」、「windowHeight」、「tx」、「ty」、「x」、「y」、「FingersCount」等のメンバー変数については4回と同じのため、そちらの記事を参照してください。
これ以外に、XML要素を表すXElementクラス型のメンバー変数xmldocと、新しいStoryboardのインスタンスstrbメンバー変数を宣言します。また、Imageクラスのメンバー変数myImageも宣言しておきます(リスト3)。
リスト3 メンバー変数の宣言
・・・・コード略・・・
Private xmldoc As XElement
Private strb As New Storyboard
Private myImage As Image
・・・コード略・・・・
MainWindow_Loadedメソッドの処理
XElemet.LoadメソッドでXML文書(forest.xml)を読み込みます。Descendantsメソッドで全ての子孫要素の内容をresultに格納しながら、以下の処理を繰り返します。
新しいImageのインスタンスmyImageオブジェクトを作成し、Widthに320、Heightに240と指定します。Sourceプロパティに、”Images/”文字列と、要素の値を連結して、指定します。
AddHandlerステートメントで、マウスポインターがmyImageオブジェクトの境界内に入った時に発生するMouseEnterイベントに、イベントハンドラを追加します。
イベントハンドラ内では以下の処理を行います。
myImageの情報を持っているmySenderオブジェクトをDirectcCastでImageにキャストして変数_myImageに格納しておきます。
新しいStoryboardのインスタンスmyStoryBoardを作成します。
2-D x-y座標系内のオブジェクトをスケーリングする新しいScaleTransformのインスタンスmyScaleオブジェクトを作成します。
RenderTransformOriginプロパティで、要素の境界に対する中心点を取得します。
_myImageオブジェクトの描画位置に影響する変換情報にmyScaleオブジェクトを指定します。
新しいDoubleAnimationのインスタンスmyDoubleAnimationオブジェクトを作成します。タイムラインの再生に要する時間に300ミリセカンドと指定します。
アニメーションの開始位置を指定する[From]プロパティに「1」を指定し、アニメーションの終了値を指定する[To]プロパティに「-1」を指定します。
AddメソッドでmySroryboardオブジェクトにmyDoubleAnimationを追加します。
Storyboard.SetTargetPropertyにmyDoubleAnimationとPropertyPathを("RenderTransform.ScaleX")で初期化した新しいインスタンスを指定します。PropertyPathクラスはオブジェクトのデータバインディングと、アニメーションのストーリーボードタイムラインに使用されるクラスです。
StoryBoard.SetTargetでmyDoubleAnimationオブジェクトと、_myImageオブジェクトを指定します。SetTargetは指定したタイムラインが、依存関係オブジェクトを対象にするよう指定します。
同じように、新しいDoubleAnimationのインスタンスmyDoubleAnimation2オブジェクトを作成します。タイムラインの再生に要する時間に1000ミリセカンドと指定します。
アニメーションの開始位置を指定する[From]プロパティに「-1」を指定し、アニメーションの終了値を指定する[To]プロパティに「1」を指定します。
AddメソッドでmySroryboardオブジェクトにmyDoubleAnimation2を追加します。
Storyboard.SetTargetPropertyにmyDoubleAnimation2とPropertyPathを("RenderTransform.ScaleX")で初期化した新しいインスタンスを指定します。PropertyPathクラスはオブジェクトのデータバインディングと、アニメーションのストーリーボードタイムラインに使用されるクラスです。
StoryBoard.SetTargetでmyDoubleAnimation2オブジェクトと、_myImageオブジェクトを指定します。SetTargetは指定したタイムラインが、依存関係オブジェクトを対象にするよう指定します。
BeginメソッドでmyStoryBoardを開始します。
ListBox1にmyImageオブジェクトを追加します。これで、ListBox内に画像が表示されます(リスト4)。
- この記事のキーワード