トップページ > 記事閲覧
SetChangeScreenModeGraphicsSystemResetFlagとウィンドウの関係
名前:たろう 日時: 2026/02/26 01:52

いつもすみません、たろうです ゲームの縦横サイズをゲーム中にかえますが、その際の挙動で困っています 下はそれを再現したものですが・・・ 1ボタンでウィンドウサイズを変え、2ボタン終了という仕組みです このまま実行した時と、SetChangeScreenModeGraphicsSystemResetFlag(0);をコメントアウト した上で実行したときで、ウィンドウサイズの挙動が変わってしまいます。 SetChangeScreenModeGraphicsSystemResetFlagがあるとウィンドウサイズが変更されないようです。 2枚のモニタの解像度がそれぞれ両方とも1920x1080のときにそれがおこるのですが 片方を縦表示にして1920x1080(プライマリ)と1080x1920という設定にしてためすと SetChangeScreenModeGraphicsSystemResetFlagがあってもウィンドウサイズがちゃんと変更されます。 つまり存在するモニタの縦(横)幅よりも長い縦(横)幅のサイズを指定して SetGraphMode();を行うと、SetChangeScreenModeGraphicsSystemResetFlagがあるばあいのみ ウィンドウのサイズがおかしくなるようです。 すみませんが、ご確認いただけると助かります よろしくお願いいたしますm(_ _)m (※2026/02/23 23:11の最新のバージョンを使っています) #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ) ; DxLib_Init(); SetDrawScreen( DX_SCREEN_BACK ); SetGraphMode(1920,1080,32); SetChangeScreenModeGraphicsSystemResetFlag(0); //画面モード変更時グラハンリセットしない int nb=0,font=CreateFontToHandle("Arial",12,9,0); int swt=0,mode=0,IM=LoadGraph("test.bmp");//1920x1080pxの画像 while( ProcessMessage() == 0 ) { ClearDrawScreen(); DrawBox(1,1,300,300,GetColor(255,0,0),1); DrawGraph(0,0,IM,1); if(CheckHitKey(KEY_INPUT_1)==1){swt=1;} if(CheckHitKey(KEY_INPUT_1)==0&&swt){swt=0;mode=(int)!mode;if(mode==0){SetGraphMode(1920,1080,32);}else{SetGraphMode(1080,1920,32);}} if(CheckHitKey(KEY_INPUT_2)==1){return 0 ;} ScreenFlip(); } DxLib_End() ; return 0 ; }
メンテ

Page: 1 |

Re: SetChangeScreenModeGraphicsSystemResetFlagとウィンドウの関係 ( No.1 )
名前:管理人 日時:2026/02/28 02:21

SetChangeScreenModeGraphicsSystemResetFlag( FALSE ); の場合と SetChangeScreenModeGraphicsSystemResetFlag( TRUE ); の場合では実行される プログラムが途中で分岐しているのですが、確認してみた所 SetChangeScreenModeGraphicsSystemResetFlag( FALSE ); の場合のみ 『デスクトップ画面より大きいサイズが指定されていた場合はエラーとして何もせず関数を抜ける』 という処理になっていました 確かにデスクトップ画面サイズ以上のウィンドウサイズにすると問題が発生することもあると思うので おかしな処理ではないと思うのですが、何かデスクトップ画面サイズ以上のウィンドウサイズにされたい 理由などがあるのでしょうか? (・・
メンテ
Re: SetChangeScreenModeGraphicsSystemResetFlagとウィンドウの関係 ( No.2 )
名前:たろう 日時:2026/02/28 08:16

いつもありがとうございます。 縦スクロールシューティングなので、プレイヤー側で縦画面表示と横画面表示を選べるようにしています その時、1920x1080と1080x1920できりかわるのですが、1920x1080モニタで遊んでいる場合にこのきりかえをすると ウィンドウが縦になりません。画面からはみ出てもSetWindowSizeでウィンドウを小さく表示するので それは問題ないですし、フルスクリーンであれば勝手に画面内に収まるよう縮小表示されると思います 現在の状況のままで縦表示を可能にするにはモニタサイズを取得して、 それより小さいサイズでSetGraphModeをやらないといけないので、そのサイズ変更に対応した 画面づくりをしないとならず、すごく大変になってしまいます。 ゴチャゴチャすると頭がついていかないのでぜひ対応していただけるとたすかりますm(_ _)m
メンテ
Re: SetChangeScreenModeGraphicsSystemResetFlagとウィンドウの関係 ( No.3 )
名前:管理人 日時:2026/03/01 01:31

理由のご説明ありがとうございます SetWindowSize の指定サイズを小さくすることで画面表示を小さくすると環境によっては 最近点サンプリングによる低品質な縮小表示になるのであまりお勧めはできませんが、 お手軽という意味では確かに有効ですね… (・・; とりあえず指定された画面サイズがデスクトップのサイズを超えてしまうか チェックするプログラムをコメントアウトしてみましたので、 よろしければお試しください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.2 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: SetChangeScreenModeGraphicsSystemResetFlagとウィンドウの関係 ( No.4 )
名前:たろう(解決) 日時:2026/03/01 02:07

いつもありがとうございます。確認させていただき、期待通りの動作になりましたm(_ _)m お忙しい所ご対応いただきありがとうございましたm(_ _)m
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存