2009-11-13 6 views

Répondre

4

Utilisez SetItemState (0, LVIS_SELECTED, LVIS_SELECTED) pour mettre en évidence, et SetItemState (0, ~ LVIS_SELECTED, LVIS_SELECTED) à mettre hors surbrillance. Vous devez également appeler SetSelectionMark après la mise à jour des états de l'article

+0

Je l'utilise de cette façon et ça marche! – sergiol

8

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

Set Juste Propriétés-> Apparence-> Toujours afficher la sélection à TRUE

+3

Cela l'a résolu pour moi, mais pas à travers l'interface graphique. Si vous créez votre contrôle d'affichage de liste par programme, le style à définir est 'LVS_SHOWSELALWAYS'. –

1

Je pense qu'il ya une fonctionnalité non documentée de la fonction SetItemState où vous pouvez passer -1 comme argument pour faire nItem la fonction agir sur tous articles.

Donc, si vous souhaitez sélectionner un seul, je peux suggérer:

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

MISE À JOUR:

(après avoir vu http://www.verycomputer.com/417_11fcb075491b88c9_1.htm#p3)

La fonction SetItemState envoie le message LVM_SETITEMSTATE et la fonctionnalité nItem = -1 est documentée sur le message's reference documentation en tant qu'argument wParam.

+1

Merci, il y a plus d'informations dans la [macro] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb775102 (v = vs.85) .aspx). –

0

Si vous wont mis élément sélectionné dans OnInitialDialog vous MAST utiliser ce code:

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 
Questions connexes