![]() ![]() ![]()
|
SophiaFramework 2.1 |
コントロールはパソコンで言うところのボタンやチェックボックス、 ラジオボタンなどです。ウィンドウやダイアログ上に生成して ユーザに対してインターフェースを提供します。 コントロールを使用する方法も他のレスポンダと同じですので 簡単に使用することができます。
コントロールを作成するには作成したいコントロールのインスタンスを new 演算子で生成します。
以下にチェック ボックス コントロールを貼り付けたウィンドウの サンプル コードを示します。
SFMTYPEDEFCLASS(MyWindow)
class MyWindow : public SFRTitleWindow {
public:
inline MyWindow(SFRApplicationPtr app) : SFRTitleWindow(app, SFURect(10, 10, 100, 100), "Hello")
{
SFRControlPtr control;
if (Exception() == NO_ERROR) {
control = new SFRCheckboxControl(this, SFURect(5, 5, 0, 0), "Checkbox");
if (control != NULL) {
if (Exception(control->Exception()) != NO_ERROR) {
delete control;
}
}
else {
Exception(ENOMEMORY);
}
}
return;
}
virtual inline ~MyWindow(Void)
{
return;
}
};
上記コードではチェック ボックスが表示されセレクト キーが押されるたびに チェックが点いたり消えたりする動作をします。 コントロールの動作をカスタマイズするには、SREVT_CONTROL イベントを 受け取るハンドラを登録します。以下にサンプル コードを示します。
SFMTYPEDEFCLASS(MyWindow)
class MyWindow : public SFRTitleWindow {
public:
inline MyWindow(SFRApplicationPtr app) : SFRTitleWindow(app, SFURect(10, 10, 100, 100), "Hello")
{
SFRControlPtr control;
if (Exception() == NO_ERROR) {
control = new SFRCheckboxControl(this, SFURect(5, 5, 0, 0), "Checkbox");
if (control != NULL) {
if (Exception(control->Exception()) == NO_ERROR) {
Exception(control->RegisterHandler(SREVT_CONTROL, HANDLER_BEFORE, Control_static, this));
}
else {
delete control;
}
}
else {
Exception(ENOMEMORY);
}
}
return;
}
virtual inline ~MyWindow(Void)
{
return;
}
static inline Bool Control_static(ConstSFUEventRef event, VoidPtr responder)
{
MyWindowPtr(responder->Control_handler(event.p16(), SFRCheckboxControlPtr(event.p32()));
return(TRUE);
}
inline Void Control_handler(UInt16 value, SFRCheckboxControlPtr control)
{
switch (value) {
case ...
// something to do
break;
}
return;
}
};
上記コードではセレクト キーが押されてキー リリースのタイミングで Control_handler 関数が呼び出されます。Control_handler には そのときのコントロールの値とオブジェクトのポインタが渡されますので それを利用して処理を行います。 他のコントロールでもほぼ同じで、現在のバージョンではボタン系コントロールは キー リリース時に SFREVT_CONTROL イベントを送信する仕様になっています。
コントロールは標準で5種類定義されています。 SFRButtonControl、 SFRCheckboxControl、 SFRRadiobuttonControl、 SFRLabelControl と SFRBrewTextControl です。 それぞれのコントロールは継承して使用することはできません。 用意されているコントロールとまったく異なるコントロールを定義する場合は、 SFRControl から継承します。
| Copyright(C) 2003 Sophia Cradle Inc., All Rights Reserved. |
![]() ![]() ![]()
|