[ad_1]
void CDlgCorrection::RowSelected() { m_bInizio = false; for (int i = 0; i < m_astrPath.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); }
Utilicé este código para seleccionar una fila en mi CListCtrl, pero si hago clic en mi CListCtrl, la fila se selecciona, por lo que tengo 2 filas seleccionadas. ¿Cómo puedo anular la selección de una fila antes de hacer clic en mi lista?
Lo que he probado:
Intenté escribir:
m_lista.SetItemState(m_nRow, ~LVIS_SELECTED | ~LVIS_FOCUSED, ~LVIS_SELECTED | ~LVIS_FOCUSED);
lo intenté también
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; }
pero de todos modos tengo 2 filas seleccionadas
….Lo resolví:
void CDlgCorrection::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult) { m_lista.SetItemState(m_nrow, 0, LVIS_SELECTED); m_nRowSelected = -1; m_lista.SetFocus(); m_lista.SetSelectionMark(-1); }
Solución 2
Si tener dos filas seleccionadas es un problema, configure las propiedades del control para permitir solo selecciones individuales. Eso se puede hacer con el editor de recursos o mediante código.
Es posible que desee considerar el uso de una de las muchas clases de control de listas derivadas disponibles en este sitio. Yo uso este: CReportCtrl: una versión extremadamente conveniente de CListCtrl con estilo de informe[^].
Solución 1
Intentar:
m_lista.SetItemState(m_nRow, 0, LVIS_SELECTED | LVIS_FOCUSED);
Lo que debería establecer los dos bits de estado en cero.
Solución 3
Prueba esto. En tus funciones de OnCreate
GetListCtrl().SetExtendedStyle(LVS_EX_FULLROWSELECT);
[ad_2]
コメント