Come si può fare un CListCtrl
per ridimensionare automaticamente la larghezza delle colonne? Di solito, quando un elemento nella lista diventa troppo lungo, il back-end scompare dalla vista e l'utente deve ridimensionare manualmente la larghezza della colonna corrispondente. C'è un modo per farlo tramite codice?Ridimensionamento automatico delle larghezze delle colonne in un CListCtrl
risposta
ridimensionamento automatico delle colonne è facile:
for(int i = 0;i < pListCtrl->GetHeaderCtrl()->GetItemCount();++i)
pListCtrl->SetColumnWidth(i,LVSCW_AUTOSIZE_USEHEADER);
Ciò consente di ottimizzare le colonne.
È attiva l'opzione "No Scroll"? Per impostazione predefinita (opzione "No Scroll" disattivata), se un elemento è troppo lungo appare una barra di scorrimento.
Suppongo che intenda un controllo di elenco in modalità di report? Sfortunatamente non c'è modo di ridimensionare automaticamente le colonne. Quello che puoi fare (quello che faccio in alcuni punti) è calcolare la larghezza delle colonne mentre inserisci elementi, quindi gestire WM_SIZE e ridimensionare le colonne. Tuttavia questo causa modifiche che l'utente ha fatto perdersi, quindi potrebbe essere necessario un algoritmo migliore come il monitoraggio se l'utente ha apportato delle modifiche, se non l'ha ridimensionato. Non è molto bello da una prospettiva UX, lo uso solo in una quantità selezionata di circostanze in cui il comportamento ha senso nel contesto dell'intera interfaccia utente.
Sì, è esattamente ciò che intendevo. Grazie per la risposta, se non riesco ad ottenere un algo adatto, gestirò semplicemente OnSize() per ridimensionare manualmente e chiedere al lettore di ridimensionare la finestra. – Isuru
Ehi, l'ho provato e sembra funzionare bene :) :) Grazie mille per la risposta dwo: D – Isuru
Una piccola domanda dwo, non ho mai sentito parlare di HeaderControl. Che cosa è esattamente ??? Grazie mille !!! – Isuru
Il controllo dell'intestazione è la parte superiore del controllo dell'elenco con i titoli delle colonne al suo interno. – dwo