2009-12-01 18 views
5

ユーザーがウィンドウを移動している間にアプリケーションがウィンドウの内容を変更しないようにするには、メッセージ/WM_EXITSIZEMOVEをキャプチャしてメッセージ間でアプリケーションを一時停止します。しかし、時々、私はWM_ENTERSIZEMOVEを受け取るが、WM_EXITSIZEMOVEは全く受け取らない。一つREPROは、次のとおりです。WM_ENTERSIZEMOVE/WM_EXITSIZEMOVE - メニューを使用しているときに必ずしもペアになるとは限りません

  • はサイズ
  • 上のクリックでウィンドウがどのWM_EXITSIZEMOVEを受けたことがない窓

お知らせへ]をクリックし、むしろ、ウィンドウのサイズを変更していない

  • ウィンドウ]メニューを開きます。

    これがどのように動作するかを確認するときに、Microsoft DirectXのサンプルもチェックしたところ、同じ問題が発生しています。上記の手順を実行すると、サンプルアプリケーションはフリーズしたように見えます(2009年3月SDKのBasicHLSLサンプルで試してみました)。

    アプリケーションはこれにどのように応答すると予想されますか? "モーダルループの移動またはサイジング"を終了する必要があるその他の条件はありますか?

  • 答えて

    0

    一時的な回避策として、私は今WM_ACTIVATEメッセージを受信するたびにアプリケーションを一時停止します。これは、この特定のケースを解決したようです(アプリケーションを再びアクティブにすることによってアプリケーションを回復できます)。何も破壊していないようです。

    しかし、そのような解決策は私には匂いがする。限られたテストだけに頼るのではなく、どのように動作すべきかを理解したいと思います。

    -1

    サイジング操作が完了するたびにWM_SIZEメッセージが表示されます。 サイジング中は、WM_SIZINGメッセージが表示されます。

    あなたのアプリのポーズ解除にも使用できますか?

    +0

    問題は、サイジング操作が全くない場合の再現手順です。サイジングモーダルループに入りますが、サイジングは実際には開始されません。 – Suma

    4

    私はこれがかなり遅いことを知っていますが、それでもあなたを助けるかもしれません。そして、私のように検索でそれを見つける他の人を助ける可能性があります。

    あなたが言及した状況では、サイズ変更が「キャンセル」されたときにWM_CAPTURECHANGEDメッセージが送信されたようです。広範なテストの後、これは常にWM_EXITSIZEMOVEの直前に送信されるか、またはWM_EXITSIZEMOVEとWM_EXITSIZEMOVEとの間の他のステージでは送信されないように見えます。

    WM_CAPTURECHANGEDメッセージはさまざまな時点でも送信されるため、WM_ENTERSIZEMOVEメッセージが送信されたが、次のWM_EXITSIZEMOVEには応答しないでください。

    関連する問題