トップページ > 過去ログ > 記事閲覧
フルスクリーンからウィンドウへ切り替え時。
名前:SweetBlack 日時: 2009/03/18 02:07

いつもお世話になっております。 ちょっと良く判らない事があるので質問させていただきます。 画面をフルスクリーン表示とウィンドウ表示とを切り替えさせようと 後述のサンプルのようなプログラムを組んでいるのですが、 ウィンドウからフルスクリーンへの切り替えは正常に行われるのに、 フルスクリーンからウィンドウに切り替えようとしてもできません。 具体的には、ウィンドウ枠が出るのですがそのまま終了してしまってる感じです。 log.txtを見ると 183: ソフトの二重起動検査... 二重起動されています、ソフトを終了します となっているのですが、これはいったいどうすれば回避できるのでしょうか。 なお、BCC用のDXライブラリを使用しております。 //以下サンプル============================== #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int WINDOW_MODE = 0 ; int Cr ; for ( int i = 0 ; i < 4 ; i++ ) { // ウインドウモードに変更 if ( WINDOW_MODE == 0 ) { ChangeWindowMode( FALSE ) ; } else { ChangeWindowMode( TRUE ) ; } if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } // 白色の値を取得 Cr = GetColor( 255 , 255 , 255 ) ; ClearDrawScreen() ; // 文字列の描画 if ( WINDOW_MODE == 0 ) { DrawString( 250 , 240 - 16 , "FULL SCREEN" , Cr ); } else { DrawString( 250 , 240 - 16 , "WINDOW MODE" , Cr ); } WaitKey() ; // キーの入力待ち(『WaitKey』を使用) WINDOW_MODE = 1 - WINDOW_MODE ; DxLib_End() ; // DXライブラリ使用の終了処理 } return 0 ; // ソフトの終了 }

Page: 1 |

Re: フルスクリーンからウィンドウへ切り替え時。 ( No.1 )
名前:Will 日時:2009/03/18 09:59

ループごとにDxLib_InitとDxLib_End実行するのがまずいんじゃないのかな? モードの変更はDxLib_Initの前でなければならないわけではないですし。
Re: フルスクリーンからウィンドウへ切り替え時。 ( No.2 )
名前:管理人 日時:2009/03/18 10:58

DxLib_Init は最初の一回だけで、以後の画面切り替えは DxLib_End を呼ばずに そのまま ChangeWindowMode を使うようにすると正常に動作すると思います #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int WINDOW_MODE = 0 ; int Cr ; // DXライブラリ初期化処理 if( DxLib_Init() == -1 ) return -1 ; // エラーが起きたら直ちに終了 for( int i = 0 ; i < 4 ; i++ ) { // ウインドウモードに変更 if ( WINDOW_MODE == 0 ) { ChangeWindowMode( FALSE ) ; } else { ChangeWindowMode( TRUE ) ; } // 白色の値を取得 Cr = GetColor( 255 , 255 , 255 ) ; ClearDrawScreen() ; // 文字列の描画 if ( WINDOW_MODE == 0 ) { DrawString( 250 , 240 - 16 , "FULL SCREEN" , Cr ); } else { DrawString( 250 , 240 - 16 , "WINDOW MODE" , Cr ); } // キーの入力待ち(『WaitKey』を使用) WaitKey() ; WINDOW_MODE = 1 - WINDOW_MODE ; } // DXライブラリ使用の終了処理 DxLib_End() ; // ソフトの終了 return 0 ; } もしこれで正常に動作しませんでしたら、誤って DirectX9 版をアップ してしまった可能性があります m(_ _;m ( DirectX9 版では正常に切り替えができませんでした )
Re: フルスクリーンからウィンドウへ切り替え時。 ( No.3 )
名前:SweetBlack 日時:2009/03/18 15:36

回答ありがとうございます。 ですが、それでしたらリファレンスにあります >なおこの関数を DxLib_Init 関数を使用する前に呼び出すことに >より初期状態を変更することが出来ます。 この機能はどのように使えばいいのでしょうか?
Re: フルスクリーンからウィンドウへ切り替え時。 ( No.4 )
名前:Will 日時:2009/03/18 19:37

DxLib_Initでウィンドウが作成されるので、それより前に呼び出した場合は、初期状態を変更できます。 DxLib_Init後に呼び出した場合は、その時点で変更されるということです。 先にも書きましたが、呼び出す場合は必ずDxLib_Initよりも前でなければならないというわけではないです。
Re: フルスクリーンからウィンドウへ切り替え時。 ( No.5 )
名前:SweetBlack 日時:2009/03/18 21:59

すみません、何か齟齬というか勘違いがあるようなので、考えをまとめます。 Dxlib_Initより先に書いた場合は「初期状態」を変更できる。 ここで言う「初期状態」はウィンドウが作成された時点での状態、と言う事でしょうか。 では、Dxlib_Initより先に”書かなかった”場合は無条件でフルスクリーンで作成され、 その後にウィンドウに切り替える必要がある、という事でしょうか。 一度どこかで ChangeWindowModeとDxLib_Initを順番に実行しておけば 次にプログラムを起動した時に自動的にその時のウィンドウ状態で 起動してくれる、という意味ではなかったんですね? 前回のウィンドウ状態で起動したい場合は 外部ファイルにその情報を記録しておいて、 事前にそれを読み込んでおく、等の手順を踏まないとダメという事でいいんでしょうか。
Re: フルスクリーンからウィンドウへ切り替え時。 ( No.6 )
名前:Will 日時:2009/03/19 10:14

全てYESです。 DXライブラリ自身がINIファイルを持っていたり、レジストリをいじったりはしないので「自動的に〜」は無理です。 自身が作る部分で対応する必要があります。
Re: フルスクリーンからウィンドウへ切り替え時。 ( No.7 )
名前:SweetBlack 日時:2009/03/19 18:34

回答ありがとうございます。 やっと納得できました。 おかげさまで、今回の問題どころか、 まったく別件ですが、今までどうしても原因が解らなかった現象についてまでついでに判明し、 さらにプログラム全体の改良にまで繋がって、大幅に進展がありました。 勘違いを元とした質問にお付き合いさせて申し訳ありません。 ありがとうございました。

Page: 1 |