描画できない
描画できない場合は以下の項目を確認してください。
・GUI フレームワークを使用したアプリ (アプリクラスが SFYApplication を継承) の場合
1. 描画ハンドラの中で描画していますか?
2. 描画ハンドラマクロの引数の graphics を使って描画していますか?
// 描画ハンドラの定義(ウィンドウ内に描画)
XANDLER_IMPLEMENT_VOIDRENDER(MyWindow, OnRenderRequest, invoker, reason, graphics)
{
unused(invoker);
unused(reason);
// 四角形を描画する
graphics->DrawRectangle(SFXRectangle(10, 10, 25, 25));
// graphics->Update(); は必要なし
}
3. コンストラクタ内で描画ハンドラを登録していますか?
// コンストラクタ
MyWindow::MyWindow(Void) : ...
{
// ハンドラを登録する(エラー処理は省略)
RegisterHandler(
SFXEventRange(SFEVT_RESPONDER_RENDER, SFEVT_RESPONDER_RENDER,
SFP16_RENDER_REQUEST, SFP16_RENDER_REQUEST),
XANDLER_INTERNAL(OnRenderRequest));
return;
}
・GUI フレームワークを使用しないアプリ (アプリクラスが SFCApplication を継承) の場合
1. グラフィックス・インターフェースを取得していますか?
SFXGraphicsPtr graphics;
// グラフィックス・インターフェースを取得する
graphics = SFXGraphics::GetInstance();
// 四角形を描画する
graphics->DrawRectangle(SFXRectangle(10, 10, 25, 25));
2. SFXGraphics::Update 関数を呼び出していますか?
graphics->Update();
graphics インスタンスについては グラフィックインターフェースの取得 を参照
参照: リファレンス 3.1. SFY アプレット | リファレンス 5.5. カスタマイズ
SFXFrameColor クラスを使ってフレームを描画する
SFXFrameColor クラスは、フレームの枠と影の部分の色をまとめて管理するためのクラスです。
このクラスは SFXGraphics クラスでフレームを描画する場合に利用します。フレームの各部分の色について演算したり、フレーム全体について色演算できます。
※ 数値がオーバーフローする場合や、アンダーフローする場合は適切に処理されます。
■
SFXFrameColor クラスの使用方法
Void SFXColorExplainer::_SFXFrameColor(Void) const
{
// フレーム色定数を準備する
// ( 以下のフレーム色は、緑色の枠と赤色の影を表す )
static SFXFrameColor::AtomRecConst frame = {
{0x00, 0x00, 0xFF, 0x00}, {0x00, 0xFF, 0x00, 0x00}
};
SFXGraphicsPtr graphics;
// グラフィック オブジェクトを取得する
graphics = SFXGraphics::GetInstance();
if (graphics != null) {
// フレームを描画する
// ( フレームは指定した矩形の外側に描画される )
graphics->DrawFrame(SFXRectangle(20, 20, 40, 40), frame);
// 画面をアップデートする
graphics->Update();
}
return;
}
SFXBevelColor クラスを使ってべベル矩形を描画する
SFXBevelColor クラスは、ベベル矩形のライト・ベース・ダークの各部分の色をまとめて管理するためのクラスです。( 「ベベル矩形」とは立体的に見える長方形のことです。 )
このクラスは SFXGraphics クラスでベベル矩形を描画する場合に利用します。ベベル矩形の各部分の色について演算したり、全体について色演算できます。
※ 数値がオーバーフローする場合や、アンダーフローする場合は適切に処理されます。
■
SFXBevelColor クラスの使用方法
Void SFXColorExplainer::_SFXBevelColor(Void) const
{
// 青色のベース色定数を準備する
static SFXRGBColor::AtomRecConst color = {
0x00, 0x88, 0x88, 0xFF
};
SFXRGBColor temp;
SFXBevelColor bevel;
SFXGraphicsPtr graphics;
// べベル色のライト部分・ベース部分・ダーク部分を青色に設定する
bevel.Set(color, color, color);
// ライト部分の各要素に 0x66 を加算する
bevel.AddLightRGB(0x66);
// ダーク部分の各要素から 0x44 を減算する
bevel.SubDarkRGB(0x44);
// グラフィック オブジェクトを取得する
graphics = SFXGraphics::GetInstance();
if (graphics != null) {
// べベル矩形を描画する
graphics->FillBevelRectangle(SFXRectangle(20, 20, 40, 40), bevel);
// べベル色のライト部分とダーク部分を入れ替える
temp = bevel.GetLight();
bevel.SetLight(bevel.GetDark());
bevel.SetDark(temp);
// べベル矩形を描画する
graphics->FillBevelRectangle(SFXRectangle(24, 24, 32, 32), bevel);
// 画面をアップデートする
graphics->Update();
}
return;
}
ウィンドウ上に画像を描画するには
ウィンドウ上に画像を描画するには、ウィンドウに描画ハンドラを登録し、
描画ハンドラ内のグラフィック・オブジェクトを使って描画します。
// ウィンドウの定義
class MyWindow : public SFRTitleWindow {
...
MyWindow(Void);
// 描画ハンドラの宣言
HANDLER_DECLARE_VOIDRENDER(MyWindow, OnRenderContent)
};
// 描画ハンドラの定義
HANDLER_IMPLEMENT_VOIDRENDER(MyWindow, OnRenderContent, graphics)
{
// SFBBitmapSmp 型の bitmap に画像が格納されているとする
// SFXRectangle(0, 0, 100, 100) に画像を描画する
graphics->BitBlt(SFXRectangle(0, 0, 100, 100), bitmap);
return;
}
// コンストラクタ
MyWindow::MyWindow(Void) : ...
{
// ハンドラを登録する(エラー処理は省略)
RegisterHandler(SREVT_RESPONDER_RENDER, SRP16_RENDER_CONTENT,
HANDLER_BEFORE, HANDLER_FUNCTION(OnRenderContent));
return;
}
graphics インスタンスについては グラフィックインターフェースの取得 を参照
文字列を描画する
文字列を描画するには、SFXGraphics::DrawText 関数、または
SFXGraphics::DrawString 関数を使用します。
SFXGraphics::DrawText は1行、SFXGraphics::DrawString は複数行の描画を行います。
SFXGraphicsPtr graphics = SFXGraphics::GetInstance();
// "Hello World" 文字列を座標 (10, 20) に描画する
graphics->DrawText("Hello World", SFXGrid(10, 20));
// 左上が (20, 20), 幅 100, 高さ 100 の長方形内に複数行で描画する
graphics->DrawString("very long long long long text",
SFXRectangle(20, 20, 100, 100));
graphics インスタンスについては グラフィックインターフェースの取得 を参照
参照 SFXGraphics::DrawText | SFXGraphics::DrawString |
SFXGraphics::GetInstance
長方形を描画する
長方形を描画するには、SFXRectangle クラスと SFXGraphics クラスを使用します。
画面やウインドウへの描画は、描画ハンドラの中で行います。
// 長方形の作成
SFXRectangle rect(10, 10, 20, 10); // x 座標, y 座標, 横幅, 高さ
// 色の設定
SFXRGBColor color(0x00, 0x00, 0xFF, 0x00); // 赤, 緑, 青, アルファ
SFXGraphicsPtr graphics = SFXGraphics::GetInstance();
graphics->DrawRectangle(rect, color); // 長方形の描画
graphics->FillRectangle(rect, color); // 長方形の塗りつぶし
graphics インスタンスについては グラフィックインターフェースの取得 を参照
参照 SFXGraphics::GetInstance | SFXGraphics::DrawRectangle |
SFXGraphics::FillRectangle