いつもお世話になっております。
すみません、以前からおかしいと思いつつも、自分のプログラムのどこかに原因があるんだろうと放置していた事を改めて調べてみたのですが、どうにもわからなかったので質問させて頂きます。
以前に SetUseASyncChangeWindowModeFunction という命令で
ウィンドウモードとフルスクリーンを切り替えられるという事を教えていただいたのですが、
これを使うと、モードを切り替えたあとになぜか処理速度が遅くなってしまいます。
サンプルプログラムを後述します。
このサンプルでは白いBOXを1ドットずつずらしながら表示していきます。
プログラム実行時には1ライン分動くのに5秒程度なのですが
一度ALT+ENTERでウィンドウモードにすると7秒かかるようになってしまいます。
もう一度フルスクリーンに戻しても遅いままです。
このプログラムでは初期がフルスクリーンですが、初期がウィンドウでフルスクリーンに切り替えたとしても同じように遅くなるはずです。
原因に心当たりがおありでしたらご教示くださると幸いです。
//ここからサンプル==========================
//フルスクリーンモードの異状調査サンプル
#include "DxLib.h"
int WINDOW_MODE = 0 ; //初期ウィンドウモード
//==Windowモードチェンジ========================================================
void WINDOW_MODE_ALTENTERchange( void* para ) {
// ウインドウモードで起動しているかどうかを取得する( 戻り値 TRUE:ウインドウモード FALSE:フルスクリーンモード )
if ( GetWindowModeFlag() ) {
WINDOW_MODE = 1 ;
} else {
WINDOW_MODE = 0 ;
} ;
return ;
}
//--------------------------------------------------------------------
//==========================================================================
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
// 最大化ボタンやALT+ENTERキーによる非同期なウインドウモードの変更の機能の設定を行う
SetUseASyncChangeWindowModeFunction( TRUE , WINDOW_MODE_ALTENTERchange , &WINDOW_MODE ) ;
// DXライブラリ初期化処理
if( DxLib_Init() == -1 ) return -1;
// 描画先画面を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
int x = 0 , y = 0 ;
//=================================================================
//== メインループ ===========================================
//=================================================================
while ( GetJoypadInputState( DX_INPUT_KEY_PAD1 ) == 0 ) {
DrawBox( x , y , x + 10 , y + 10 , GetColor( 255 , 255 , 255 ) , TRUE) ; // 四角形を描画
x ++ ;
if ( x >= 320 ) {
x = 0 ;
y ++ ;
if ( y >= 240 ) y = 0 ;
}
ScreenFlip() ;
if( ProcessMessage() == -1 ) {
break ;
}
}
//=================================================================
//== メインループ エンド ===================================
//=================================================================
InitGraph() ;
// DXライブラリ使用の終了
DxLib_End() ;
// ソフトの終了
return 0 ;
}
//==========================================================================