[ad_1]
<pre> void CDlgCorrection::RowSelected() { m_bInizio = false; for (int i = 0; i < m_astrPathFustelle.GetSize(); i++) { m_lista.SetItemState(i, 0, LVIS_SELECTED); } m_lista.SetItemState(m_nRow, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); m_nRowSelected = m_nRow; m_lista.SetFocus(); m_lista.SetSelectionMark(m_nRow); }
このコードを使用して CListCtrl の行を選択しましたが、CListCtrl をクリックすると行が選択されるため、2 行が選択されたことになります。リストをクリックする前に行の選択を解除するにはどうすればよいですか?
私が試したこと:
私は書いてみました:
m_lista.SetItemState(m_nRow, ~LVIS_SELECTED | ~LVIS_FOCUSED, ~LVIS_SELECTED | ~LVIS_FOCUSED);
私も試してみました
if(m_nRow!= -1) m_lista.SetItemState(m_nRow, ~LVIS_SELECTED, LVIS_SELECTED); POSITION pos = NULL; INT_PTR nPos; pos = m_lista.GetFirstSelectedItemPosition(); if (pos) { nPos = m_lista.GetNextSelectedItem(pos); } else { nPos = -1; }
しかし、とにかく2行が選択されています
解決策 1
試す:
C++
m_lista.SetItemState(m_nRow, 0, LVIS_SELECTED | LVIS_FOCUSED);
これにより、2 つの状態ビットがゼロに設定されます。
[ad_2]
コメント