バージョン 6.3.3
 —  プログラミングガイド  —

メニュー構造、ツールバー、および MDI

このドキュメントでは、次のトピックについて説明します。


メニュー構造の作成

メニュー構造は、以下の 3 種類のダイアログエレメントで構成されます。

メニュー構造は、メニューバーコントロールを 1 つ持ち、このコントロールはいくつかのメニュー項目から構成されています。 項目を含んだメニューバーは、ウィンドウのタイトルバーのすぐ下に表示されます。 各メニュー項目は単純な項目である場合も、サブメニューコントロールを表す場合もあります。サブメニューコントロールの場合は、グループ化された複数のメニュー項目を縦に表示できます。 したがって、サブメニューコントロールは、1 つ下のレベルのサブメニューコントロールを表す項目を含むことができます。 サブメニューコントロールは、メニューバーコントロールまたは親のサブメニューコントロール内の該当する項目がクリックされると表示されます。

メニュー構造を作成するには、以下の 2 つの方法があります。

ダイアログエディタを使用する場合

  1. ダイアログの属性ウィンドウで[メニューバー]エントリをチェックして、 [OK]を選択します。 ダイアログに戻ると、ダミーのメニューバーコントロールが表示されます。

  2. ダミーのメニューバーコントロールをダブルクリックするか、Natural メニューを[ダイアログ]、[メニューバー]の順に選択するか、または Ctrl キーを押したまま M キーを押します。 [ダイアログメニューバー]ダイアログボックスが開きます。 このダイアログボックスは、メニューバー、選択されたサブメニュー、および選択されたメニュー項目の 3 つのグループフレームに分割されています。

  3. 選択されたメニュー項目のグループフレームで、[新規作成]を使用してメニュー項目を選択した位置の後ろまたは先頭に追加します。 次に、選択されたメニュー項目のグループフレームを使用して、属性値を変更したり、新規メニュー項目にイベントハンドラを追加したりします。

一般的なメニュー項目には、エンドユーザーがメニュー項目をクリックしたときにコードが実行される CLICK イベントがあります。

注意:
メニュー項目の MENU-ITEM-TYPE を "セパレータ" にすることもできます。この場合、メニュー項目はテキスト項目ではありません。

Natural コードを使用する場合

  1. PARENT 属性に "NULL-HANDLE" または "windowhandle" を設定したメニューバーを作成します。

  2. 単純なメニュー項目を作成するには、PARENT 属性の値を "menubarhandlename" にする必要があります。

  3. サブメニューコントロールを作成するには、サブメニューコントロールの PARENT 属性の値を "NULL-HANDLE" または "windowhandlename" にする必要があります。 そして、PARENT = "menubarhandlename" および MENU-HANDLE = "submenuhandlename" でメニュー項目を作成します。

  4. 次に、ウィンドウの MENU-HANDLE 属性を手順 1 で設定したメニューバーのハンドルに変更して、メニューバーをダイアログウィンドウに関連付けます。

  5. 「ダイアログエレメントをダイナミックに作成および削除する方法」で説明したように、ダイナミックに作成するメニュー項目のイベント処理は DEFAULT イベントハンドラで行う必要があります。

PARENT 属性によって、メニューバーまたはサブメニューコントロールが破棄されるタイミングが決まります。 PARENT = "windowhandlename" の場合、メニューバー/サブメニューコントロールはウィンドウが破棄されるときに破棄されます。 これはデフォルトの設定で、ダイアログエディタでも使用されます。 PARENT = NULL-HANDLE の場合は、メニューバー/サブメニューコントロールはアプリケーションが終了するときにのみ破棄されます。

メニュー構造のハンドルをグローバルデータエリアに定義すると、定義を複数のダイアログで共有できます。

Start of instruction set上記のメニュー構造を構築するには

  1. 適用可能なイベントのハンドラにメニューバーコントロール、メニュー項目、およびサブメニューコントロールのハンドルをユーザー定義変数として定義します。

  2. 属性(PARENT など)に値を割り当てて PROCESS GUI ステートメントの ADD アクションを実行することによって、コントロールおよび項目を作成します。

  3. メニューバーコントロールおよびサブメニューコントロール内にコントロールとメニュー項目を作成します。

  4. サブメニューコントロールをメニューバーコントロールに挿入し、メニューバーコントロールをダイアログウィンドウに挿入します。

エディタで構築したメニューを含むダイアログを拡張ダイアログリストモードでリストすることによって、コードでメニュー構造を構築する方法を学習できます。 メニュー項目を作成するためのコードモデルを取得するには、ダイアログエディタでメニューバーコントロールを作成し、メニューバーコントロール属性ウィンドウに進み、メニュー項目を切り取って任意のイベントハンドラセクションに貼り付けます。 メニュー項目の生成コードが表示されます。

Top of page

メニュー構造の親子階層

メニュー構造内の各要素に進むにはコードを使用する必要があることがあります。 メニューの場合、親子階層は、メニュー構造のグラフィカル表示からはわからない方法で構成されます。

Parent-child hierarchy

上図の場合、ダイアログの最初の子はメニューバーコントロールで、 その次にサブメニューコントロール S1 と S2 が続きます。 メニュー項目 MI-1 からサブメニュー S1 に進むには、MI-1の MENU-HANDLE 属性値をクエリします。 その結果得られる値が、S1 のハンドル値です。

Top of page

ツールバーの作成

ツールバーおよびツールバー項目を作成するには、以下の 2 つの方法があります。

Start of instruction setダイアログエディタを使用するには

  1. ツールバーをダブルクリックするか、または Natural メニューから[ダイアログ]、[ツールバー]の順に選択します。 ツールバー属性ウィンドウが開きます。

  2. [新規作成]ボタンをクリックしてツールバー項目を追加します。

  3. 新規ツールバー項目にビットマップファイル名およびその他の属性値を割り当てます。

ダイナミックに作成するために Natural コードを使用すると、コードでツールバーを構築する方法を学習できます。 拡張ダイアログリストモードを使用して、エディタで構築したツールバーを含むダイアログをリストしてください。

Top of page

メニュー構造、ツールバー、および DIL(MDI アプリケーション)の共有

MDI(マルチドキュメントインターフェイス)アプリケーションは、すべての子ダイアログで共有されるメニュー構造、ツールバー、および DIL を提供するフレームダイアログで構成されます。 MDI フレームダイアログを使用すると、子ダイアログを並べたり重ねたりできます。

注意:
ツールバーの PARENT が最上位のダイアログ(アプリケーションのメインダイアログ)である場合は、ツールバーだけを共有できます。

Start of instruction setMDI フレームダイアログを作成するには

  1. ダイアログエディタを使用して、ダイアログオブジェクトの属性ウィンドウに移動します。

  2. [タイプ]エントリで[MDI フレームウィンドウ]を選択します。

MDI フレームダイアログには、メニューバーコントロール、サブメニューコントロール、メニュー項目、ツールバー、およびツールバー項目以外のダイアログエレメントを持たせないでください。

Start of instruction set MDI 子ダイアログを作成するには

  1. ダイアログエディタを使用して、ダイアログオブジェクトの属性ウィンドウに移動します。

  2. [タイプ]エントリで[MDI 子ウィンドウ]を選択します。

MDI 子ダイアログは

MDI フレームダイアログ内から MDI 子ダイアログを開く場合、例えば MDI フレームダイアログのメニュー構造にメニュー項目を作成し、そのメニュー項目に対して CLICK イベントを定義します。 次に、MDI 子ダイアログを開くための OPEN DIALOG コードを CLICK イベントハンドラに記述します。 エンドユーザーがメニュー項目をクリックすることによって CLICK イベントハンドラが起動されると、MDI フレームダイアログから MDI 子ダイアログが開かれます。

例:

OPEN DIALOG 'MDICHILD' #DLG$WINDOW #CHILD-ID

第 1 オペランドは、[タイプ]選択ボックスで[MDI 子ウィンドウ]を選択するとダイアログエディタによって作成されるダイアログの名前です。 第 2 オペランドは新しい MDI 子ダイアログの親で、 MDI フレームダイアログである必要があります。 第 3 オペランドは、ダイアログのデータエリアに I4 として定義されている Natural 変数です。 この変数は、システムから返されるダイアログ ID を受け取ります。

注意:
#DLG$WINDOW は生成された変数です。

MDI 子ダイアログから別の MDI 子ダイアログ(元の MDI 子ダイアログの兄弟)を開くこともできます。 これには、上記と類似した CLICK イベントハンドラを記述します。

OPEN DIALOG 'MDICHILD' #DLG$PARENT #CHILD-ID

第 1 および第 3 オペランドは前述の例と同じです。 第 2 オペランドは、両方の MDI 子ダイアログの親である必要があります。

注意:
#DLG$PARENT は生成された変数です。

Top of page