[risolto] ListCtrl - rendere visibile un elemento

di il
7 risposte

[risolto] ListCtrl - rendere visibile un elemento

In una finestra di dialogo ho una ListView in formato report, con un lungo elenco di elementi. Io vorrei che quando inserisco un'elemento nuovo (sempre in cima alla lista), la posizione di scroll si spostasse in modo da renderlo visibile. Con
SetSelectionMark(0)
e
SetItemState(LVS_SELECTED,LVS_SELECTED)

Riesco a selezionare il primo elemento, ma la posizione di scroll non cambia. Se però premo un tasto freccia (su/giù) allora ottengo il risultato, da cui deduco che la funzionalità esiste. Mi domando se esista un messaggio da inviare per ottenere da programma lo stesso risultato, oppure se devo simulare la pressione di un tasto con una coppia di messaggi WM_KEYDOWN / WM_KEYUP.

Michele

PS: non so se è chiaro...

7 Risposte

  • Re: [risolto] ListCtrl - rendere visibile un elemento

    Siccome usi la modalità report dovresti avere un ListControl + che una ListView. Sono due controlli differenti. Su ListControl esiste la funzione EnsureVisible che fa ciò che serve a te.
    http://msdn.microsoft.com/en-us/library/tbtcxzsf.asp
  • Re: [risolto] ListCtrl - rendere visibile un elemento

    Esatto! Proprio quella, cercavo!

    Grazie
  • Re: [risolto] ListCtrl - rendere visibile un elemento

    skynet ha scritto:


    Siccome usi la modalità report dovresti avere un ListControl + che una ListView.
    In effetto la classe che uso è propio la CListCtrl.
    Però la cosa mi lascia perplesso. Dal momento che la modalità può essere cambiata al volo (è un flag dello style della finestra), possibile che diverse modalità corrispondano a diverse classi?

    Sono piuttosto esperto di WIN32 SDK (infatti con ListView mi riferivo al tipo di controllo, ovvero la stringa windowClass da dare come parametro alla CreateWindow(), non alla classe C++ che stavo usando), meno di MFC, che uso da poco, ed ho usato poco negli ultimi anni...

    Michele
  • Re: [risolto] ListCtrl - rendere visibile un elemento

    In realtà questa corrisponde al messaggio LVM_ENSUREVISIBLE in win32 SDK che può assere inviata alla lista tramite la MACRO ListView_EnsureVisible. CLIstCtrl::EnsureVisible è soltanto un wrapper alla macro stessa dell win32 API. cmq si solo certi tipi di controllo accettano certi tipi di messaggi creati solo x loro. Dal tronde in MFC quasi ogni classe sepur complicata ha discendeze dall'unica classe base CObject.
  • Re: [risolto] ListCtrl - rendere visibile un elemento

    Ma la mia domanda era un'altra.
    Dal momento che a livello di WIN SDK c'è l'unico controllo "ListView", che può avere gli stili LVS_REPORT, LVS_ICON, ecc..., come mai con le MFC esistono classi differenti per stili differenti? E come viene gestito il cambio di stile?

    Michele
  • Re: [risolto] ListCtrl - rendere visibile un elemento

    Ti mando a questo screenshot delle classi MFC.

    Come vedi in MFC esistono 2 classi distinte:
    CListView e CListControl e tutti e due derivano da CWnd.


    Non confondere CListView di MFC con ListView di WIN SDK. Non centrano anche se il nome è uguale.
    CListControl deriva da ListView di WIN SDK ed è l'unica. La ListView di SDK ha i stili che tu vuoi così come la CListControl di MFC.
    La CListView e un altra estensione che deriva da CCtrlView ma inglobba la funzionalità di CListCtrl.
    In sostanza un vero maccello.
  • Re: [risolto] ListCtrl - rendere visibile un elemento

    Ora è chiaro. Avevo capito male all'inizio, per questo ho fatto confusione.
Devi accedere o registrarti per scrivere nel forum
7 risposte