問題タブ [peekmessage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows - メッセージを処理しない PeekMessage のような関数はありますか?
無邪気に電話をかけようとしている
Windows Vista 64 は、PeekMessage 呼び出しでメッセージを処理しています。その結果、ペイント呼び出しやその他のあらゆる種類のコードで再入可能になります。
アプリケーションでは描画に数秒かかる場合があるため、PeekMessage 呼び出しを追加して、ユーザーがキーを押したかどうかを確認し、その描画を中断して次の描画を開始できるようにしました。Windows がメッセージの処理を開始できることに、私たちはほとんど気づきませんでした。ペイントの実際の作業を別のスレッドに入れるのは、大きなリファクタリングになります...特定のキーが押されたかどうか、またはマウス ホイールが回転したり、マウス ボタンがクリックされたりして、レンダリングが中断されたかどうかを確認しようとしています。
再入を防ぐために特別にコードを追加してから、描画メッセージをキューに再注入するなどを試みました。すべて非常に面倒で、うまく機能しない場合があります。
PeekMessage 呼び出しに追加できるフラグはありますか? MSDN のドキュメントには新しいものは何もありませんでした。PeekMessage
メッセージを処理しない が本当に必要です。ヘルプ!
delphi - Delphi 2006 での postthreadmessage と peekmessage の問題
マルチチャイルド アプリケーションを作成しました。アプリケーション ウィンドウ (W[n]: TMyWindows) はすべて同じで、すべてにプライベート オブジェクト クラス インスタンスが関連付けられています (E: TMyObject)。子ウィンドウは、このオブジェクトを通じていくつかのメッセージを生成します。メッセージの内容に応じてこれらのメッセージを処理する 2 つのスレッドをメイン アプリケーションに作成しました。たとえば、次の非同期呼び出しがあります。
TMyObject.Service(servicetype) は
さて、各スレッドの実行メソッドには、次のようなものがあります。
2番目のスレッドがメッセージを受信しないことを除いて、すべてうまくいきます。理由はわかりますか?
c++ - PeekMessage()マウスカーソルのリセット
私は現在、WindowsXP用のC++アプリケーションのようなゲーム内でマウスカーソルを変更することをいじっています。
使用しているカーソルを変更し、SetCursor()
機能している目的のカーソルを渡します。ただし、と呼ばれるwhileループの間PeekMessage()
、カーソルはデフォルトの矢印にリセットされ続けます。
これは問題のあるループです:
デバッグ中に、呼び出し中にカーソルが変更され、PeekMessage()
その後msg.message == 0x200になることがわかりました。これにより、メッセージは次のいずれかになります。
なぜこれが起こっているのかについての情報を見つけることができず、Windowsメッセージの経験もありません。
ありがとう。
編集:
ここによると、システムはマウスが移動するたびにクラスカーソルを再描画し、効果的にデフォルトカーソルに戻します。これを念頭に置いて、これをウィンドウメッセージコールバック関数に追加しました。
問題が解決しました。
c++ - コンパイラが構造体を見つけられません。何を含める必要がありますか
更新: Windsows.hi を含める必要があると思いましたが、これを確認しましたが、含めると、次のようなメッセージがたくさん表示されます...
これを修正する方法がわかりません、eik!
PeekMessage を呼び出そうとしていますが、コンパイルしようとすると次のエラーが発生します。
'MSG' : 宣言されていない識別子 'HWND' : 宣言されていない識別子 'PM_REMOVE' : 宣言されていない識別子
私のコードは以下の通りです...
これらの構造が何であるかは知っていますが、コンパイラにそれらを認識させることができます。参照がありませんか、それとも VC++ エイリアスがありますか?
乾杯。
delphi - getmessage の前に peekmessage を実行するのはなぜですか?
メッセージキューを作成するために Getmessage() の前に peekMessage ステートメントが必要なのはなぜですか?
c++ - PeekMessageがメッセージを取得していませんか?
のサイズ変更に使用するカスタムメッセージタイプを作成しましWindow
たWM_NEED_RESIZE
。.hファイルで定義し、.cppファイルで初期化しました。WindowProc
メッセージを受け入れる機能も登録しました。これらのアイテムのコードは次のとおりです。
別の機能ではPeekMessage(..)
、すべてのメッセージを収集するために実行しています。メッセージポンプのスニペットは次のとおりです。
私の問題は、ウィンドウが最初に開いたときにメッセージがメッセージキューで一度WM_NEED_RESIZE
だけ検出され、その後はメッセージキューでメッセージが検出されないことです。なぜこれが起こっているのか本当にわかりません。ただし、メソッドによって受信されています(これは実際には役に立ちません)。私はあなたたちが提供できるどんな助けでもありがたいです。PeekMessage(..)
WindowProc(..)
ありがとう
ジャレット
filter - DirectShowフィルターFillBuffer()呼び出しからPeekMessage / GetMessageを呼び出すのは安全ですか?
DSPACKコンポーネントライブラリを使用してDelphi6で記述されたDirectShowフィルターがあります。これは、私も書いた外部の協力プロセスからソースフレームを受け取るプッシュソースビデオフィルターです。
FiltersのFillBuffer()呼び出しを呼び出すワーカースレッドが作成されて実行されると、グラフが起動したときに、そのワーカースレッドから最初に行うことは、AllocateHWND()を使用して非表示のウィンドウを作成し、外部を含むWM_COPYDATAメッセージを処理することです。生成されたフレーム。スレッドが破棄される直前に、非表示のウィンドウを破棄します。つまり、非表示のウィンドウは、FillBuffer()を呼び出すワーカースレッドの実行コンテキストで作成および破棄されます。私の意図は、FillBuffer()がWM_COPYDATAまたはWM_QUITメッセージを待機するときにブロックすることです。外部の協力プロセスは、WM_COPYDATAメッセージと非表示のウィンドウのWndProcc()へのハンドルを使用して、フレームをフィルターに送信します。ピンのInactive()メソッドのオーバーライドにWM_QUITメッセージを投稿します(そのヒント@RomanRに感謝します)。
私の質問は、このシナリオでは、FillBuffer()呼び出しからPeekMessage()またはGetMessage()を呼び出しても安全ですか?または、DirectShowグラフの実行のコンテキストでこれが発生することから発生する可能性のある潜在的な落とし穴はありますか?また、ここでの私の全体的なアプローチに、考慮する必要のある欠陥がありますか?
winapi - PeekMessage が常に TRUE を返すのはなぜですか?
「レンダリング」機能が実行されていません
delphi - Delphi PeekMessage アクセス違反 Delphi 2009 Windows API
PeekMessage から定期的にアクセス違反が発生します。これは私の PeekMessage への呼び出しではなく、Application.Run からのものです。MadExcept からのスタック トレースは、Application.Run が PeekMessage を呼び出し、それが kiUserCallBackDispatcher を呼び出していることを示しています。
デルファイ 2009.
スタック トレースは次のとおりです。
これは、PeekMessage() がメッセージを処理するためにウィンドウ プロシージャの 1 つを呼び出しており、そのウィンドウ プロシージャが見つからないことを意味すると思います。最初は、メッセージを覗いているだけなので、Peekmessage がウィンドウ プロシージャを呼び出す理由がわかりませんでしたが、ここや他の場所をさらに読むと、次のことがわかります。
- PeekMessage() は、他のスレッドから送信された SendMessages() を処理します
- PeekMessage() は Paint メッセージを処理する場合があります
- WM_ERASEBKGND などの他のメッセージに対して、PeekMessage がウィンドウ プロシージャを呼び出していることを報告した人もいます。
MSDN から:
SendMessage
この呼び出し中、システムは保留中のキューに入れられていないメッセージ、つまり、、、、または関数を使用して呼び出しスレッドが所有するウィンドウに送信されたメッセージを配信SendMessageCallback
しSendMessageTimeout
ますSendNotifyMessage
。
SendMessage() 呼び出しがすぐに処理されると思っていたので、よくわかりません。SendMessage が別のスレッドからのものである場合にのみ、これが適用されると他の誰かが考えているようです。
スタンドアロン プロジェクトでこれを複製することはできません。エラーから、PeekMessage が存在しないウィンドウ プロシージャを呼び出しているように見えます。それを無視します。フォームのデストラクタからそれ自体やその他のあらゆる種類のものにメッセージを投稿しようとしましたが、失敗することはありません。
他に確認すべきことについて何か提案はありますか?前もって感謝します。
リック