VC++6.0 WinXP MFC 環境です。CMainFrame内で少々時間かかる処理を行い、
その終了時にキー入力とマウス入力をクリアしたく以下の処理を入れました。
********************************
MSG msg;
while(::PeekMessage(&msg,NULL,WM_MOUSEFIRST,WM_MOUSELAST,PM_REMOVE))
;
while(::PeekMessage(&msg,NULL,WM_KEYFIRST,WM_KEYLAST,PM_REMOVE))
;
*******************************
でプログラムを実行したところXP搭載機では正常に動作するのに、WinMe搭載機では
PeekMessageから帰ってこない状態が発生するのです。しかも動作が不安定で、帰ってく
ることもあるのです。
ちなみに以下のコードでもループから抜けてこないことが発生します。
for(;;){
if(PeekMessage(&msg,NULL,WM_MOUSEFIRST,WM_MOUSELAST,PM_NOREMOVE))
PeekMessage(&msg,NULL,WM_MOUSEFIRST,WM_MOUSELAST,PM_REMOVE);
else
break;
}
どなたかこの症状をご存知方はいらっしゃいませんでしょうか?
WinMeでそのような状況に陥るようです。
PeekMessage自体の欠陥と聞いたことがあります。
MSDNで検索してみたのですがそれらしい文書は見当たりませんでしたが、
OSのアップデートでバグフィックスされているのでしょうか?
もしバグフィックスされていないのであればキーメッセージやマウスメッセージをクリ
アしているようなソフトは皆引っかかってしまうのでは無いでしょうか?
GetMessageで捨てるといいのでは?
MSDNにのっていないのは不思議ですね。
ゲームのアルゴリズム(だったかな)とかいう本に載っていました。
正しくはMe以前