2009-11-13 32 views

Respuesta

4

Use SetItemState (0, LVIS_SELECTED, LVIS_SELECTED) para resaltar y SetItemState (0, ~ LVIS_SELECTED, LVIS_SELECTED) para desmarcar.

+0

utilizo esta manera y funciona! – sergiol

8

también necesita llamar SetSelectionMark después de actualizar los estados de elementos.

SetItemState(prev_item, ~LVIS_SELECTED, LVIS_SELECTED); 
SetItemState(new_selected_item, LVIS_SELECTED, LVIS_SELECTED); 
SetSelectionMark(new_selected_item); 
2

acaba de establecer Properties-> apariencia-> Mostrar siempre Selección a VERDADERO

+3

Esto lo resolvió para mí, aunque no a través de la GUI. Si está creando su control de vista de lista programáticamente, el estilo que se establecerá es 'LVS_SHOWSELALWAYS'. –

1

Creo que hay una característica no documentada de la función SetItemState, donde se puede pasar -1 como argumento para hacer nItem la función actúa en todos elementos.

Por lo tanto, si sólo desea seleccionar único, puedo sugerir:

SetItemState(-1, 0, LVIS_SELECTED); 
    SetItemState(index, LVIS_SELECTED, LVIS_SELECTED); 

ACTUALIZACIÓN:

(después de ver http://www.verycomputer.com/417_11fcb075491b88c9_1.htm#p3)

La función SetItemState envía el mensaje LVM_SETITEMSTATE, y la nItem = -1 característica se documenta en la message's reference documentation como su argumento wParam.

+1

Gracias, hay más información en la [macro] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb775102 (v = vs.85) .aspx) también. –

0

Si usted no fijar elemento seleccionado en OnInitialDialog que Mástil utilizar este código:

m_pSPSMapList->EnsureVisible(nItem, FALSE); 
m_pSPSMapList->SetFocus(); 
m_pSPSMapList->SetItemState(nItem, LVIS_FOCUSED | LVIS_SELECTED, 
            LVIS_FOCUSED | LVIS_SELECTED); 

return FALSE; // OnInitialDialog necessarily must return false 
Cuestiones relacionadas