STM32-EMWINウィジェット(13)

EMWI

序文

ガジェットは、ウィンドウの世界ではコントロールと呼ばれるオブジェクトタイプのプロパティを持つさまざまなウィンドウであり、ユーザーインターフェイスを構成する要素です。それらは特定のイベントに自動的に反応することができます。たとえば、ボタンが押されると、さまざまな状態で表示できます。ガジェットは作成する必要があり、その存続期間中いつでも変更できるプロパティがあり、通常は不要になったときに削除されます。ウィンドウと同じように、ガジェットはその作成関数によって返されるハンドルによって参照されます。ガジェットにはウィンドウマネージャーが必要であり、ガジェットが作成されると、他のウィンドウと同じように処理できます。WMは、必要に応じて正しく表示(および再描画)されることを保証します。アプリケーションやユーザーインターフェイスを作成するためにガジェットは必要ありませんが、プログラミングが大幅に簡素化されます。

1.ガジェットの基本的な知識

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

2.ガジェットの使用方法

1.塗り直し機構

ウィジェットは、そのプロパティに従って自身を描画します。これは、WM_Exec()、GUI_Exec()、またはGUI_Delay()が呼び出されたときに実行されます。マルチタスク環境では、通常、WM_Exec()を呼び出してウィジェット(およびコールバックを持つ他のすべてのウィンドウ)を更新するのはバックグラウンドタスクです。ウィジェットのプロパティが変更されると、ウィジェットのウィンドウ(またはその一部)は無効としてマークされますが、すぐには再描画されないため、コードスニペットは非常に高速に実行されます。再ペイントは、後でWMによって実行されるか、ウィジェットに対してWM_Paint()を呼び出すことによって強制的に実行されます(または、すべてのウィンドウが再ペイントされるときにWM_Exec()が呼び出されるまで)。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.ガジェットの使用

プログレスバーを表示したいとします。必要なのは次のコードだけです。

PROGBAR_Handle hProgBar; (1)
GUI_DispStringAt("Progress bar", 100, 20);
hProgBar = PROGBAR_Create(100, 40, 100, 20, WM_CF_SHOW); (2)

(1)、プログレスバーハンドルを定義します。
(2)PROGBAR_Create()関数を呼び出してプログレスバーを作成します。作成が完了すると、ウィンドウマネージャーは単一のWM_Exec()を呼び出すときにこのウィジェットを自動的に描画します。各タイプのガジェットには、外観を変更するいくつかのメンバー関数があります。ガジェットが作成されたら、ガジェットのハンドルを最初の引数として使用するメンバー関数の1つを呼び出すことにより、プロパティを変更できます。上記で作成したプログレスバーを45%表示し、バーの色をデフォルト設定(ダーク/ライトグレー)からグリーン/レッドに変更するには、次のコードスニペットを使用できます。

PROGBAR_SetBarColor(hProgBar, 0, GUI_GREEN);
PROGBAR_SetBarColor(hProgBar, 1, GUI_RED);
PROGBAR_SetValue(hProgBar, 45);

ここに画像の説明を挿入
デフォルト構成
すべてのガジェットには、さまざまなデフォルト設定(使用されるフォントや色など)を定義する1つ以上の構成マクロもあります。

ガジェットが通信する方法ガジェット
は通常、子ウィンドウとして作成されます。親ウィンドウは、同期を確保するために、任意のウィンドウタイプ、さらには別のガジェットにすることができます。通常、親ウィンドウの親ウィンドウの子でイベントが発生するたびに通知する必要があります。イベントが発生すると、子ウィジェットはWM_NOTIFY_PARENTメッセージを送信することで親ウィンドウと通信し、メッセージの一部として送信される通知コードはイベントによって異なります。ほとんどのウィジェットには、さまざまなタイプのイベントを定義する1つ以上の通知コード
スキン
があります。ウィジェットの外観は、それぞれのメンバー関数を使用して変更できます。その一部はスキニングをサポートしています。ガジェットでスキニングが使用されている場合、「スキン」によってガジェットの外観が決まり、一部のメンバー関数は効果がありません。
組み込みアプリケーションのガジェット
に動的メモリを使用することは、分割効果があるため、通常はあまり望ましくありません。この状況を回避するためにさまざまな戦略を使用できますが、メモリ領域がアプリケーションのポインタによって参照されている限り、使用は制限されます。 。したがって、emWinは別のアプローチを使用します。すべてのオブジェクト(および実行時に保存されるすべてのデータ)は、ハンドルによって参照されるメモリ領域に保存されます。これにより、実行時に割り当てられたメモリ領域を再割り当てできるため、ポインタを使用するときに発生する可能性のある長期的な割り当ての問題を回避できます。したがって、すべてのガジェットはハンドル参照を使用します。

3.一般的な制御API関数

1.コントロールのWM機能

ガジェットは基本的にウィンドウであるため、任意のウィンドウマネージャーAPIルーチンと互換性があります。ガジェットのハンドルはhWinパラメータとして使用され、ガジェットは他のウィンドウと同じように扱われます。

WM_DeleteWindow() 删除窗口。
WM_DisableMemdev() 禁止使用存储设备进行重绘。
WM_EnableMemdev() 启用存储设备用于重绘。
WM_InvalidateWindow() 使窗口无效。
WM_Paint() 立即绘制或重绘窗口。

2.一般的なAPI関数

<WIDGET>_Callback() 默认回调函数。
<WIDGET>_CreateIndirect() 用于对话框中的自动创建。
<WIDGET>_CreateUser() 使用额外字节作为用户数据创建小工具。
<WIDGET>_GetUserData() 检索用<WIDGET>_SetUserData 设置的数据。
<WIDGET>_SetUserData() 设置小工具的额外数据。
WIDGET_GetDefaultEffect() 返回用于小工具的默认效果。
WIDGET_SetDefaultEffect() 设置用于小工具的默认效果。
WIDGET_SetEffect() 设置用于给定小工具的效果。

ガジェットの名前を示します。この関数は、ダイアログボックスを使用するときに各ガジェットを作成するために使用されるため、関数_CreateIndirect()が特に重要です。

3._CreateIndirect()

説明
ダイアログで使用するウィジェットを作成します。
関数プロトタイプ

<WIDGET>_Handle <WIDGET>_CreateIndirect(
const GUI_WIDGET_CREATE_INFO * pCreateInfo,
WM_HWIN hParent,
int x0,
int y0,
WM_CALLBACK * cb);

追加情報
ウィジェットは、適切なプレフィックスを使用して間接的に作成できます。例:BUTTON_CreateIndirect()は間接的にボタンウィジェットを作成し、CHECKBOX_CreateIndirect()は間接的にチェックボックスウィジェットを作成します。ウィジェットをダイアログに含める場合にのみ間接的に作成する必要があります。それ以外の場合は、_Create()関数を使用してウィジェットを直接作成できます。

おすすめ

転載: blog.csdn.net/qq_51963216/article/details/124034681
おすすめ