Windows Phoneアプリケーション開発入門

第17回 Windows Phoneでグラデーションのボタンを作ってみよう!(4)

この記事を読むのに必要な時間:およそ 3 分

ボタンが押されている状態を描画する

次にボタンが押されている状態を描画します。ボタンが押されている押されていないを変化させるには,マウス(画面タップ)とキーボードごとに応じて別々のメソッドを使用します。

マウス(画面タップ)の場合には,OnMouseDownメソッド,OnMouseUpメソッドを利用します。OnMouseDownメソッドは,MouseDownイベントが発生したときに呼び出されます。

protected override void OnMouseDown(MouseEventArgs e)
{
    Capture = true;
    Focus();

    // 再描画要求
    Invalidate();
}

protected override void OnMouseUp(MouseEventArgs e)
{
    Capture = false;

    // 再描画要求
    Invalidate();
}

キーが押された場合は,OnKeyDownメソッド,OnKeyUpメソッドを利用します。ここではEnterキーのみを拾って表示の再描画を行っていますが,好みに合わせて変更してください。対象となったキーが押下されるとCaptureプロパティをTRUEにして,Invalidateメソッドを再描画要求を行います。

protected override void OnKeyDown(KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        Capture = true;
        Focus();

        // 再描画要求
        Invalidate();
    }
}

protected override void OnKeyUp(KeyEventArgs e)
{
    Capture = false;

    // 再描画要求
    Invalidate();
}

描画更新要求が行われると,OnPaintメソッドが呼び出されます。Captureプロパティの値をDrawButtonメソッドに渡します。

画像

いかがでしょうか? 少し押されているような印象になっていませんでしょうか。これでボタンの描画ができました。

押されたような効果を与えるために,押下時のボタンの淵に陰や光沢をDrawLineなどで入れれば,押されている感が強調され,よりボタンを立体的に見せることができるでしょう。

さいごに

画面上のタップや,キーの押下によって,インタラクティブにボタンの表示が変化したのが分かったでしょうか。

今回までボタンコントロールを,比較的簡単なControlクラスを継承して実装を行いました。これはボタンを描画する処理としての解説をメインとしたかったからです。ボタンコントロールであることを考えると,Buttonクラスを継承して実装するほうがよいかもしれません。

Buttonクラスを継承する場合は,サブクラス化を行う必要があり,本来.NET Compact Frameworkのランタイムが処理してくれる部分を自前でWindows Messageをフックして処理させる等,やや実装が複雑になります。ただ,.NET Compact Frameworkでは外せない技術ですので,次回取り扱いたいと思います。

以上で今回は終わりです。ありがとうございました。

著者プロフィール

和田健司(わだけんじ)

1982年10月12日生まれ。大阪で働くプログラマ。Microsoft MVP for Device Application Development(Jul 2010 - Jun 2011)。Windows Mobileに傾倒し今に至る。Windows Mobile向けのTipsを書いています。iPhoneアプリ開発を始めました。嫌いな食べ物はカレー。

URL: http://ch3cooh.jp/
Blog: http://d.hatena.ne.jp/ch3cooh393/

コメント

コメントの記入