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をお使いの場合は『リビルド』をして下さい)
|