Around and About .NET World

Il blog di Marco Minerva
posts - 1671, comments - 2232, trackbacks - 2135

My Links

News

Contattami su Live Messenger:


MCTS: Windows, Web, Distributed Applications & SQL Server

MCPD: Enterprise Applications

Tag Cloud

Archives

Post Categories

Links

La TreeView di Windows Vista

Ho già avuto modo di parlare di alcuni dei nuovi controlli introdotti da Windows Vista. Oggi è la volta della TreeView. Osservando il controllo utilizzato da Explorer per visualizzare l'elenco delle cartelle, si nota che i vari rami non sono più collegati da una linea e che, al posto del segno + per segnalare la presenza di sottoelementi, viene utilizzata una piccola freccina che si inclina verso il basso quando si espande una voce. Infine, la barra di scorrimento orizzontale è scomparsa: quando si sposta il mouse su un elemento che non è completamente visibile, la TreeView effettua lo scrolling automaticamente.

E' possibile ottenere tutti questi effetti anche con il controllo TreeView del .NET Framework, utilizzando opprtunamente il Platform Invoke per modificare il suo stile:

1 using System.Windows.Forms; 2 using System.Runtime.InteropServices; 3 4 namespace System.Windows.Form.Vista 5 { 6 public class TreeViewEx : TreeView 7 { 8 private const int TV_FIRST = 0x1100; 9 private const int TVM_SETEXTENDEDSTYLE = TV_FIRST + 44; 10 private const int TVM_GETEXTENDEDSTYLE = TV_FIRST + 45; 11 private const int TVS_NOHSCROLL = 0x8000; 12 private const int TVS_EX_AUTOHSCROLL = 0x0020; 13 private const int TVS_EX_FADEINOUTEXPANDOS = 0x0040; 14 15 [DllImport("user32.dll", CharSet = CharSet.Unicode)] 16 private static extern int SendMessage(IntPtr hWnd, UInt32 Msg, int wParam, int lParam); 17 [DllImport("user32.dll", CharSet = CharSet.Unicode)] 18 private static extern void SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); 19 [DllImport("user32.dll", CharSet = CharSet.Unicode)] 20 private static extern int GetWindowLong(IntPtr hWnd, int nIndex); 21 [DllImport("uxtheme.dll", CharSet = CharSet.Unicode)] 22 private extern static int SetWindowTheme(IntPtr hWnd, string pszSubAppName, string pszSubIdList); 23 24 public TreeViewEx() 25 { 26 base.HotTracking = true; 27 base.ShowLines = false; 28 } 29 30 protected override CreateParams CreateParams 31 { 32 get 33 { 34 CreateParams cp = base.CreateParams; 35 cp.Style |= TVS_NOHSCROLL; 36 return cp; 37 } 38 } 39 40 protected override void OnHandleCreated(EventArgs e) 41 { 42 base.OnHandleCreated(e); 43 44 int style = SendMessage(base.Handle, TVM_GETEXTENDEDSTYLE, 0, 0); 45 style |= (TVS_EX_AUTOHSCROLL | TVS_EX_FADEINOUTEXPANDOS); 46 SendMessage(base.Handle, TVM_SETEXTENDEDSTYLE, 0, style); 47 SetWindowTheme(base.Handle, "explorer", null); 48 } 49 } 50 }

In particolare, come mostrato alle linee 26-27, per ottenere una TreeView che si comporta esattamente come quella di Explorer è fondamentale che le sue proprietà HotTracking e ShowLines siano impostate, rispettivamente, su true e su false.

Technorati tags: , ,

Print | posted on Wednesday, January 31, 2007 5:13 PM | Filed Under [ C# ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET