トップページ > 過去ログ > 記事閲覧
アクティブ時の挙動について
名前:ますお 日時: 2011/05/21 18:01

いつもお世話になります。 SetWindowSizeChangeEnableFlag(TRUE,FALSE); としてウィンドウサイズを自由に変更できるようにしたときの挙動がおかしいです。 ウィンドウサイズを適当な大きさに変更した後、非アクティブからアクティブにすると、本来描画したい内容が違う大きさで一瞬だけ描画されてしまいます。 以下にソースを添付しておきます。 これを回避する方法がありましたら、ご教授のほどお願いします。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){ SetGraphMode(640,480,16); //最大解像度の設定 SetWindowSize(400,300); //初期ウィンドウサイズを設定 ChangeWindowMode(TRUE); //ウィンドウモードに SetWindowSizeChangeEnableFlag(TRUE,FALSE); //ウインドウのサイズをいつでも変更できるように SetDrawScreen( DX_SCREEN_BACK ); // 描画先を裏画面にセット if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } DrawBox(100,100,120,200,GetColor(255,0,0),TRUE); ScreenFlip(); WaitKey(); DxLib_End(); // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }

Page: 1 |

Re: アクティブ時の挙動について ( No.1 )
名前:いっち 日時:2011/05/22 12:36

少し試してみましたがそれらしい事象は発生しませんでした。 ご使用のDXライブラリのバージョンはいくつでしょうか?
Re: アクティブ時の挙動について ( No.2 )
名前:ますお 日時:2011/05/23 05:31

返信ありがとうございます。 最新バージョンを使用しております。
Re: アクティブ時の挙動について ( No.3 )
名前:いっち 日時:2011/05/23 21:17

DXライブラリのバージョン3.05で確認したところ、確かにますおさんの仰る事象が発生しました。 ただ、最新のテストバージョンでは発生しないようでした。 以下のスレッドの管理人さんのレスに最新のテストバージョンのリンクがありますのでお試し下さい。 > h t t p : / / hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=2248 ※追記 それはそれとして、ますおさんのテストコードのように DxLib_Init の前に SetWindowSize と SetWindowSizeChangeEnableFlag を行うと、 私の環境では初回のウィンドウサイズを変更する動作がキャンセルされたような動作をするのですが、 ますおさんの環境では発生しないのでしょうか? SetWindowSizeChangeEnableFlag → DxLib_Init → SetWindowSize の順だと問題ありませんでした。
Re: アクティブ時の挙動について ( No.4 )
名前:ますお 日時:2011/05/28 00:59

返信が遅れてしまい申し訳ありません。 テストバージョンのライブラリを入れたところ正常に動作しました!!ありがとうございます。 いっちさんがおっしゃるような、そのような動作は発生しませんでした。テストバージョンを入れた後でも何も問題ありませんでした。どうしてなんでしょうね・・・。
Re: アクティブ時の挙動について ( No.5 )
名前:いっち 日時:2011/05/28 11:47

> いっちさんがおっしゃるような、そのような動作は発生しませんでした。 あれ?私だけ? 事象は レス(No.3) の追記にあるとおりです。 再現コードはますおさんが貼り付けたコードそのままです。 環境は XP SP3 で デバッガ上でも非デバッガ上でも発生します。 何かしら情報をお持ちの方がいらっしゃいましたらお知らせ下さい。お願いします。
Re: アクティブ時の挙動について ( No.6 )
名前:管理人 日時:2011/05/29 14:53

私も改めて挙動を確認してみたのですが、私の環境でもますおさんのコードで正常に動作しました ただ、SetWindowSizeChangeEnableFlag の第二引数を TRUE にした状態で SetWindowSize が使われることや、 SetWindowSizeChangeEnableFlag を使わずに SetWindowSize が使われることが前提としていなくて 結構挙動が怪しかったのでその辺りを整理してみました もしよろしければこちらのバージョンをお試しになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCCTest.exe // Gnu C++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
Re: アクティブ時の挙動について ( No.7 )
名前:いっち 日時:2011/05/29 18:06

修正お疲れ様です。 修正版では私の環境でも (No.5) の事象は発生しなくなりました。 その他にもある程度動作確認を行ってみましたが、私としては特に問題と感じる部分はありませんでした。 ただ、雑談掲示板の[2959]に書いたことですが、 SetWindowSizeChangeEnableFlag( TRUE, TRUE ); とした状態で、上、または、下のフレームをドラッグして ウィンドウサイズを小さくしていったときに、クライアント領域が無くなってウィンドウバーのみの状態になることに 違和感を覚える方はいらっしゃるかもしれません。 (上と下以外のフレームをドラッグしてウィンドウを小さくしてもある程度以上に小さくはならないので)
Re: アクティブ時の挙動について ( No.8 )
名前:ますお 日時:2011/06/03 22:11

いっち様、管理人様、ありがとうございました。
Re: アクティブ時の挙動について ( No.9 )
名前:管理人 日時:2011/06/04 22:28

> いっちさん テスト最新のバージョンではDXライブラリ側でサイズ変更に対して何の補正もしていないので 最大まで小さくするとウインドウバーだけになってしまうのはOSの仕様です このあたりは、下手にライブラリ独自の処理をすると新しいOSのバージョンでは正常に 動作しない、などの面倒なことになりやすいので、とりあえずは今のままで行こうと思います
Re: アクティブ時の挙動について ( No.10 )
名前:いっち 日時:2011/06/05 15:40

> とりあえずは今のままで行こうと思います 了解しました。解説ありがとうございます。

Page: 1 |