ACT-2前回はメニューバー上のアイテムだけの、最も簡単なメニューの例を示しました。今回はもう少し複雑にして、メニューバー上のアイテムを選択するとドロップダウンメニューが表示されるようにしてみましょう。本題に入る前に、メニューの種類について、簡単に説明しておきましょう。メニューには、その形状や特徴に応じて、いくつかの呼び名があります。前回作成された、ウィンドウ上部に表示されるメニューがメニューバーです。メニューバーはトップレベルメニューと呼ばれることもあります。次に、メニューバーのアイテムが選択されたときに、そのアイテムの下にポップアップ表示されるメニューがドロップダウンメニューです。ドロップダウンメニューの中には、子供メニューを持つアイテムを持つものがあります。このときの子供メニューはサブメニューと呼ばれ、アイテムの横にポップアップ表示されます。マウスを右クリップしたときに、マウスカーソルの位置に、メニューがポップアップ表示されることがありますね。このようなメニューはショートカットメニューと呼ばれます。ショートカットメニューは、ウィンドウのある場所やアイコンなどに関連付けられて表示されることが多いので、コンテキストメニューと呼ばれることもあります。ドロップダウンメニュー、サブメニュー、ショートカットメニューの3つは、スクリーン上にポップアップ表示されるので、これらを総称してポップアップメニューと呼ぶことがあります。これらとは別に、ウィンドウのタイトルバーやタスクバーのアイコンを右クリックしたり、タイトルバーの小さいアイコンを左クリックしたときに表示されるメニューがありますね。これは、Windowsによって定義・管理されるているメニューで、ウィンドウメニューと呼ばれるものです。システムメニューとか、コントロールメニューと呼ばれることもあります。ドロップダウンメニューの追加さて、改めて確認しておくと、今回作成するのは、ドロップダウンメニューを持つメニューバーです。メニューバー上のアイテムが選択されたときに、新しいメニューがポップアップ表示されるようにします。メニューバー上のアイテムにドロップダウンメニューを付けるには、まずドロップダウンメニューとして表示するためのメニューオブジェクトを作成しておいて、それをメニューアイテムとしてメニューバーに追加します。CreatePopupMenu(VOID);この関数は、ポップアップメニューと呼ばれるメニューオブジェクト(ショートカットメニュー、サブメニュー、ドロップダウンメニュー)を作成して、そのハンドルを返します。このハンドルは、作成されたメニューオブジェクトを識別するための値で、以後、このメニューを操作するにはこのハンドルを用いることになります。関数でメニューバーにメニューアイテムを追加していきます。指定すると、そこにセパレータ(区切り線)が追加されます。関数によって作成された他のメニューオブジェクトのハンドルを指定することで実現できます。関数でサブメニューをアイテムとして追加していくことができます。これにより、第3階層、第4階層と、メニューの階層を深くしていくことができます。ドロップダウンメニューの準備ができたら、それをメニューバーにアイテムとして追加します。パラメータには追加するドロップダウンメニューのハンドルを指定します。これ以外の処理については、前回とほぼ同様です。サンプルスクリプトさて、実際にスクリプトを書いてみます。メニューの階層構造を以下のようにしてみましょう。括弧中の名前は、メニューアイテムIDにつける定数名です。return前回よりは複雑ですが、慣れてしまえばなんてことはないでしょう。スクリプト中で同じ処理が繰り返されているところがあるので(特にメニューアイテムの追加)、こういった部分をモジュール化してしまうのもいいでしょう。