ウィンドウオブジェクト(ウィジット)
ウィジェットはオブジェクト型のプロパティを持つウィンドウであり、Windows環境でははコントロールと呼ばれ、ユーザーインターフェースの要素を構成します。特定のイベントに自動的に反応することができ、例えばボタンが押された場合外観を変化させます。ウィジットはいつでも変更可能なプロパティをもちます。また不要になったウィジットはすみやかに削除されます。ウィンドウと同様にウィジットはそれぞれ固有のハンドルを与えられています。
ウィジットにはウィンドウマネージャーが必要になります。ウィジットが作成されるとウィンドウ同様に振る舞い、ウィンドウマネージャによって位置や再描画の管理が適切に行われます。ウィジットはアプリケーションやユーザーインターフェースに必ずしも必要ありませんが、開発時間を減らすことができます。
ウィジットの基本
利用可能なウィジェット
ウィジェットのうちスキニングをサポートするものはスキニングされた状態も示してあります。
名前 |
スクリーンショット (クラッシック) |
スクリーンショット (スキン適用) | 説明 |
---|---|---|---|
BUTTON | プッシュ可能なボタンです。テキストやビットマップをボタン上に表示することができます。 | ||
CHECKBOX | チェックボックスです。チェック状態と非チェック状態が有ります | ||
DROPDOWN | ドロップダウンリストボックスです。プッシュするとリストが開きます。 | ||
EDIT | 一行の入力ボックスです。 | ||
FRAMEWIN | フレームウィンドウ。GUIの外観を決めます。 | ||
GRAPH | グラフウィジット。曲線や数値を表示します。 | ||
HEADER | ヘッダコントロール。列管理をします。 | ||
ICONVIEW | アイコン調ウィジット。携帯デバイスなどでアイコンを利用する場合に便利です。 | ||
IMAGE | イメージウィジット。自動で様々なフォーマットの画像を表示します。 | ||
LISTBOX | リストボックス。選択されると青くハイライトが付きます。 | ||
LISTVIEW | リスト表示ウィジット。表や計算用紙を作るのに利用します。 | ||
LISTWHEEL | リストホイールウィジット。データは回転して表示される用にエフェクトがかかります。 | ||
MENU | メニューウィジット。水平または垂直メニューバーを作成します。 | ||
MULTIEDIT | 複数行の入力ボックス | ||
MULTIPAGE | 複数ページウィジット | ||
PROGBAR | プログレスバー | ||
RADIO | 一つしか選択できないラジオボタン | ||
SCROLLBAR | 水平または垂直スクロールバー | ||
SLIDER | 変数を変えるためのスライダー | ||
SPINBOX | スピニングボックス、飛び飛びの値を選択できます。 | ||
TEXT | テキスト表示 | ||
TREEVIEW | ツリー表示 |
再描画のメカニズム
ウィジェットは、そのプロパティに応じて自分自身を再描画します。WM_Exec()、GUI_Exec()またはGUI_Delay()を呼び出して再描画が行われます。マルチタスク環境では、バックグラウンドタスクは、通常WM_Exec()を呼び出すとウィジェット(およびコールバック機能を持つ他のすべてのウィンドウ)を更新するために使用されます。
ウィジェットのプロパティが変更されると、ウィジェットのウィンドウ(またはその一部)が無効状態になり、すぐに再描画は開始されず、後でWMで行われます。
ウィジェットの使用方法
プログレスバーを表示してみます。次のコードだけで表示することができます。
PROGBAR_Handle hProgBar; GUI_DispStringAt("Progress bar", 100, 20); hProgBar = PROGBAR_Create(100, 40, 100, 20, WM_CF_SHOW);
最初の行は、ウィジェットのハンドル用のメモリーを予約。最後の行は実際にウィジェットを作成します。この後WM_Exec()が呼ばれると自動的に描画が行われます。
メンバ関数でウィジットのプロパティを変更することで随時ウィジットの外観に変更できます。今回プログレスバーを45%表示にし、色をデフォルト(暗い灰色/明るい灰色)から緑/赤に変更してみます。
PROGBAR_SetBarColor(hProgBar, 0, GUI_GREEN); PROGBAR_SetBarColor(hProgBar, 1, GUI_RED); PROGBAR_SetValue (hProgBar, 45);
動的メモリ使用
断片化が発生するため組込み用途では動的メモリ使用は望ましくありません。しかしemWinでは異なるハンドルを利用することで断片化なしに動的メモリ使用を可能にしました。実際にメモリを参照するポインタとハンドルを別に管理することでウィジットが実際に使用するメモリ領域を適宜最適化していくことで断片化を防いでいます。
ウィジットの詳細
BUTTON
タッチスクリーンでの主なユーザーインターフェースとして使用されます。次の画像のように、ボタンにテキストを表示したり背景を追加できます。
CHECK BOX
様々な選択肢を選択するために使用されます。チェックボックスにはオンまたはオフ状態があります。また、操作無効になっている場合ボックスは次の表のようにグレー表示されます。
選択 | 非選択 | |
---|---|---|
操作有効 | ||
操作無効 |
DROPDOWN
複数の要素を持つリストから一つの要素を選択するために使用されます。それは、閉じている状態では現在選択されている項目を示し、ユーザーがウィジェットを開いた場合はリストが展開されます。
閉じている状態 | 開いている状態 |
---|---|
EDIT
テキスト入力の主要なユーザーインターフェイスとして使用されます。
空の状態 | 入力済みの状態 |
---|---|
バイナリ、10進数、16進モードで値を入力するためのEDITフィールドを使用することができます。入力無効状態ではチェックボックスのように編集フィールドがグレー表示されます。
入力有効状態 | 入力無効状態 |
---|---|
FRAMEWIN
フレームウィンドウは、アプリケーション、PCアプリケーションの外観を決めます。フレーム、タイトルバーとユーザ領域で構成されています。、下図のように、ウィンドウのアクティブまたは非アクティブ状態はタイトルバーの色で示します。
アクティブ | 非アクティブ |
---|---|
GRAPH
グラフのウィジェットは、データを視覚化するために使用することができます。グラフウィジェットの標準的なアプリケーションは測定値または関数のグラフの曲線を示しています。複数の曲線を同時に表示することができます。水平と垂直のスケールとグリッドを使用することができます。データが表示領域より大きくなると自動的にスクロールバーを追加しデータ領域を拡大できます。
グラフの曲線 | 測定値の時間推移 |
---|---|
HEADER
HEADERのウィジェットは、次のように表のラベルに使用されます。
ポインタインプットデバイス(PID)が使用されている場合、ヘッダー項目の幅はPIDによって仕切りをドラッグして管理することができます。
LISTBOX
リストボックスは、リストの一つの要素を選択するために使用されています。以下に示すように、周囲のフレームのウィンドウなしで作成、またはFRAMEWINウィジェットの子ウィンドウとすることができます。リストボックス内の項目が選択されている場合強調表示されます。
リストボックスアクティブ | リストボックス非アクティブ |
---|---|
LISTVIEW
ListViewのウィジェットは、複数の列を持つリストの一つの要素を選択するために使用されています。列を管理するLISTWIEWウィジェットは、HEADERウィジェットが含まれています。周囲のフレームウィンドウなしまたはFRAMEWINのウィジェットの子ウィンドウとして作成することができます。項目が選択されている場合、強調表示します。
説明 | LISTVIEW |
---|---|
非アクティブ フレームウィンドウなし スクロールバーなし グリッド非表示 |
|
アクティブ フレームウィンドウなし スクロールバーなし グリッド非表示 |
|
アクティブ フレームウィンドウあり スクロールバーなし グリッド非表示 |
|
アクティブ フレームウィンドウあり スクロールバーあり グリッド非表示 |
|
アクティブ フレームウィンドウあり スクロールバーあり グリッド表示 |
MENU
メニューを作成するために使用することができます。各メニュー項目は、アプリケーションのコマンドやサブメニューを表します。メニューは水平および/または垂直に表示することができます。メニュー項目は、セパレータを使用してグループ化することができます。メニュー項目を選択すると、メニューの親にWM_MENUメッセージを送信するか、サブメニューを開きます。マウスのサポートが有効になっている場合はメニューのウィジェットはマウスに反応します。以下の表は、垂直サブメニューを持つ水平メニューの例です。
説明 | WIDGET_Effect_3D1L | WIDGET_Effect_Simple |
---|---|---|
カラーディスプレイ | ||
モノクロディスプレイ (グレースケール) |
||
モノクロディスプレイ |
MULTIEDIT
MULTIEDITウィジェットは複数行でテキストを編集することができます。テキストエディタとして使用するか、テキストを表示することに使用できます。ウィジェットはスクロールをサポートしています。
説明 | フレームウィンドウ |
---|---|
編集モード 自動水平スクロールバー 折り返し表示なし インサートモード |
|
編集モード 自動垂直スクロールバー 折り返し表示 オーバーライトモード |
|
表示モード 折り返し表示 |
MULTIPAGE
マルチページウィジェットを使用することにより、アプリケーションはウィンドウまたはダイアログボックスの同じ領域に対して複数のページを定義することができます。ページのタブをクリックすることでページが選択でき、表示領域を超えるタブがある場合は自動的にページの角に小さなスクロールバーを表示します。サンプルフォルダにはマルチページのウィジェットを作成して使用法を示すWIDGET_Multipage.cが含まれています。
説明 | MULTIPAGE |
---|---|
3ページ、タブは左上寄せ | |
6ページ、タブは右下寄せ |
TEXT
通常、以下のメッセージボックスに表示される、ダイアログボックス内のテキストフィールドを表示するために使用されます。
もちろんテキストフィールドは、次のように他のウィジェットのラベルに使用することができます。