2

リスト ビューで特定の項目を選択してフォーカスするプログラムを作成しようとしています。

ListView_SetSelectionMark を呼び出しても (または LVM_SETSELECTIONMARK を送信しても)、リスト ビュー項目にフォーカスを設定できないのはなぜですか? ListView_SetSelectionMark を呼び出した後、フォーカスは新しい場所に移動するのではなく、元の場所に残ります。矢印キーを押すと、指定した項目ではなく、以前にフォーカスされていた項目から移動します。

アイテムを選択してフォーカスするコードのスニペットを次に示します。

ListView_SetItemState(this->m_hwndChild, index, LVNI_SELECTED, LVNI_SELECTED);
ListView_SetSelectionMark(this->m_hwndChild, index);
ListView_EnsureVisible(this->m_hwndChild, index, false);
SetFocus(this->m_hwndChild);

ここに完全な要点があります。Ctrl-R を押すたびに、リスト ビューのランダムな項目が選択されます。

4

1 に答える 1

2

SelectionMark はフォーカスとは関係ありません。複数選択を開始するアイテムを示すだけです。

LVIS_FOCUSED代わりにアイテムの状態を使用する必要があります。

ListView_SetItemState(this->m_hwndChild, index, LVNI_SELECTED | LVNI_FOCUSED, LVNI_SELECTED | LVNI_FOCUSED);
ListView_EnsureVisible(this->m_hwndChild, index, false);
SetFocus(this->m_hwndChild);
于 2015-05-13T01:11:00.503 に答える