問題タブ [wndproc]
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.
c++ - HWND参照からコールバックまたはWM_CLOSEを閉じます
HtmlHelpA winapiメソッドを呼び出して、アプリの.chmを表示しています。このメソッドはHWNDをすぐに返し、ヘルプウィンドウは別のウィンドウとして表示されます。
ウィンドウと一緒に、このhwndのタイマーを設定しました。私の問題は、タイマーを強制終了するためにこのウィンドウがいつ閉じられるかを知る必要があることです。
私の最初のアプローチはWndProcコールバックを登録しようとしましたが、ウィンドウを作成していないため、hwndへの参照しかありません。
次に、フック(SetWindowsHookEx)を試してみましたが、HOOKPROCはHWNDをパラメーターとしてコールバックに持ち込みません。その上、私はこのhwndのスレッドを知る必要があります。
HWNDが閉じられたとき、またはWndProcにWM_CLOSEメッセージを待機させるときにコールバックを登録する方法はありますか?
.net - TextBox の AutoComplete 機能に関係する WndProc メッセージは何ですか?
この質問はこれに関連しています。オートコンプリート UI が表示されているときに、TextBox コントロールが受け取る Windows メッセージを知りたいです。
c# - ToolStripDropDownButton - Esc キーでドロップダウンの動作を変更する
ToolStripDropDownButton を持つカスタム コントロールがあります。ToolStripDropDownButton には、多数のツールストリップ アイテム (具体的には、チェックボックスであるカスタム ツールストリップ アイテム) があります。ユーザーは必要なチェックボックス項目を選択でき、DropDownClosed イベントを処理して、それらのチェックされた項目を利用します。
目的は、ユーザーがエスケープ キーを押して選択をキャンセルすることです。問題は、Escape キーが押されたときにも DropDownClosed イベントが発生することです。したがって、ユーザーがオプションを選択し、Escape を押して選択をキャンセルしたい場合、DropDownClosed イベントが発生し、それらの設定を「適用」することになります。
ToolStripDropDownButton をホストするコントロールで次のオーバーライドを試してみました。
これらのイベントのいずれかが処理される前にドロップダウンが隠れているように見えるため、あまり成功していません。この動作を修正する最善の方法は何ですか?
windows - PowerPoint クリッカーからの WM メッセージ
クリッカーの前/次ボタン (つまり、これ) が押されたときに PowerPoint のようなアプリケーションに送信される WM メッセージを見つけようとしています。これらが何であるか知っている人はいますか?基本的には、前、次、黒画面、プレゼン開始の4つだそうです。
ありがとう。
delphi - コントロールが完全に初期化されたことを確認する方法は?
コントロールが完全に初期化されているかどうかを確認するにはどうすればよいですか?
次のコードを検討してください(これを行うのは非常に悪い習慣であることはわかっています。例として取り上げてください)
PS私はOutputDebugStringを知っています:-)
ありがとう!
delphi - TMessageからコントロールハンドルを取得する方法
TMessage変数のみを持つコントロールを識別できるコントロールハンドルまたはその他の情報を取得する方法はありますか?質問はDelphiに関連しています。
私がしていることは、1つの関数で複数のコントロールwndprocをフックすることであり、それがどのコントロールメッセージであるかを見つける必要があります。
コード:
「フック」の方法(仮想ツリービューで必要)
これがフックされた関数です。
FEditインデックスも必要とする2番目の関数...
c - win32 WndProc を C++ クラスにラップする方法は?
これは可能ですか?たとえば、次のものがあるとします。
さて、どこかにセクションがあります(おそらくクラスのコンストラクターで、クラスに記載されているaWindow
を割り当てる必要があります。唯一の問題は、それがクラスの一部であるため、エラーが発生します. したがって, これはどのように達成されますか? それは静的に作られていますか? それでも, クラスがそれをラップする場合, それは何らかの形でクラスの一部です. クラスの外で作成すると, それは単に要点を消し去ります. .WNDCLASSEX
WndProc
Window
c - WM_PAINTのフレームレート
WM_PAINTメッセージのフレームレートを1秒あたりのフレーム数で取得するにはどうすればよいですか?ソフトウェアレンダラーを作成しようとしていますが、デバッグにはフレームレートが非常に重要です。
delphi - Delphi 6 TWinControl の子孫の WndProc() は、メインの VCL スレッドから離れて実行されることがあります。
非常にマルチスレッド化された Delphi 6 アプリケーションがあります。TWinControl から派生したコンポーネントを作成しました。私が最初にそれを構築したとき、私は非表示のウィンドウを使用しました.AllocateHwnd()で割り当てられたメッセージを処理するのはWndProcです。最近、コード内の WndProc のクリーンアップを開始し、補助的な WndProc() を削除することにしました。コンポーネントを変更して、代わりに基本クラスの WndProc() メソッドをオーバーライドし、そこからカスタム Windows メッセージ処理を行いました。その WndProc() では、継承されたハンドラーを最初に呼び出してから、カスタム メッセージ (WM_USER オフセット) を処理し、カスタム メッセージの 1 つが見つかって処理された場合は、メッセージの Result フィールドを 1 に設定しました。
重要な注意事項が 1 つあります。現在のスレッド ID が VCL メイン スレッドでない場合に例外をスローするコード行を WndProc() オーバーライドの先頭に追加しました。WndProc() がメイン VCL スレッドのコンテキストでのみ実行されるようにしたかったのです。
これを行ってプログラムを実行した後、本当に奇妙に思えることに遭遇しました。プログラムを通常どおり実行し、さまざまなタスクをエラーなしで実行しました。次に、TWinControl の子孫と同じページにある TMemo コントロールに移動したとき。その TMemo コントロール内をクリックすると、WndProc() オーバーライドのメイン スレッド チェックがトリガーされます。ブレークポイントが設定されていて、コール スタックに移動したとき、WndProc() オーバーライドの上には何もありませんでした。
私が知る限り、再確認したところ、WndProc() オーバーライドを明示的に呼び出していません。それは私が決してすることではありません。しかし、私の TWinControl コンポーネントが他のすべてのコンポーネントと同様にメインの VCL スレッドで作成されることを考えると、バックグラウンド スレッドのコンテキストで WndProc() オーバーライドがどのように実行されるかはわかりません。マウスクリックが発生します。すべての子ウィンドウが最上位ウィンドウ WndProc() からぶら下がっているため、WndProc() が TMemo コントロールにどのように関連付けられているかを理解しています。少なくともそれは私の理解です。しかし、すべてのコンポーネント ウィンドウがメイン VCL スレッドで作成されているため、すべてのメッセージ キューもそのコンテキストで実行されているはずですよね?
では、WndProc() をバックグラウンド スレッドのコンテキストで実行するために、どのような状況を作り出すことができるでしょうか?
vb.net - WndProc メッセージ 24 とは
現在、既存の VB.NET プロジェクトを実行しようとしています。WndProc メッセージで null ポインター例外がスローされますが、スタック トレースでは実際には何も表示されません。スタートアップ フォームのデザイナー コードにブレーク ポイントを配置できますが、ステップ実行すると、WndProc 関数を介して NULL ポインター例外がトリガーされます。上位のメソッドは Windows のメソッドのようです。私が持っている唯一の手がかりは、Msg = 24 および WParam = 1 の Message パラメーターです。HWnd = 5178884 は役に立たないと思います。
誰かがアイデアを持っている場合に備えて、スタック トレースを貼り付けています。 注: ソース コードが独自のものであるため、MyNamespace と MyBaseForm と MyFormA をマスクしました。これは、.NET Framework 3.5 上の Visual Studio 2008 で実行されます。