ListControl horizontal anordnen mit Icons



  • Hallo,

    ich habe ein Listcontrol in meinem Dialog eingefügt und mit Icons sowie
    Text bestückt. Es sieht also schon etwas der seitlichen Outlooknavigation ähnlich.

    Allerdings habe ich keinen Weg gefunden mein Control horizontal anzuordnen.
    Die Icons sollen dann nicht untereinander stehen, sondern nebeneinander.
    Durch die reine horizontale Ausrichtung erreiche ich das nicht, da dann
    ein Scrollbalken erscheint.

    Kann ich dem Control das noch irgendwie beibringen?

    Ich hoffe es ist verständlich was ich meine 🙂


  • Mod

    Einfach die Eigenschaft für den Vertical-Scrollbar auf False setzen.

    Der Scrollbar erscheint nur wenn zu viele Items vorhanden sind.



  • Leider wird mir bei all meinen Versuchen dann nur das oberste Icon angezeigt.
    Alsob dann einfach die Icons dennoch senkrecht nach unten weiter abgebildet
    werden, allerdings halt nicht angezeigt werden, da das Control nicht groß genug ist.



  • Das Control hier:

    ----------
    - -
    - X -
    - -
    - Y -
    - -
    - Z -
    ----------

    Soll dann so aussehen:

    |-------|-------|-------|
    | X.........Y.........Z....|
    |-------|-------|-------| (horizontal)


  • Mod

    Dann fehlt mir für jetzt eine weitere Idee.

    Ich habe mir das mal in meinem Code angesehen.
    Ich verwende dafür eine Ownerdraw Listbox...

    Alle anderen Implementierungen, die wie diese Outlookbars ausehen, die ich kenne, nutzen auch kein ListCtrl sondern sind Eigenkreationen.



  • Azubi11 schrieb:

    |-------|-------|-------|
    | X.........Y.........Z....|
    |-------|-------|-------| (horizontal)

    Versuche mal folgendes:

    ListView_SetView(hWndListView, LV_VIEW_ICON);
    ListView_SetExtendedListViewStyleEx(hWndListView, LVS_EX_SINGLEROW, LVS_EX_SINGLEROW);
    


  • Zumindest bei mir gibt es LVS_EX_SINGLEROW nicht unter Visual Studio 2003.
    Kann man diesen Style dennoch setzen?



  • #define LVS_EX_SINGLEROW        0x00040000
    

    Wird aber erst ab Windows XP unterstützt. Der Explorer verwendet diesen Stil für die Filmstreifen-Ansicht.



  • Hi sri,

    auch nach

    l_control.SetExtendedStyle(LVS_EX_SINGLEROW);
    

    bleibt leider die Auswahl nur von oben nach unten 😢
    Links nach rechts scheint wohl nicht ohne weiteres möglich zu sein.



  • Beim Setzen des erweiterten Stils mit SetExtentedStyle muss der gesamte erweiterte Stil angegeben werden, also so:

    l_control.SetExtendedStyle(l_control.GetExtendedStyle() | LVS_EX_SINGLEROW);
    

    Hast Du mal meine beiden Zeilen ausprobiert? Vorraussetzung ist auch ein Manifest für ComCtl32 v6, da beides erst ab Windows XP funktioniert.



  • Hallo sri,

    es hat damit leider keine Änderungen gegeben 😞



  • Schade, bei mir funktioniert es so wie von Dir gewünscht. 😞



  • ?? Dann mache ich irgendwas falsch in meinem Projekt!

    Hast du die Möglichkeit ein Testprojekt online zu stellen,
    damit ich es mal mit meinem Code vergleichen kann?

    Thx
    Azubi11 😃



  • Ich habe mit VS 2008 eine Beispielanwendung erstellt (Doc/View mit CListView) und bei CSingleRowView::OnInitialUpdate folgende Zeilen eingefügt:

    TCHAR szSystemDir[MAX_PATH];
    	GetSystemDirectory(szSystemDir, _countof(szSystemDir));
    
    	SHFILEINFO sfi = { 0 };
    	HIMAGELIST hImageList = reinterpret_cast<HIMAGELIST>(SHGetFileInfo(szSystemDir, 0, &sfi, sizeof(sfi), SHGFI_SYSICONINDEX | SHGFI_LARGEICON));
    
    	ListView_SetImageList(GetListCtrl(), hImageList, LVSIL_NORMAL);
    
    	ListView_SetView(GetListCtrl(), LV_VIEW_ICON);
    	ListView_SetExtendedListViewStyleEx(GetListCtrl(), LVS_EX_SINGLEROW, LVS_EX_SINGLEROW);
    
    	for (int iCount = 0; iCount < 20; iCount++)
    	{
    		CString strName; strName.Format(_T("Item %ld"), iCount);
    		GetListCtrl().InsertItem(iCount, strName, sfi.iIcon);
    	}
    

    Download: http://rapidshare.de/files/39098645/SingleRow.zip.html



  • Juhu vielen Dank für dein Beispiel. Jetzt hat es "geschnackelt" und ich
    habe es hinbekommen 👍 👍


Log in to reply