Question

J'utilise un CListCtrl dans la vue Icône, mais il défile horizontalement:

1 3 5 7 -->
2 4 6 8 -->

Je préférerais qu'il défile horizontalement:

1 2
3 4
5 6
| |
V V

Y a-t-il un moyen de faire cela?

Était-ce utile?

La solution

Modifiez le style d'alignement dans le concepteur de gauche à gauche.

Autres conseils

Je semble avoir résolu le problème en utilisant une vue "Rapport". Par le biais de VS Designer, cela signifie que vous modifiez le style 'View' en rapport, ce qui donne le contrôle en fonction de l'attribut LVS_REPORT dans le fichier .RC. Notez que cela équivaut à appeler CListCtrl :: SetView (LV_VIEW_DETAILS) dans le code. Ce n'est pas suffisant cependant. Il est également nécessaire de créer une colonne si vous n'en avez pas déjà une avec quelques lignes de code:

m_lstScenarios.InsertColumn(0, L"NO HEADER");
m_lstScenarios.SetColumnWidth(k_nListColScenario, LVSCW_AUTOSIZE);

Si vous ne souhaitez pas utiliser l'en-tête de colonne, définissez LVS_NOCOLUMNHEADER dans Designer dans le style "Aucun en-tête de colonne".

Dans l'éditeur de boîte de dialogue Visual Studio, assurez-vous que vous disposez d'un " Contrôle de liste, " pas une "liste de sélection".

Dans la liste des propriétés de l'éditeur de boîte de dialogue Visual Studio, définissez l'option "Aucun en-tête de colonne". sur True et " Afficher " signaler. (Le réglage de "Alignement" sur la gauche est sans effet en mode Rapport.)

Dans OnInitDialog () , procédez comme suit (après avoir appelé le OnInitDialog () de votre superclasse):

  CListCtrl* plistError = (CListCtrl*) GetDlgItem( IDC_ERROR );
  plistError->InsertColumn( 0, "" );
  plistError->SetColumnWidth( 0, LVSCW_AUTOSIZE_USEHEADER );

En fait, cela semble donner une taille maximale automatique de la largeur initiale avec laquelle le contrôle est créé. Les chaînes sont affichées tronquées avec des points de suspension à cet endroit. Élargir la fenêtre n’aide en rien.

Pour corriger cela, ajoutez une méthode OnSize () à votre sous-classe CDialog qui rappelle à nouveau à la liste qu'elle est plus large. (Cela suppose que l’élargissement de la fenêtre permette au CListCtrl d’afficher plus de texte. Si vous avez un autre moyen, tel qu’un bouton, essayez cet appel SetColumnWidth () où tu fais ça.)

 WinProgress::OnSize() {
    CListCtrl* plist = (CListCtrl*) GetDlgItem( IDC_ERROR );
    plist->SetColumnWidth( 0, LVSCW_AUTOSIZE_USEHEADER );

Vous pouvez ensuite ajouter de nouvelles lignes au bas de la liste avec un code tel que:

  CListCtrl* plist = (CListCtrl*) GetDlgItem( IDC_ERROR );
  int iCount = plist->GetItemCount();

  plist->InsertItem( iCount, "Next Item" );

Les éléments trop larges pour la liste afficheront d'abord des ellipses. Lorsque vous redimensionnez légèrement la fenêtre, les éléments de la liste sont agrandis au maximum et une barre de défilement horizontale apparaît si nécessaire. En ce qui concerne l'apparence, ce n'est pas tout à fait 10/10, mais même les programmeurs expérimentés ne le remarqueront probablement pas.

Dans le contrôle par liste, pour afficher le contenu avec l'image dans une colonne avec le code suivant de la barre de défilement verticale .add, Dans la fonction PreCreateWindow, ajoute la ligne suivante cs.style | = (LVS_REPORT | LVS_NOCOLUMNHEADER); et dans la fonction OnIntialUpdate, ajoutez la ligne suivante,     fileList.InsertColumn (0, ", LVCFMT_LEFT | LVCFMT_IMAGE, 120, -1);     ShowScrollBar (SB_VERT, 1); Après cela, où que vous souhaitiez insérer des données dans une liste, vous ne pouvez que vous assurer que vous définissez imagelist, puis insérez des données à l'aide de insertitem, par exemple:    fileList, insertitem (0, "India", 1); où 1- > est un index d'image dans imagelist.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top