初期設定ではDXライブラリは DxLib_End で「ソフトを終了します」というメッセージを
発行してしまうので、Vista以前では無理やり終了せずに実行を続けても動いていたものが、
Vista以降だとそうはいかなくなったのかもしれません
色々弄って対処しようかと思ったのですが、既存の関数 SetDxLibEndPostQuitMessageFlag を
使用することで対処することができましたので、よろしければお試しになってみて下さい
// DXライブラリ終了時に PostQuitMessage を呼ぶかどうかのフラグをセットする
int SetDxLibEndPostQuitMessageFlag( int Flag ) ;
この関数を DxLib_Init の前でも後でもかまいませんので、FALSE を渡して
呼んでください
SetDxLibEndPostQuitMessageFlag( FALSE ) ;
DxLib_End の際に「ソフトを終了します」というメッセージを発行しなくなります
私の環境ではこれで Vista 上で DxLib_Init と DxLib_End を何度呼んでも正常に
動作しましたので、よろしければお試しください m(_ _)m
テストで使用したプログラム
スペースキーを押すたびに DxLib_End DxLib_Init 初期設定 を行います
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int handle, x, add;
// ウインドウモードで起動
ChangeWindowMode( TRUE );
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1;
// DxLib_End で PostQuitMessage を使用するかどうかのフラグを「使用しない」にセット
SetDxLibEndPostQuitMessageFlag( FALSE ) ;
// 画像の読み込み
handle = LoadGraph( "Test1.bmp" );
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK );
// メインループ(何かキーが押されたらループを抜ける)
x = 0;
add = 8;
while( ProcessMessage() == 0 )
{
// 移動
x += add;
if( x < 0 || x > 640 ) add = -add;
// 画面のクリア
ClearDrawScreen();
// 画像の描画
DrawGraph( x, 0, handle, TRUE );
DrawLine( x, 0, x, 10000, GetColor( 255,255,255 ) ) ;
// スペースキーが押されたら DxLib_End を実行する
if( GetInputChar( TRUE ) == ' ' )
{
// DXライブラリの後始末
DxLib_End() ;
// 再初期化
// ウインドウモードで起動
ChangeWindowMode( TRUE );
// DXライブラリの初期化
DxLib_Init() ;
// 画像の読み込み
handle = LoadGraph( "Test1.bmp" );
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK );
}
// 裏画面の内容を表画面に反映
ScreenFlip();
}
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}