解説

実例で学ぶWindowsプログラミング

第4回 操作性を向上させるファンクション・キーへの対応

― ユーザビリティを高めるファンクション・バーの実装(後編) ―

デジタルアドバンテージ 一色 政彦
2005/03/30
Page1 Page2 Page3 Page4


Back Issue
1
MDI型Windowsアプリケーションの基礎開発
2
継承と属性プログラミングで実現するRAD開発
3 ユーザビリティを高めるファンクション・バーの実装(前編)

 前回では、ファンクション・キーの入力を専門的に受け付けるツールバーである「ファンクション・バー」を実装した。引き続き今回もファンクション・バーに関する実装を解説する。

■前後編の解説の流れ

 前回でも説明したようにファンクション・バーの実装については、次の順番で説明していく。

【前編】

 

1. ファンクション・バーの実装(イメージ・リストの使い方とコンポーネントの概念)

【後編】

 

2. ファンクション・メニューの実装(マージ機能と独自イベント機能)

 

3. ファンクション・バーとファンクション・メニューのフォームへの追加

 後編である今回は2と3を説明する。

 なおWindowsアプリケーションでは、呼び出し可能なすべてのアプリケーション機能を、メニュー・バーのメニュー項目として登録することが一般的だ。このようにすることで、とにかくメニュー・バーを探せば目的の機能に必ずたどり着けるようになるわけである。このような目的のため、本稿のファンクション機能もメニュー・バーの中に格納することにした。

 メニュー・バーの特長は、メニュー項目を階層的に管理でき、しかも通常は折りたたまれて非表示になるので、表示領域が小さくて済むということだ。それだけでなく、先ほど述べたように、すべてのアプリケーション機能の呼び出しを格納できるということもメリットの1つだ。しかしそれが逆に弱点でもある。メニュー項目にアクセスするには、わざわざメニューを開いたり、数多くのメニュー項目の中から選択したりしなければならないなどアクセスしづらい。そこで、よく使う機能(本稿ではファンクション機能)はアクセスしやすいように、ツールバー(本稿ではファンクション・バー)として切り出した方が便利である。

 このような理由から本稿ではファンクション・バーとファンクション・メニューの2つを作成するわけである。

■本稿で開発するサンプル・アプリケーションのダウンロード

 前回と今回の2回にわたり作成した内容を含むWindowsアプリケーションのVS.NETプロジェクトは、次のリンクよりダウンロードできる。

 ・VS.NETプロジェクト(C#版VB.NET版

 それでは、さっそく「ファンクション・メニューの実装」の解説に入っていこう。

2. ファンクション・メニューの実装(マージ機能と独自イベント機能)

 本稿でファンクション・メニューと呼んでいるものは、[Escape]、[F1]〜[F12]の13個のファンクション・キーの入力を専門的に受け付けるメニュー・バーのことだ。ファンクション・メニューのそれぞれのメニュー項目が[Escape]、[F1]〜[F12]キーに対応している。具体的には次の画面のようなメニュー・バーである。

今回作成するファンクション・メニュー
ファンクション・メニューとは、[Escape]、[F1]〜[F12]の13個のファンクション・キーに対応したメニュー・バーである。ファンクション・バーと違い、[Escape]キーに対応した[閉じる]メニュー項目はメニュー・リストの最後(=最下部)に配置している。[閉じる]など終了関連のメニュー項目は、先頭に配置すると誤って押しやすくなってしまうので、一番下に配置することが多いが、今回はそれに倣った。

 メニュー・バーと聞いて、1つ疑問に思われるかもしれない。本連載では第1回のときに、MDI「親」ウィンドウに対して、すでにメニュー・バーを作成しているが、MDI「子」ウィンドウに対してさらにメニュー・バーを作成すると、どうなるのだろうか? メニュー・バーがMDI「親」ウィンドウとMDI「子」ウィンドウのそれぞれに表示されてしまうのではないか? それに関しては心配要らない。メニュー・バーの基本機能として、MDI子ウィンドウのメニュー・バーは、親ウィンドウのそれに自動的に統合(=マージ)されるからである(つまりMDI「子」ウィンドウ側にはメニュー・バーは表示されない)。

■マージの準備:MDI親ウィンドウのメニュー・バーに対する設定

 それではMDI子ウィンドウのメニュー・バーは、親メニュー・バーのどの位置に統合されるのだろうか? その統合位置については開発者が自由に制御できる。これを制御するには、(いくつかの方法が存在するが最も手軽な手段として)MergeOrderプロパティの設定を行えばよい。

 メニュー・バーのメニュー項目は、このMergeOrderプロパティに設定されたインデックス番号に従って並べられることになる。例えば、親メニューにある[ファイル]というメニュー項目に対するMergeOrderプロパティが「1」で、子メニューにある[操作]のMergeOrderプロパティが「0」ならば、[操作](0)→[ファイル](1)という並び順になる。

 MergeOrderプロパティの設定は、次の画面例のように[プロパティ]ウィンドウから簡単に行うことができる。

親メニューと子メニューをマージするためのMergeOrderプロパティの設定
メニュー・バーのメニュー項目は、MergeOrderプロパティに設定されたインデックス番号に従って並べられる。
  メニュー項目を選択する。
  MergeOrderプロパティに任意のインデックス番号を入力する。

 本稿では、親メニュー・バーの各メニュー項目のMergeOrderプロパティを、次のように設定した。

  • [ファイル]メニュー項目:「1」
  • [導入処理]メニュー項目:「3」
  • [業務処理]メニュー項目:「5」
  • [ウィンドウ]メニュー項目:「7」
  • [ヘルプ]メニュー項目:「9」

 これらの設定では、それぞれのメニュー項目ごとに(「1」「3」「5」「7」「9」というように)1つずつ間隔を置いているが、これらの間の番号(例えば「2」「4」「6」「8」など)を利用することで、MDI子ウィンドウのメニュー・バーのメニュー項目を任意の位置に追加できるようになる。

 例えば、[業務処理](5)と[ウィンドウ](7)のメニュー項目の間に、MDI子ウィンドウのメニュー項目を追加したいならば、そのメニュー項目のMergeOrderプロパティに「6」を設定すればよい。本稿のMDI子ウィンドウのメニュー項目は、実際にこのようにして(MergeOrderプロパティを「6」にして)メニューをマージすることにしよう。

 以上でMDI親ウィンドウ側の準備は完了だ。

 次に、実際のファンクション・メニューを作成していこう。


 INDEX
  解説:実例で学ぶWindowsプログラミング
  第4回 操作性を向上させるファンクション・キーへの対応(後編)
  1.ファンクション・メニューの実装
    2.FunctionMenuコントロールの作成
    3.独自イベントの実装方法
    4.ファンクション・バーとファンクション・メニューのフォームへの追加
 
インデックス・ページヘ  「解説:実例で学ぶWindowsプログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH