Re: 終了したい時って ( No.1 ) |
- 名前:通 日時:2008/02/17 02:34
>もっと的確な方法があれば
的確な方法以前にDXライブラリとしての
終了処理的には誤りです。
PostQuitMessage(0)やWM_CLOSEはWindowsの
メッセージプロシージャに対してクローズを
通知するものであってDXライブラリの動作とは
直接的に関係なく、これらはすべてライブラリ
内部で処理されています。
終了するためには DxLib_End()を呼び出し
WinMainを終了させることです。
|
Re: 終了したい時って ( No.2 ) |
- 名前:tok 日時:2008/02/17 07:24
ありがとうございます。
以下はWinMain内の記述です。
// メッセージループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
〜すべての処理
}
〜ヒープなど開放処理
DxLib_End() ;
return 0;
このようになっている時も、やはりWM_CLOSEを投げるのは誤りなのでしょうか。
ESCAPE押下時と同様に、ループを抜けて終了するのがエレガント(恥ずッw)な方法かと思いました。
そこでProcessMessageに非0を与えることで、終了しようと思いました。
内部でメッセージキューを読んでると予想してPostQuitMessageでWM_QUITを投げたのですが、
ループを抜けなかったので、
WM_CLOSEなのかと思いました。
もちろん使ってるのはSendMessageではなく、PostMessageです。
・・・と、今PostMessageでWM_QUITを投げたら終了できました。(笑)
PostMessage(GetMainWindowHandle(), WM_QUIT, 0, 0);
これはwparamとかlparamを読んでいるのでしょうか>内部で
0じゃないとProcessMessageは非0を返してくれないとか。。
この辺はどうなのでしょう。
|
Re: 終了したい時って ( No.3 ) |
- 名前:管理人 日時:2008/02/17 15:41
> このようになっている時も、やはりWM_CLOSEを投げるのは誤りなのでしょうか。
はい、WM_CLOSE や WM_QUIT は DxLib_End 関数内で処理していますので
DXライブラリ以外のプログラムで投げる必要はありません。
中身の処理は公開している関数等と違って仕様が変更される可能性がありますので、
メッセージループを抜ける手段として WM_QUIT メッセージを投げるのはお勧めできません。
> これはwparamとかlparamを読んでいるのでしょうか>内部で
DXライブラリでは WM_QUIT メッセージの lparam や wparam は特に見ていません。
この辺りのメッセージを直に投げられるのは想定していないので、原因が何なのかは
わかりません。
|
Re: 終了したい時って ( No.4 ) |
- 名前:tok 日時:2008/02/17 15:56
ご返信ありがとうございます。
WM_CLOSEなどを直接投げるのは誤りということで承知しました。
ただ、できればProcessMessage()に非0を与えて抜ける、
というようなフローが組みたいです。
難しいでしょうか。
|
Re: 終了したい時って ( No.5 ) |
- 名前:管理人 日時:2008/03/03 00:33
DxLib_End を呼んでいただければ ProcessMessage も -1 を返すようになります。
|
Re: 終了したい時って ( No.6 ) |
- 名前:tok 日時:2008/03/03 17:03
なるほど、よくわかりました。
お忙しい所ご回答ありがとうございました。
|