ウィンドウオブジェクト(ウィジェット)
ウィンドウオブジェクト(ウィジェット)
ウィジェットは、オブジェクト型のプロパティを持つウィンドウであり、Windowsの世界ではコントロールと呼ばれ、ユーザーインターフェースの要素を構成するされています。彼らは特定のイベントに自動的に反応することができる、それが押された場合、たとえば、ボタンが異なる状態で表示できます。ウィジェットを作成する必要がある、その存在中はいつでも変更することができ、それらが不要になった後、通常は削除されているプロパティがあります。ちょうど窓のように、ウィジェットはその作成 関数によって返されるハンドルによって参照されます。
ウィジェットは、ウィンドウマネージャが必要です。ウィジェットが作成されると、それは他のウィンドウのように扱われ、WMは、ときにこれまで必要に応じてそれが適切に(再描画)が表示されることを保証します。ウィジェットは、アプリケーションまたはユーザーインターフェースを記述する際に必要ではありませんが、プログラミングが容易になります。
いくつかの基本原理
利用可能なウィジェット
次の表は、現在利用可能なウィジェットの外観を示す。ウィジェットのいくつかは、スキニングをサポートしています。外観を変更するこの方法は、本章"スキニング"で詳しく説明されています。2番目のスクリーンショットはスキンがウィジェットが有効になっている外観を示しています。
名前 | スクリーンショット(クラシック) | スクリーンショット(スキン) | 説明 |
---|---|---|---|
ボタン | 押すことができるボタン。テキストまたはビットマップがボタンに表示されることがあります。 | ||
CHECKBOX | オンまたはオフにすることができますチェックボックスをオンにします。 | ||
ドロップダウン | ドロップダウンリストボックスには、押されたリストボックスを開きます。 | ||
EDIT | ユーザーが数値またはテキストを入力するように指示単一行のエディットフィールド。 | ||
FRAMEWIN | フレームウィンドウ。典型的なGUIの外観を作成します。 | ||
GRAPH | カーブや測定値を表示するために使用されるグラフのウィジェット、。 | ||
HEADER | 列を管理するために使用されるヘッダーコントロール、。 | ||
アイコンビュー | アイコンビューウィジェット。などの一般的なハンドヘルド機器に見られるアイコンベースのプラットフォーム用に便利。 | ||
LISTBOX | それらはユーザによって選択される項目を強調表示するリストボックス。 | ||
リストビュー | リストビューのウィジェットは、テーブルまたは計算シートを作成するために使用されます。 | ||
LISTWHEEL | Listwheelウィジェット。データは移動し、ポインタ入力デバイスを介して加速することができる。 | ||
メニュー | メニューウィジェットは水平と垂直のメニューを作成するために使用されます。 | ||
MESSAGEBOX | メッセージボックスウィジェットは、実際には、タイトルバーやウィンドウを閉じるために押す必要がある"OK"ボタンとシンプルなフレームウィンドウの"すぐに使える"の組み合わせです。 | ||
MULTIEDIT | Multieditウィジェットは、複数行のテキストを編集するために使用されています。 | ||
マルチページ | 複数ページのウィジェットは、複数のページを持つダイアログを作成するために使用されます。 | ||
PROGBAR | プログレスバーは可視化のために使用。 | ||
RADIOBUTTON | 選択できるラジオボタン。一度に選択できるボタンは。 | ||
SCROLLBAR | スクロールバーのどの水平または垂直になることがあります。 | ||
スライダー | スライダバーの値を変更するために使用。 | ||
TEXT | スタティックテキストは、通常はダイアログで使用される制御。 | ||
TreeViewコントロール | スタティックテキストは、通常はダイアログで使用される制御。 | ||
WINDOW | ウィンドウウィジェットは、リソーステーブルからダイアログウィンドウを作成するために使用されます。 |
再描画メカニズムを理解する
ウィジェットは、そのプロパティに応じて自分自身を描画します。WM_Exec()、GUI_Exec()またはGUI_Delay()が呼び出されるときに行われます。マルチタスク環境では、バックグラウンドタスクは、通常WM_Exec()を呼び出すとウィジェット(およびコールバック機能を持つ他のすべてのウィンドウ)を更新するために使用されます。
ウィジェットのプロパティが変更されると、ウィジェットのウィンドウ(またはその一部)が無効としてマーク、それはすぐに再描画されるものではない。したがって、コードのセクションでは、非常に高速に実行されます。再描画は、後でWMで行われますか(すべてのウィンドウが再描画されるまで、またはWM_Exec())それは、ウィジェットのための呼び出しWM_PAINT()によって強制される可能性があります。
ウィジェットを使用する方法
我々はプログレスバーを表示したいと仮定します。必要なのは、次のコードです。
PROGBAR_Handle hProgBar、 GUI_DispStringAt("プログレスバー"、100、20); hProgBar = PROGBAR_Create(100、40、100、20、WM_CF_SHOW); |
最初の行は、ウィジェットのハンドル用のメモリーを予約します。最後の行は実際にウィジェットを作成します。WM_ExecIdleが()後の時点でまたは別々のタスクで呼び出された場合、ウィジェットには、自動的にウィンドウマネージャによって描画されます。
メンバ関数は、その外観に変更を許可するウィジェットのタイプごとに利用可能である。ウィジェットが作成されると、そのプロパティは、そのメンバ関数の1つを呼び出すことによって変更することができます。これらの関数は、プログレスバーを作るために、最初のargument.Inの順序としてウィジェットのハンドルを取る45%を示し、それらのデフォルト値から緑/赤のバーのために、次のコードセクションを使用することができるの色を変更する:
PROGBAR_SetBarColor(hProgBar、0、GUI_GREEN); PROGBAR_SetBarColor(hProgBar、1、GUI_RED); PROGBAR_SetValue(hProgBar、45); |
すべてのウィジェットにも使用されるフォントや色など、さまざまなデフォルト設定を定義する1つまたは複数のコンフィギュレーションマクロを持っている。
ウィジェットのための動的なメモリ使用量
組込み用途ではそれが原因断片化の効果のすべてで動的メモリを使用することは通常非常に望ましいことではありません。そこにこの問題を回避するために使用できるさまざまな戦略の数がありますが、それらのメモリ領域はアプリケーションプログラム内のポインタによって参照されるたびに限られた方法ですべての作業。このような理由から、emWinは異なるアプローチを使用しています:すべてのオブジェクト(および実行時に格納されているすべてのデータ)は、ハンドルによって参照されるメモリ領域に格納されています。これは、このようにポインタを使用しているときに発生する長期的な配分の問題を回避する、実行時に割り当てられたメモリ領域を再配置することが可能になります。すべてのウィジェットは、このように、ハンドルによって参照されます。
3Dサポート
多くのウィジェットは、3D効果の有無に関係なく表示されることがあります。3D機能はデフォルトで有効になっていますが、0に_USE_3D構成マクロ(ウィジェット)を設定することで無効にすることができます。ウィジェットは、それが三次元のエフェクトを使用するかどうかまったく同じように機能しますが、違いは、その外観になります。これは、スライダのウィジェットで、以下の実証されています。
3D効果は有効(デフォルト) | 3D効果は無効になって |
BUTTON:ボタンウィジェット
ボタンウィジェットは、一般的に、タッチスクリーンの主要なユーザーインターフェイス要素として使用されます。ボタンは、以下に示すように、テキストで表示、またはビットマップにすることができます。
すべてのボタンに関連するルーチンは、ファイル(s)]ボタンの*. c、BUTTON.hに位置しています。すべての識別子は、ボタンを接頭辞が付いています。
checkbox:チェックボックスのウィジェット
様々な選択肢を選択するための最も身近なウィジェットの一つは、チェックボックスです。チェックボックスがオンまたはオフ、ユーザが、ボックスの任意の数は、一度にチェックされることがありますされることがあります。それが無効になっている場合ボックスは4つのチェックボックスの出現のそれぞれが図示されている以下の表に示すように、グレー表示されます。
チェック | チェックなし | |
有効 | ||
無効になって |
LL CHECKBOX関連のルーチンはファイル(複数可)のチェックボックスに配置されているの*. c、CHECKBOX.h。すべての識別子は、CheckBoxを接頭辞が付いています。
ドロップダウン:ドロップダウンウィジェット
ドロップダウンウィジェットは、複数の列を持つリストの一つの要素を選択するために使用されています。それは、非オープンの状態で現在選択されている項目を示しています。ユーザーがドロップダウンウィジェットを開いた場合は、ListBoxが新しい項目を選択して表示されます。
ドロップダウンが閉じ | ドロップダウン開設 |
マウスのサポートが有効になっている場合は、オープンリストには、それの上にマウスを移動させるに反応する。
EDIT:エディットウィジェット
編集フィールドは通常、テキスト入力の主要なユーザーインターフェイスとして使用されます。
空白の編集フィールド | ユーザー入力とフィールドを編集します。 |
また、バイナリ、10進数、16進モードで値を入力するための編集フィールドを使用することができます。進モードの編集フィールドには、次の表のものに似て見える場合があります。無効の場合は、チェックボックスのように、編集フィールドがグレー表示されます。
ユーザー入力とフィールドを編集して(小数) | 無効の編集フィールド |
FRAMEWIN:フレームウィンドウのウィジェット
フレームウィンドウは、アプリケーション、PCアプリケーションのウィンドウの外観を与える。彼らは周囲のフレーム、タイトルバーとユーザの領域で構成されています。タイトルバーの色が変わりますが、ウィンドウは下図のように、アクティブまたは非アクティブであるかどうか表示する:
アクティブなフレームウィンドウ | 非アクティブなフレームウィンドウ |
すべてFRAMEWIN関連のルーチンは、ファイル(複数可)FRAMEWINの*. c、FRAMEWIN.hに位置しています。すべての識別子はFRAMEWINを接頭辞が付いています。
GRAPH:グラフウィジェット
グラフのウィジェットは、データを視覚化するために使用することができます。グラフウィジェットの標準的なアプリケーションには、測定値または関数のグラフの曲線を示しています。複数の曲線を同時に表示することができます。水平と垂直のスケールは、カーブにラベルを付けるために使用することができます。別の水平および垂直間隔を持つグリッドが背景に表示することができます。データ配列は、グラフの表示領域に収まらない場合は、ウィジェットは自動的に大規模なデータアレイのスクロールを可能にするスクロールバーを表示することができます。
GRAPH_DATA_XY | GRAPH_DATA_YT |
HEADER:ヘッダウィジェット
HEADERのウィジェットは、表のラベルの列に使用されます。
ポインタの入力デバイス(PID)が使用されている場合、ヘッダー項目の幅は、PIDによって仕切りをドラッグして管理することができます。
マウスを使用する場合の動作
マウスのサポートが有効になっている場合は、カーソルが上であるとPIDは、分周器は、現在の位置にドラッグできることを、分周器カーソルが信号に変わります近くに移動されます。
タッチスクリーンを使用する場合の動作
ウィジェットが近くに分圧器を押すとカーソルがカーソル上にあるされている場合は分周器は、現在ドラッグできることを、信号に変更されます。
事前定義されたカーソル
以下に示すように2定義済みのカーソルがあります。
GUI_CursorHeaderM(デフォルト) | GUI_CursorHeaderMI |
LISTBOX:リストボックスのウィジェット
リストボックスは、リストの一つの要素を選択するために使用されています。リストボックスは、以下に示すように、周囲のフレームのウィンドウなしで作成、またはFRAMEWINウィジェットの子ウィンドウ(セクションの末尾に追加のスクリーンショットを参照)とすることができます。リストボックス内の項目が選択されているとして、彼らが強調表示。選択した項目の背景色はリストボックスのウィンドウに入力フォーカスがあるかどうかに依存していることに注意してください。
フォーカスがあるリストボックス | フォーカスなしリストボックス |
すべてのLISTBOX関連のルーチンはファイルに格納されている(複数可)LISTBOXの*. c、LISTBOX.h。すべての識別子は、LISTBOXを接頭辞が付いています。
リストビュー:リストビューウィジェット
ListViewのウィジェットは、複数の列を持つリストの一つの要素を選択するために使用されています。列を管理するLISTWIEWのウィジェットは、HEADERのウィジェットが含まれています。ListViewには、周囲のフレームウィンドウなしまたはFRAMEWINのウィジェットの子ウィンドウとして作成することができます。ListView内の項目が選択されているとして、彼らが強調表示。選択した項目の背景色は、ListViewのウィンドウが入力フォーカスを持っているかどうかに依存していることに注意してください。以下の表は、ListViewのウィジェットの外観を示しています。
説明 | ListViewのウィジェット |
---|---|
焦点なし |
|
入力が集中していない |
|
入力フォーカスを持っています FRAMEWINを囲むと SCROLLBAR添付の グリッド線は表示されません |
|
入力フォーカスを持って 周囲のFRAMEWINで SCROLLBAR添付の グリッド線は表示されません |
|
入力フォーカスを持っている |
MENU:メニューのウィジェット
メニューのウィジェットは、メニューのいくつかの種類を作成するために使用することができます。各メニュー項目は、アプリケーションのコマンドやサブメニューを表します。メニューは水平および/または垂直に表示することができます。メニュー項目は、セパレータを使用してグループ化することができます。セパレーターは、水平と垂直のメニューがサポートされています。メニュー項目を選択すると、メニューの所有者にWM_MENUメッセージを送信するか、サブメニューを開きます。マウスのサポートが有効になっている場合はメニューのウィジェットは、メニューの項目上にマウスを移動させるに反応する。emWinの出荷は、メニューのウィジェットを使用する方法を示すアプリケーションのサンプルが含まれています。それはSampleApplicationReversi.cの下で見つけることができます。以下の表は、縦のサブメニューを持つ水平なメニューウィジェットの外観を示しています。
説明 | WIDGET_Effect_3D1Lを使用してメニュー | WIDGET_Effect_Simpleを使用してメニュー |
---|---|---|
カラーディスプレイ (8666モード) |
||
モノクロ表示 (16階調) |
||
黒/白表示 |
上記の表は、デフォルトのエフェクトWIDGET_Effect_3D1Lを使用してWIDGET_Effect_Simpleを使用して、メニューウィジェットの外観を示しています。また、他のすべてのエフェクトで動作します。
MESSAGEBOX:メッセージボックスのウィジェット
メッセージボックスウィジェットは、タイトルバーを持つフレームウィンドウ内のメッセージだけでなく、ウィンドウを閉じるために押す必要がある"OK"ボタンを表示するために使用されます。それは、作成したり、メッセージボックスを作成して実行するコードの1行のみを必要とします。すべてのMESSAGEBOX関連のルーチンはファイルに含まれています(複数可)MESSAGEBOXの*. c、MESSAGEBOX.hとGUI.h.
MULTIEDIT:複数行のテキストウィジェット
MULTIEDITウィジェットは複数行でテキストを編集することができます。あなたは、シンプルなテキストエディタとして、それを使用するか、または静的テキストを表示する。ウィジェットはスクロールバーがある場合とない場合のスクロールサポートしています。すべてMULTIEDIT関連のルーチンは、ファイル(複数可)MULTIEDITの*. c、MULTIEDIT.hにあります。すべての識別子はMULTIEDITを接頭辞が付いています。以下の表は、MULTIEDITウィジェットの外観を示しています。
説明 | フレームウィンドウ |
---|---|
編集モード、 自動水平スクロールバー、 非折り返しモード、 挿入モード、 |
|
編集モード ワードラップモード 上書きモード |
|
専用モード、読み取り ワードラップモード |
マルチページ:複数ページのウィジェット
マルチページのウィジェットは、ノートまたはファイルキャビネットにあるラベルの仕切りに似ています。マルチページのウィジェットを使用することにより、アプリケーションはウィンドウまたはダイアログボックスの同じ領域に対して複数のページを定義することができます。各ページは、ユーザーが対応するページを選択したときにアプリケーションが表示される情報またはウィジェットのグループの特定のタイプで構成されています。ページのタブをクリックする必要があるページを選択する。ないすべてのタブが表示できる場合は、マルチページのウィジェットは自動的にページをスクロールしてエッジに小さなスクロールバーが表示されます。サンプルフォルダには、マルチページのウィジェットを作成して使用する方法を示すファイルのWIDGET_Multipage.cが含まれています。以下の表は、マルチページのウィジェットの外観を示しています。
説明 | マルチページウィジェット |
---|---|
3ページとマルチページのウィジェット、 整列左/上。 |
|
6ページとマルチページのウィジェット、 配置、右側/下部。 |
PROGBAR:プログレスバーウィジェット
プログレスバーは、一般的に可視化するためのアプリケーションで使用されています、たとえば、タンクの充填レベルのインジケータやオイルプレッシャーインジケーター。サンプルのスクリーンショットは、この章の冒頭で、このセクションの終わりに見つけることができます。すべてPROGBAR関連のルーチンは、ファイル(複数可)PROGBAR*. c、PROGBAR.hにあります。すべての識別子はPROGBARを接頭辞が付いています。
radio:ラジオボタンウィジェット
ラジオボタンは、チェックボックスと同様に、選択肢を選択するために使用されています。ラジオボタンがオンになったり、選択されているときにドットが表示されます。チェックボックスとの違いは、ユーザーが一度に1つのラジオボタンを選択できることです。右のようなボタンが選択されている場合は、ウィジェット内の他のボタンは、オフになっています。1つのラジオボタンウィジェットは、常に垂直に配置されている任意の数のボタンを、含まれている場合があります。
無線関連のすべてのルーチンはファイルに置かれている(s)オプションボタンの*. c、RADIO.h。すべての識別子はRADIOに接頭辞が付いています。
SCROLLBAR:スクロールバーウィジェット
スクロールバーがリストボックスをスクロールしたり、フレームに完全に適合しない任意のウィンドウに使用されます。これらは、垂直に下に示すように、水平に作成する、またはされることがあります。
スクロールバーは、通常、例えば、リストボックスは、以下に示すように、既存のウィンドウで使用されています:
すべてSCROLLBAR関連のルーチンはファイルに置かれている(S)SCROLLBARの*. c、SCROLLBAR。H. すべての識別子はSCROLLBAR接頭辞が付いています。
スライダー:スライダーウィジェット
スライダウィジェットは、一般的にsliderbarを使用して値を変更するために使用されています。ウィジェットには、バーの横にあるスライダバーと目盛りで構成されています。これらの目盛りは、それをドラッグ中にスライダーバーをスナップするために使用することができます。
すべてのスライダーに関連するルーチンは*. C、SLIDER.hファイル(複数可)スライダに配置されています。すべての識別子は、スライダを接頭辞が付いています。
TEXT:テキストウィジェット
テキストウィジェットは、通常、以下のメッセージボックスに表示される、ダイアログボックス内のテキストのフィールドを表示するために使用されます。
もちろん、テキストフィールドは、次のように、他のウィジェットのラベルに使用することができます。
すべてのテキスト関連のルーチンは、ファイル(s)テキストに配置されての*. c、TEXT.h. すべての識別子は、TEXTを接頭辞が付いています。
WINDOW:ウインドウウィジェット
ウィンドウウィジェットは、リソーステーブルからダイアログウィンドウを作成するために使用されます。ダイアログは、フレームウィンドウのように見てはいけない場合、それを使用する必要があります。ウィンドウウィジェットは、背景として、子ウィンドウのコンテナとして機能します:それは、子ウィンドウが含まれており、通常は灰色で、背景を塗りつぶすこともできます。それはフレームとタイトルバーなしでずっとフレームウィンドウと同じように動作やダイアログに使用されます。