問題タブ [message-loop]
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++ - スレッド化すると win32 メッセージ ループが機能しなくなるのはなぜですか?
メッセージを同時に処理し、while ループを実行する必要がある WIN32 (C++) プログラムを作成しようとしています。そのためには、スレッドを使用したいと考えています。
メッセージ ループを別のプロシージャ (関数 WinMain から呼び出される) に移動すると、すべてが正常に機能していました。ただし、メイン プロセスから単純に呼び出すのではなく、以下のコードを使用してそのプロシージャをスレッド化すると、ウィンドウが応答しなくなります。
なぜそれが起こるのか知っていますか?
WinMain 内で、メイン ウィンドウを作成した後、メッセージ ループと戻り値を削除し、次のコードを追加しました。
return_val
メッセージ ループが終了したときに WinMain が返す値を受け取るために使用するグローバル変数です。
また、関数 message_loop は次のとおりです。
c++ - MFC CListView ユーザーが文字を入力したときに検索と自動選択を防ぐ方法は?
TL;DR
C++ MFC CListView では、CListView にキーボード フォーカスがあるときにユーザーが入力した文字に基づいて自動選択を防ぐ方法は?
状況:
CListView を使用して英数字文字列を含む行のコレクションを表示する MFC アプリケーション。リストを選択してキーボード フォーカスを設定し、文字を入力すると、リストの選択は、最初の列の値がその文字で始まる最初の項目にジャンプします。
つまり、たとえば「r」と入力すると、リスト リストの選択は文字「r」で始まる最初の項目にジャンプします。次に、たとえば「b」と入力すると、リストの選択は文字 b で始まる最初の項目にジャンプします。等々。
VS2019 New Project ウィザードを使用して新しいアプリケーションを作成すると、この動作は CListView で自動的に行われます。
質問1:
上下矢印キーのナビゲーションを妨げずに、この自動選択が起こらないようにするにはどうすればよいですか?
これに頭を悩ませている過程で、クラス WC_LISTVIEW を持つまっすぐな WIN32 ウィンドウもこのように動作することがわかったので、これをオンまたはオフにするスタイルが必要だと思いますか?
スタイルの場合は、OnInitialUpdate() の ModifyStyle() 呼び出しで変更できます。または、HWND を使用してコントロールにメッセージを送信することもできますか?
では... 質問 2:
CListView のメッセージ処理ループで雑草に巻き込まれることなく、これをオフにすることはできますか?
コメント
CListView が実行できる高度な複数文字部分文字列一致検索を探しているわけではありません。
文字または数字を入力したときに CListView が選択を変更するのを停止し、上/下矢印、ページアップ/ページダウン、およびホーム/エンドキーに応答して選択を変更する通常の動作を継続する必要があります。 . そのため、必要に応じて検索をオフにしてください。
コード
もっとコードを投稿することもできますが、それは VS2019 New Project -> C++ -> MFC -> Explorer Style ウィザードの出力になります。
私が行った唯一の関連する変更は、CListView 派生クラスの名前を MyCFileListView に変更し、リストを作成することでした。
リストに入力します。
FileInfo は単なるコンテナーです (構造体である必要があります):
そして program_state.file_list は次のように宣言されています。
私はCListViews、WIN32 ListViews AKA WC_LISTVIEW、それらのスタイルと拡張スタイルに関するMSのページを調べましたが、この動作について何も見つかりません:
https://docs.microsoft.com/en-us/cpp/mfc/reference/clistview-class?view=msvc-160
https://docs.microsoft.com/en-us/windows/win32/controls/list-view-controls-overview
https://docs.microsoft.com/en-us/windows/win32/controls/extended-list-view-styles
https://docs.microsoft.com/en-us/windows/win32/msi/listview-control
…その他、数え切れないほどあります。
この動作が非常に優れているため、誰も無効にしたくないかのようです:-)
windows - IInputObjectSite と IInputObject の間の適切な制御フローは何ですか?
上記のインターフェイス間の完全で適切な制御フローを知っている人はいますか?
明らかに、入力オブジェクトがフォーカスを取得するとIInputObjectSite::OnFocusChangeIS
、サイトに知らせるために呼び出します。そして、メッセージが届くと、サイトはIInputObject::TranslateAcceleratorIO
、入力オブジェクトがメッセージをディスパッチする前に処理できるように呼び出します。
しかし、さらにいくつかのメソッドがあり、いつ呼び出されるべきかわかりません:IInputObject::HasFocusIO
とIInputObject::UIActivateIO
. サイトがそれらを呼び出すタイミングを知っている人はいますか?