独自のボタンを作成する
SFRButtonBase クラスを継承して、独自のボタンを作成します。
SFMTYPEDEFCLASS(UserButton) class UserButton : public SFRButtonBase { // コピー禁止マクロ SFMSEALCOPY(UserButton) public: // コンストラクタとデストラクタの宣言 UserButton(SFRResponderPtr, SFXRectangleConstRef, BehaviorType); virtual ~UserButton(Void); private: // 描画ハンドラの宣言 virtual Void HandleContent(SFXGraphicsPtr); // キー リリース ハンドラの宣言 virtual Void HandleRelease(Void); }; // コンストラクタ UserButton::UserButton(SFRResponderPtr director, SFXRectangleConstRef rect, BehaviorType behavior) : SFRButtonBase(director, rect, behavior, four_char_code('U', 's', 'e', 'r')) { return; } // デストラクタ UserButton::~UserButton(Void) { return; } // 描画ハンドラ Void UserButton::HandleContent(SFXGraphicsPtr graphic) { SFXRGBColor color; // 応答可能か if (GetInheritEnable()) { // フォーカスされているか if (GetInheritFocus()) { // キーが押されているか if (GetStatusPress()) { color.SetRGB(0x44, 0x44, 0x44); } else { color.SetRGB(0x66, 0x66, 0x66); } } else { color.SetRGB(0x88, 0x88, 0x88); } } else { color.SetRGB(0xAA, 0xAA, 0xAA); } // ボタンを描画する graphic->DrawRectangle(GetVirtualWorld(), color); return; } // キー リリース ハンドラ Void UserButton::HandleRelease(Void) { // SREVT_CONTROL イベントを自分自身に送信する Invoke(SFXEvent(SREVT_CONTROL, 0, reinterpret_cast<UInt32>(this))); return; }
// ウィンドウを生成する window = ::new SFRPlainWindow(this, GetContentWorld()); // 独自のボタンを作成する ::new UserButton(window, SFXRectangle(10, 10, 40, 40));