このドキュメントでは、次のトピックについて説明します。
メニュー構造は、以下の 3 種類のダイアログエレメントで構成されます。
メニューバーコントロール
メニュー項目
サブメニューコントロール
メニュー構造は、メニューバーコントロールを 1 つ持ち、このコントロールはいくつかのメニュー項目から構成されています。 項目を含んだメニューバーは、ウィンドウのタイトルバーのすぐ下に表示されます。 各メニュー項目は単純な項目である場合も、サブメニューコントロールを表す場合もあります。サブメニューコントロールの場合は、グループ化された複数のメニュー項目を縦に表示できます。 したがって、サブメニューコントロールは、1 つ下のレベルのサブメニューコントロールを表す項目を含むことができます。 サブメニューコントロールは、メニューバーコントロールまたは親のサブメニューコントロール内の該当する項目がクリックされると表示されます。
メニュー構造を作成するには、以下の 2 つの方法があります。
ダイアログエディタを使用するか、
Natural コードを使用する。
ダイアログの属性ウィンドウで[メニューバー]エントリをチェックして、 を選択します。 ダイアログに戻ると、ダミーのメニューバーコントロールが表示されます。
ダミーのメニューバーコントロールをダブルクリックするか、Natural メニューをCtrl キーを押したまま M キーを押します。 [ダイアログメニューバー]ダイアログボックスが開きます。 このダイアログボックスは、メニューバー、選択されたサブメニュー、および選択されたメニュー項目の 3 つのグループフレームに分割されています。
の順に選択するか、または選択されたメニュー項目のグループフレームで、
を使用してメニュー項目を選択した位置の後ろまたは先頭に追加します。 次に、選択されたメニュー項目のグループフレームを使用して、属性値を変更したり、新規メニュー項目にイベントハンドラを追加したりします。一般的なメニュー項目には、エンドユーザーがメニュー項目をクリックしたときにコードが実行される CLICK イベントがあります。
注意:
メニュー項目の MENU-ITEM-TYPE
を "セパレータ" にすることもできます。この場合、メニュー項目はテキスト項目ではありません。
PARENT
属性に "NULL-HANDLE" または "windowhandle" を設定したメニューバーを作成します。
単純なメニュー項目を作成するには、PARENT
属性の値を "menubarhandlename" にする必要があります。
サブメニューコントロールを作成するには、サブメニューコントロールの PARENT
属性の値を "NULL-HANDLE" または "windowhandlename" にする必要があります。 そして、PARENT
= "menubarhandlename" および MENU-HANDLE
= "submenuhandlename" でメニュー項目を作成します。
次に、ウィンドウの MENU-HANDLE
属性を手順 1 で設定したメニューバーのハンドルに変更して、メニューバーをダイアログウィンドウに関連付けます。
「ダイアログエレメントをダイナミックに作成および削除する方法」で説明したように、ダイナミックに作成するメニュー項目のイベント処理は DEFAULT イベントハンドラで行う必要があります。
PARENT
属性によって、メニューバーまたはサブメニューコントロールが破棄されるタイミングが決まります。 PARENT
= "windowhandlename" の場合、メニューバー/サブメニューコントロールはウィンドウが破棄されるときに破棄されます。 これはデフォルトの設定で、ダイアログエディタでも使用されます。 PARENT
= NULL-HANDLE の場合は、メニューバー/サブメニューコントロールはアプリケーションが終了するときにのみ破棄されます。
メニュー構造のハンドルをグローバルデータエリアに定義すると、定義を複数のダイアログで共有できます。
上記のメニュー構造を構築するには
適用可能なイベントのハンドラにメニューバーコントロール、メニュー項目、およびサブメニューコントロールのハンドルをユーザー定義変数として定義します。
属性(PARENT
など)に値を割り当てて PROCESS GUI
ステートメントの ADD
アクションを実行することによって、コントロールおよび項目を作成します。
メニューバーコントロールおよびサブメニューコントロール内にコントロールとメニュー項目を作成します。
サブメニューコントロールをメニューバーコントロールに挿入し、メニューバーコントロールをダイアログウィンドウに挿入します。
エディタで構築したメニューを含むダイアログを拡張ダイアログリストモードでリストすることによって、コードでメニュー構造を構築する方法を学習できます。 メニュー項目を作成するためのコードモデルを取得するには、ダイアログエディタでメニューバーコントロールを作成し、メニューバーコントロール属性ウィンドウに進み、メニュー項目を切り取って任意のイベントハンドラセクションに貼り付けます。 メニュー項目の生成コードが表示されます。
メニュー構造内の各要素に進むにはコードを使用する必要があることがあります。 メニューの場合、親子階層は、メニュー構造のグラフィカル表示からはわからない方法で構成されます。
上図の場合、ダイアログの最初の子はメニューバーコントロールで、 その次にサブメニューコントロール S1 と S2 が続きます。 メニュー項目 MI-1 からサブメニュー S1 に進むには、MI-1の MENU-HANDLE
属性値をクエリします。 その結果得られる値が、S1 のハンドル値です。
ツールバーおよびツールバー項目を作成するには、以下の 2 つの方法があります。
ダイアログエディタを使用するか、
Natural コードを使用してダイナミックに作成する。
ダイアログエディタを使用するには
ツールバーをダブルクリックするか、または Natural メニューから
の順に選択します。 ツールバー属性ウィンドウが開きます。ボタンをクリックしてツールバー項目を追加します。
新規ツールバー項目にビットマップファイル名およびその他の属性値を割り当てます。
ダイナミックに作成するために Natural コードを使用すると、コードでツールバーを構築する方法を学習できます。 拡張ダイアログリストモードを使用して、エディタで構築したツールバーを含むダイアログをリストしてください。
MDI(マルチドキュメントインターフェイス)アプリケーションは、すべての子ダイアログで共有されるメニュー構造、ツールバー、および DIL を提供するフレームダイアログで構成されます。 MDI フレームダイアログを使用すると、子ダイアログを並べたり重ねたりできます。
注意:
ツールバーの PARENT
が最上位のダイアログ(アプリケーションのメインダイアログ)である場合は、ツールバーだけを共有できます。
MDI フレームダイアログを作成するには
ダイアログエディタを使用して、ダイアログオブジェクトの属性ウィンドウに移動します。
[タイプ]エントリで[MDI フレームウィンドウ]を選択します。
MDI フレームダイアログには、メニューバーコントロール、サブメニューコントロール、メニュー項目、ツールバー、およびツールバー項目以外のダイアログエレメントを持たせないでください。
MDI 子ダイアログを作成するには
ダイアログエディタを使用して、ダイアログオブジェクトの属性ウィンドウに移動します。
[タイプ]エントリで[MDI 子ウィンドウ]を選択します。
MDI 子ダイアログは
MDI フレームダイアログのエリア内だけで移動またはサイズ変更できます。
MDI フレームダイアログのエリアの最大サイズまで最大化できます。
最小化できます。最小化すると、MDI フレームダイアログの下部にアイコンが表示されます。
独自のメニュー構造、ツールバー、および DIL を持つことができます。 これらは子ダイアログ内に表示されませんが、子ダイアログがアクティブになったときに MDI フレームダイアログ内に表示されます。 別の MDI 子ダイアログがアクティブになると、メニュー構造、ツールバー、および DIL が同時に変わります。
メニュー項目の属性 MENU-ITEM-TYPE
に値[MDI 重ねて表示]または[MDI 並べて表示]を設定することによって、重ねて表示したり並べて表示したりできます。
タイトルを MDI-WINDOWMENU タイプのサブメニューコントロールの最後に追加できます。 メニュー項目の 1 つを選択することによって、対応する 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
は生成された変数です。