SetRestoreGraphCallback

グラフィックハンドル復元関数を登録する

SetRestoreGraphCallback Callback

Callback : グラフィックハンドルを復元する処理を行うコールバック関数

(プラグイン / モジュール : DxLibW)

解説

フルスクリーンモードでソフトを実行している時に、
不意に別のソフト(セキュリティソフト等)がアクティブになり一時的にデスクトップ画面に戻ってしまうことがあります。
(他にも ALT+TAB キーで自ら別のソフトをアクティブにすることでもデスクトップ画面に戻ります)

このとき、グラフィックハンドルが持つ画像の情報は失われてしまいます。

しかし、一時的にデスクトップ画面になった後、
再びDXライブラリを使用したソフトがアクティブになりフルスクリーン画面に戻ると、
何事も無かったかのように画像は描画されます。

また、Android版の場合は作成したアプリを実行中に別のアプリをアクティブにして、その後再度作成したアプリを再度アクティブにした場合も何事も無かったかのように画像は描画されます。

このタイミングでは LoadGraph 関数 や LoadDivGraph 関数で読み込んだ画像は OS の動作によって壊れてしまって正常に描画されないはずなのですが、正常に描画され続けます。

それは何故かといいますと、
DXライブラリが LoadGraph 関数 や LoadDivGraph
関数等の画像ファイルから読み込まれて作成されたグラフィックハンドルの画像を、
ひそかに再度画像ファイルから読み込んでいるからです。

というわけで、画像ファイルから読み込まれた画像は何もしなくても問題なく復元されるのですが、
上記の復元のカラクリでは MakeGraph
で作成したグラフィックハンドルに GetDrawScreenGraph で読み取った画像や、
MakeScreen で作成されたグラフィックハンドルに対して描画された画像は復元されません。

というのも、DXライブラリは MakeGraphMakeScreen で作成したグラフィックハンドルに対してどのような操作や描画が行われたかは把握していないので、
その内容を再現することができないからです。

なので、その復帰処理はライブラリの使用者に任せるしかない、ということでこの SetRestoreGraphCallback が登場します。

この関数は失われた画像をグラフィックハンドルに再度読み込んだり描画処理を行って内容を復帰する関数を登録することができ、
この関数に渡した関数はデスクトップ画面からフルスクリーン画面に戻る際に呼ばれます。

( Android版の場合は作成したアプリが再度アクティブになったタイミングで呼ばれます )

失われた画像を再度読み込む関数では、最初に LoadGraphLoadDivGraph
で画像ファイルから読み込んだグラフィックハンドルの画像を ReloadFileGraphAll
を使用して再度画像ファイルから読み込み直した後、MakeGraph で作成したグラフィックハンドルに対して GetDrawScreenGraph で読み取った画像については同じ状況を再現して再度
GetDrawScreenGraph でグラフィックハンドルに画像を取り込み、MakeScreen で作成したグラフィックハンドルについては内容が失われる前にグラフィックハンドルに対して行った描画処理を再度行う、ということをします。

戻り値:
  -1:エラー発生
  0:成功

情報

プラグイン / モジュールDxLibW
バージョン3.24f
作成日2026/04/12
著作者DxLib: Takumi Yamada / HSP binding: IronHSP Project
URLhttps://dxlib.xsrv.jp/
備考hspdxlib.as をインクルードして使用
タイプDxLib ゲームライブラリ
グループDxLib 画像管理
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\hspdxlib.hs