トップページ > 記事閲覧
バグ?: Init後のSetWindowSizeが効かない場合がある
名前:adat4ra 日時: 2026/08/23 06:43

DxLib_Init前にSetWindowSizeを呼んでいると、Init後のSetGraphMode+SetWindowSizeでウィンドウが拡大されない いつもDXライブラリを利用させていただいています。 DxLib_Init の前に SetWindowSize を呼んでいると、Init 後に SetGraphMode で論理画面を 拡大してから SetWindowSize を呼んでも、ウィンドウの大きさが変わらない現象を見つけましたので 報告いたします。描画先(GetDrawScreenSize)は新しい大きさになるため、描画先とウィンドウの クライアント領域が食い違った状態になります。 ボーダレスウィンドウ(論理画面をデスクトップ解像度にして枠なしウィンドウを画面いっぱいに 広げる方式)へゲームの実行中に切り替えられるようにしようとして遭遇しました。 ■ 確認環境 - DXライブラリ Ver 3.24f (VC++用) - Windows 11 Home (Build 26200) / Direct3D 11 - デスクトップ解像度 1920x1080、拡大率100% - Visual Studio 2026 / x64 / /MT ■ 再現コード ```cpp #include "DxLib.h" int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { ChangeWindowMode(TRUE); SetGraphMode(1280, 960, 32); SetWindowSize(1280, 960); // …(1) この行があると症状が出ます if (DxLib_Init() < 0) return -1; SetDrawScreen(DX_SCREEN_BACK); // デスクトップ解像度へ論理画面とウィンドウを拡大する int desk_w = 0, desk_h = 0, bit = 0; GetDefaultState(&desk_w, &desk_h, &bit); SetGraphMode(desk_w, desk_h, 32); SetWindowSize(desk_w, desk_h); while (!ProcessMessage() && !ClearDrawScreen()) { int draw_w = 0, draw_h = 0; GetDrawScreenSize(&draw_w, &draw_h); int win_w = 0, win_h = 0; GetWindowSize(&win_w, &win_h); DrawFormatString(10, 10, GetColor(255, 255, 255), L"GetDrawScreenSize : %d x %d", draw_w, draw_h); DrawFormatString(10, 40, GetColor(255, 255, 255), L"GetWindowSize : %d x %d", win_w, win_h); ScreenFlip(); if (CheckHitKey(KEY_INPUT_ESCAPE) == 1) break; } DxLib_End(); return 0; } ``` ■ 結果 (1920x1080のモニタの場合) - 上のコードのまま実行: GetDrawScreenSize は 1920x1080 になりますが、GetWindowSize と実際のウィンドウの クライアント領域は 1280x960 のままです - (1) の行を削除して実行: ウィンドウも 1920x1080 になり、期待どおりの動作になります (1) は Init 前の論理画面(1280x960)と同じサイズの指定なので、ウィンドウの大きさとしては 何も変えていないはずですが、この行の有無で Init 後の挙動が変わります。 ■ 補足 (いずれも実測で確認しています) - Init 後の拡大を SetWindowSize の代わりに SetWindowSizeExtendRate(1.0) にしても同様です - SetChangeScreenModeGraphicsSystemResetFlag の設定有無には関係なく再現します - ウィンドウの表示/非表示(SetWindowVisibleFlag)や SetWindowStyleMode の有無にも関係ありません - SetWindowSize について、DxLib_Init 前の使用が想定外の使い方でしたら、その旨ご指摘いただければ幸いです お手すきの際にご確認いただければ幸いです。
メンテ

Page: 1 |

Re: バグ?: Init後のSetWindowSizeが効かない場合がある ( No.1 )
名前:管理人 日時:2026/08/24 02:40

ご報告ありがとうございます DxLib_Init の呼び出し前に SetWindowSize が呼ばれた場合は特別な処理を行っているのですが、 その影響が DxLib_Init の呼び出し後の SetWindowSize にも残ってしまっていました DxLib_Init 呼び出し後に SetWindowSize が呼ばれた場合は DxLib_Init 呼び出し前に呼ばれた 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: バグ?: Init後のSetWindowSizeが効かない場合がある ( No.2 )
名前:adat4ra 日時:2026/08/24 11:10

迅速にご対応いただきありがとうございます。 テスト版(Ver 3.25b)にて、報告した最小コード・実際のゲームの両方で症状が解消されていることを確認しました。 1点、テスト版で挙動が変わった箇所がありましたのでご報告します。 3.24f では SetChangeScreenModeGraphicsSystemResetFlag( FALSE ) + Direct3D 11 の環境で SetGraphMode や ChangeWindowMode を実行してもグラフィックの復帰処理は走っていませんでしたが、テスト版では画面モード変更のたびに「グラフィックの復帰」が走るようになり、切り替えにかかる時間が大きく伸びました。当方の環境(Core i5-12400F + RTX 4070)での実測です。 画像を300枚ほど読み込んだ状態で、復帰1回あたり約2.5秒かかります(Log.txt 上で「画面モード変更処理を開始します」から「グラフィックの復帰が完了しました」までの間に約2.5秒の空白があります) ウィンドウ⇔排他フルスクリーンの切り替えでは、SetGraphMode と ChangeWindowMode のそれぞれで復帰が走るため合計2回となり、5.5秒ほどかかります 3.24f では同じ切り替えが1.2秒ほどでした ウィンドウサイズの動作自体は正しくなっているため急ぎではありませんが、リセット無効フラグ + Direct3D 11 のときに以前のように復帰を省略できる余地がありましたら、ご検討いただけると幸いです。
メンテ
Re: バグ?: Init後のSetWindowSizeが効かない場合がある ( No.3 )
名前:管理人 日時:2026/08/25 02:01

すみません、以前別件のバグを修正した際に SetChangeScreenModeGraphicsSystemResetFlag( FALSE ) を 実行している状態でもグラフィックの復帰処理を実行してしまうバグを発生させてしまっていました SetChangeScreenModeGraphicsSystemResetFlag( FALSE ) を実行している状態では SetGraphMode 等を 使用してもグラフィックの復帰処理を行わないように修正したバージョンをアップしましたので、 何度も申し訳ありませんが、よろしければお試しください 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: バグ?: Init後のSetWindowSizeが効かない場合がある ( No.4 )
名前:adat4ra (解決済み) 日時:2026/08/25 02:23

更新版にて - 報告したウィンドウサイズの症状が解消されていること - 画面モード変更時にグラフィックの復帰が走らなくなったこと の両方を確認できました。 ウィンドウ・ボーダレスウィンドウ・排他フルスクリーンのどの組み合わせの切り替えも 正常に動作しています。 迅速なご対応ありがとうございました。本件これにてクローズさせていただきます。
メンテ

Page: 1 |

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

   クッキー保存