小さな開発室2001


FlipToGDISurface()の怪

フルスクリーンで実行中にダイアログ等をだすにはFlipToGDISurface()を使えばいいことは解ったのだが、
いざパスワード解除ダイアログを出した時に画面に出てきたり出てこなかったり。。。。
何かタイミングが関係してそうなんだけど。。。むぅ、、わからん。



BRSスクリーンセーバ計画〜起動オプションが要求する処理

スクリーンセーバですべき処理をネットや本でいろいろ調べた結果、起動時のオプションによってしなければ行けない処理がわかった。
オプション呼ばれるタイミング処理
/s
/S
スクリーンセーバの起動時、ファイルを右クリックでテスト、画面のプロパティで"プレビュー"スクリーンセーバを起動し、マウスの移動、ボタンが押された等のメッセージで終了処理。パスワードが設定されている場合には解除ダイアログを表示し、パスワードチェックを行う。2重起動の防止処理。
/c
または無し
画面のプロパティで設定、ファイルの右クリックで設定設定ダイアログを出して、INIファイルあるいはレジストリに設定を反映する。2重起動の防止処理。
/p画面のプロパティが開かれた時画面のプロパティのなかの小さな画面に何かを表示する処理。第2引数に指定されたが親ウインドウへのハンドル(?)から子ウインドウを作成し、何かを表示。
/a画面のプロパティでパスワード設定MPR.DLLを使ってパスワード設定ダイアログを出してパスワードの設定を行う。

一通り作ったが、パスワード設定時にフルスクリーン画面だと解除ダイアログがでてくれない。。。。なぜだ。


BRSスクリーンセーバ計画〜ファイルリソース化作戦

本体があるんだからスクリーンセーバーなんてすぐできると思ったら。

1.使用ファイルを全部リソース化しないと見てくれが悪い。
2.DirectXとスクリーンセーバライブラリの相性が悪いらしい。
3.設定ダイアログとかパスワードダイアログが要るらしい。

というわけで、ファイルリソース化から挑戦します。

これまでの要点は次の通り。

<<Xファイルのリソースからの読み込み>>
D3DRMLOADRESOURCE reso;
reso.hModule = NULL;
reso.lpName = "リソース名";
reso.lpType = "自前リソースタイプ";
meshBuilder->Load(&reso, NULL,D3DRMLOAD_FROMRESOURCE, NULL, NULL);
<<MIDIのリソースからの読み込み>>
HRSRC hFound = FindResource(NULL,"リソース名","自前リソースタイプ");
HGLOBAL hRes = LoadResource(NULL, hFound);
ObjDesc.dwSize = sizeof(DMUS_OBJECTDESC);
ObjDesc.guidClass = CLSID_DirectMusicSegment;
ObjDesc.dwValidData = DMUS_OBJ_CLASS | DMUS_OBJ_MEMORY;
ObjDesc.pbMemData = (BYTE *) LockResource(hRes);
ObjDesc.llMemLength = SizeofResource(NULL, hFound);
hr =  DMSC.m_pDMLoader->GetObject(&ObjDesc, IID_IDirectMusicSegment2, (void**)& DMSC.m_pDMSegment);

<<テクスチャ用コールバック関数>>
HRESULT __cdecl loadTextures(char *name, void *arg, LPDIRECT3DRMTEXTURE3 *tex)
{
	char *resName;
	resName = (char*)arg;
	return D3Z.lpD3DRM->LoadTextureFromResource( NULL,resName,RT_BITMAP,tex);
}
テキストファイルはどうしてくれよふ。