- 質問:GENWARE2のGUI構成を教えてください。
- 回答:以下にGENWARE2のGUI構成を説明します。
[ウィンドウ/パネル]
■ウィンドウ/パネルの管理構成
GENIFA2を用いて作成するGUIアプリケーションは、すべて以下の構造となります。
全体を管理するのはスクリーンオブジェクト(GCSampleScreen)で、この下に表示するパネルやウィンドウが
作成される形となります。
- パネル
パネルはGUIアプリケーション上では常に1つしか存在しないオブジェクトです。
別パネルを表示する場合はパネル切換えを行う必要があります。 - ウィンドウ
ウィンドウはGUIアプリケーション上で、複数表示可能なオブジェクトです。
このウィンドウを管理するため、スクリーンオブジェクトはフレームオブジェクトを持っています。
フレームオブジェクトの中に子オブジェクトという形でウィンドウを管理しています。
GCWindowオブジェクトがGCFrameオブジェクトとユーザ派生GCPanelオブジェクトとの間に存在しており、「GCWindowオブジェクト」と「ユーザ派生GCPanelオブジェクト」の2つの組み合わせで「ウィンドウ」と呼びます。
■ポインタの取得方法
ポインタを取得する方法はパネルとウィンドウとで異なります。
- パネル
パネルのポインタ取得は以下のようになります。
①スクリーンオブジェクトのポインタ取得
②スクリーンオブジェクトから関連付けされているパネルのポインタ取得
現在表示しているパネルの取得は以下のように行います。
<C++言語>
GCSampleScreen *pScreen = (GCSampleScreen*)GCWGetScreen();
GCPanel *pPanel = pScreen->GetPanel();
<C言語>
GSampleScreen *pScreen = (GSampleScreen*)GWGetScreen();
GWGetVmt( GSampleScreen_VMT, pScreen )->GetPanel( pScreen );
- ウィンドウ
ウィンドウのポインタ取得は以下のようになります。
①スクリーンオブジェクトのポインタ取得
②スクリーンオブジェクトからウィンドウを管理しているフレームオブジェクトの取得
③フレームオブジェクトから目的のウィンドウの取得。このとき引き数として、「ウィンドウ番号+1」を渡します。
④ウィンドウから関連付けされているパネルオブジェクトの取得
現在表示しているウィンドウの取得は以下のように行います。
<C++言語>
GCSampleScreen *pScreen = (GCSampleScreen*)GCWGetScreen();
GCFrame *pFrame = pScreen->GetFrame();
GCWindow *pWindow = pFrame->GetChild( XX );
//XXはGENSKETCH2上の画面番号+1
GCPanel *pPanel = pWindow->GetPanel();
<C言語>
GSampleScreen *pScreen = (GSampleScreen*)GWGetScreen();
GFrame *pFrame = GWGetVmt( GSampleScreen_VMT, pScreen )->GetFrame( pScreen );
GWindow *pWindow = GWGetVmt( GFrame_VMT, pFrame )->GetChild( pFrame, XX );
//XXはGENSKETCH2上の画面番号+1
GPanel *pPanel = GWGetVmt( GWindow_VMT, pWindow )->GetPanel( pWindow );
[コントロール/図形]
■構造
GENIFA2を用いて作成するGUIアプリケーションでは、コントロール/図形/ビューフレームの管理は必ずユーザ派生GCPanelオブジェクト(パネル、ウィンドウ)が行います。

- コントロール/図形
コントロールおよび図形はユーザ派生GCPanelオブジェクト内にリストで管理されます。 - ビューフレーム
ビューフレームもコントロール/図形と同様にユーザ派生GCPanelオブジェクト内にリストで管理されます。
ビューフレームの内部には1ページ1ユーザ派生GCPanelオブジェクトとしてパネルが作成されます。
■ポインタの取得方法
ユーザ派生GCPanelオブジェクトで管理しているオブジェクトはすべて同一の方法で取得することができます。
- コントロール/図形
コントロール・図形のポインタ取得はユーザ派生GCPanelオブジェクトのGetChildを用いて取得します。
このとき引数としてコントロールIDを渡します。
ユーザ派生GCPanelオブジェクトで管理しているオブジェクトのIDはユーザ派生GCPanelオブジェクトのヘッダファイルに定義してあります。
<C++言語>
GCButton *pButton = (GCButton*)GetChild( GBUTTON00000 );
<C言語>
GButton *pButton = (GButton*)GWGetVmt( GPanel00000_VMT, pSelf )
->GetChild( pSelf, GPANEL00000_GBUTTON00000 ); - ビューフレーム
ビューフレームもコントロール/図形と同様の取得方法となります。
ビューフレームをポインタ取得した後は、ビューフレーム内の取得したいパネルIDを引数として ビューフレームのGetChild関数をコールしビューフレーム内のユーザ派生GCPanelオブジェクトが取得できます。
<C++言語>
GCSVFrame *psvFrame = (GCSVFrame*)GetChild( GFRAME00000 );
GCPanel *pPanel = (GCPanel*)psvFrame->GetChild( GFRAME00000PANEL000 );
<C言語>
GSVFrame *psvFrame = (GSVFrame*)GWGetVmt( GPanel00000_VMT, pSelf )
->GetChild( pSelf, GPANEL00000_GFRAME00000 );
GPanel *pPanel = (GPanel*)GWGetVmt( GSVFrame_VMT, psvFrame )
->GetChild( GPANEL00002FRAME00000_PANEL000 );