雑記 - otherwise

最近はDQ10しかやっていないダメ技術者がちまちまと綴る雑記帳

Windows Mobile の画面方向切り替え

少しずつ .NET Compact Framework 2.0 での Windows Mobile 向けアプリケーション開発の勉強などをし始めています。
とりあえず、簡単なタイマーの作成を最初の目標に掲げて頑張ろうと云う事で、色々調べていてちょっと気になったので備忘録として。
掲題の件をググってみると、 Form.Resize イベントで縦横のサイズをチェックして Portrait (縦長)と Landscape (横長)を判断する、と云うのがセオリーみたく書かれているのですが、もっとスマートにやる方法がありそうです。

↑の DisplayRotation を使えば、縦横が変更された際のイベントをフックできます。

public partial class Form1 {
  SystemState state;

  public Form1() {
    InitializeComponent();
    // DisplayRotation の状態をチェックする SystemState を作る
    state = new SystemState(SystemProperty.DisplayRotation);
    // Changed イベントの登録( DisplayRotation の値が変更されたタイミングで呼ばれる)
    state.Changed += new ChangeEventHandler(this.ChangeDisplayRotation);
  }

  private void ChangeDisplayRotation(object sender, ChangeEventArgs e) {
    // [static] SystemState.DisplayRotation の値は、 Portrait のときは 0 、 Landscape のときは 90 or -90 になる
    if (SystemState.DisplayRotation == 0) {
      // Portrait の表示処理(コンポーネントの配置、サイズ変更等)
    } else {
      // Landscape の表示処理(コンポーネントの配置、サイズ変更等)
    }
  }
}

ちなみに、実機をつなげられる環境が手元になかったので、エミュレータでの動作検証しかしていません。