CTRL+Sユーザーがモードレス ダイアログ内を押したときに、何らかのアクションを実行したいと考えています。アクセラレータはこれに最適ですが、スレッドのメッセージ ループ (プラグインと考えてください) を制御できないため、TranslateAccelerator.
メイン アプリケーションは への呼び出しの間に多くの処理を行うため、ネストされたメッセージ ループはオプションではありませんPeekMessage。
- アクセラレータを処理するために既存のメッセージ ループを「強制」する方法はありますか?
- アクセラレーター以外にキャッチする方法はあります
CTRL+Sか?
またはWH_GETMESSAGEから戻る前に呼び出されるWindow フック on を使用することを考えました。しかし、 を正常に呼び出した後に何が起こるかはわかりません。処理したことをアプリケーションに知らせることはできません。
アプリで への呼び出しを実装する必要がありますが、デバッガーで一目でわかるわけではありません。GetMessagePeekMessageTranslateAcelleratorWH_MSGFILTERCallMsgFilter
私の最後のアイデアは、私が避けようとしているコントロールをサブクラス化することでした。これには、keypress イベントを親ウィンドウに通知するメカニズムが必要になりますが、これは優れた設計ではないと思います。また、コントロールをさらに追加すると、すべてのコントロールをサブクラス化する必要があります。
ヒントをありがとう。