トップページ > 過去ログ > 記事閲覧
ウィンドウが非アクティブ時に
名前:temu 日時: 2006/11/21 11:04

質問です。 DXライブラリが管理するウィンドウが非アクティブになった時、デフォルトでゲームの進行が待機する仕様になっていますが、プログラムのどの部分で止まっているのでしょうか。 やはりProcessMessage関数などの中で待機の為のループを回しているのでしょうか? それともループの為の別スレッドを生成してメインスレッドをサスペンドしていたりするのでしょうか?(流石にこれは無いかと思いますが) それともう1つですが。 Dxlibのソースを眺めているとProcessMessage関数の中で「// ウィンドウモードが変更されていたら〜」のような(うろ覚えです)記述を見かけたのですが、これは「ChangeWindowMode関数での変更が反映されるのはProcessMessage関数が呼ばれた時」ということで良いのでしょうか。 間違っていたらすみません。

Page: 1 |

Re: ウィンドウが非アクティブ時に ( No.1 )
名前:管理人 日時:2006/11/22 12:10

 temuさんどうも、DXライブラリの管理人です。 > DXライブラリが管理するウィンドウが非アクティブになった時、 > デフォルトでゲームの進行が待機する仕様になっていますが、 > プログラムのどの部分で止まっているのでしょうか。 > やはりProcessMessage関数などの中で待機の為のループを > 回しているのでしょうか? > それともループの為の別スレッドを生成してメインスレッドを > サスペンドしていたりするのでしょうか?(流石にこれは無いかと思いますが)  ProcessMessage 関数の中でアクティブかどうかを調べて、非アクティブの 場合はループするようになっていますが、それ以外にも幾つかの関数の中に アクティブかどうかを調べて非アクティブの場合はループをする様なコードが 書いてあります。(DxActiveWait という関数が呼ばれている箇所がそれです、 主に描画系の関数で使用しています)  因みに、SetAlwaysRunFlag という関数で止まらない様にすることも出来ます。 SetAlwaysRunFlag http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html#R15N22 > それともう1つですが。 > Dxlibのソースを眺めているとProcessMessage関数の中で > 「// ウィンドウモードが変更されていたら〜」のような > (うろ覚えです)記述を見かけたのですが、これは > 「ChangeWindowMode関数での変更が反映されるのは > ProcessMessage関数が呼ばれた時」ということで良いのでしょうか。  ProcessMessage関数に書かれているのは最大化ボタンやALT+ENTERが 押されてウインドウモード←→フルスクリーンモードの切り替えが 発生した場合用のコードで、ウインドウモードの変更自体は ChangeWindowMode 関数内で完結しています。
Re: ウィンドウが非アクティブ時 ( No.2 )
名前:temu 日時:2006/11/24 12:48

回答ありがとうございます なるほど、理解出来ました(^^;) ところでメニュー操作関連の部分でバグと思わしき部分を発見したので報告します。 DeleteMenuItemAll()関数が常にエラー(-1)を返します。 DxMakeプロジェクトの中を覗いてみたらST_DeleteMenuItemAll()関数の中で NewMenu = CreateMenu(); if ( NewMenu != NULL ) return -1; という部分がありました。 これでは「新しいメニューの生成に成功した時に-1 を返す」 ということになりますよね? おそらく(誤)!=(正)== でしょうか。
Re: ウィンドウが非アクティブ時に ( No.3 )
名前:管理人 日時:2006/11/24 21:40

 temuさんどうも、DXライブラリの管理人です。  DeleteMenuItemAll 関数の if( NewMenu != NULL ) return -1;  は、お察しの通りバグです。orz (正しくは if( NewMenu == NULL ) return -1; となります)  修正したバージョンをアップしましたので、もしご必要 でしたらダウンロードしてください。m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe //ソース (中身を既存のファイルに上書きして、BCCをお使いの場合は『再構築』、 VCをお使いの場合は『リビルド』をして下さい)

Page: 1 |