Prechádzať zdrojové kódy

* TreeNode.cs
* TreeNodeCollection.cs
* TreeView.cs : more implementation added

svn path=/trunk/mcs/; revision=15609

Aleksey Ryabchuk 22 rokov pred
rodič
commit
b815e6e4e9

+ 5 - 0
mcs/class/System.Windows.Forms/System.Windows.Forms/ChangeLog

@@ -1,3 +1,8 @@
+2003-06-24 Aleksey Ryabchuk <[email protected]>
+	* TreeNode.cs
+	* TreeNodeCollection.cs
+	* TreeView.cs : more implementation added
+
 2003-06-12 Aleksey Ryabchuk <[email protected]>
 	* Menu.cs
 	* ContextMenu.cs : create context menu using CreatePopupMenu function

+ 1 - 0
mcs/class/System.Windows.Forms/System.Windows.Forms/TrackBar.cs

@@ -35,6 +35,7 @@ namespace System.Windows.Forms {
 		public TrackBar()
 		{
 		}
+		
 		//
 		// --- Public Properties
 		//

+ 96 - 29
mcs/class/System.Windows.Forms/System.Windows.Forms/TreeNode.cs

@@ -4,6 +4,7 @@
 // Author:
 //   stubbed out by Jackson Harper ([email protected])
 //   Dennis Hayes ([email protected])
+//   Aleksey Ryabchuk ([email protected])
 //
 // (C) 2002 Ximian, Inc
 //
@@ -18,14 +19,27 @@ namespace System.Windows.Forms {
 
 		TreeNodeCollection children;
 		TreeNode           parent;
+		TreeView           treeView;
 		string             text;
-		
+		IntPtr             handle;
+		int                imageIndex;
+		int                selectedImageIndex;
+		bool               checked_;
+
 		[MonoTODO]
 		public TreeNode()
 		{
+			children = null;
+			parent   = null;
+			treeView = null;
+			text     = String.Empty;
+			handle   = IntPtr.Zero;
+			imageIndex = 0;
+			selectedImageIndex = 0;
+			checked_ = false;
 		}
 		[MonoTODO]
-		public TreeNode( string text )
+		public TreeNode( string text ) : this ( )
 		{
 			this.text = text;
 		}
@@ -38,11 +52,15 @@ namespace System.Windows.Forms {
 		[MonoTODO]
 		public TreeNode( string text, int imageIndex, int selectedImageIndex ) : this ( text )
 		{
+			this.imageIndex = imageIndex;
+			this.selectedImageIndex = selectedImageIndex;
 		}
 
 		[MonoTODO]
 		public TreeNode( string text, int imageIndex, int selectedImageIndex, TreeNode[] children ) : this ( text, children )
 		{
+			this.imageIndex = imageIndex;
+			this.selectedImageIndex = selectedImageIndex;
 		}
 
 		// --- Public Properties
@@ -67,13 +85,11 @@ namespace System.Windows.Forms {
 		}
 		[MonoTODO]
 		public bool Checked {
-			get
-			{
-				throw new NotImplementedException ();
+			get {
+				return checked_;
 			}
-			set
-			{
-				throw new NotImplementedException ();
+			set {
+				checked_ = value;
 			}
 		}
 		[MonoTODO]
@@ -103,20 +119,21 @@ namespace System.Windows.Forms {
 		}
 		[MonoTODO]
 		public IntPtr Handle {
-			get
-			{
-				throw new NotImplementedException ();
+			get {
+				 if ( handle == IntPtr.Zero )
+					createNode ( );
+				 return handle; 
 			}
 		}
 		[MonoTODO]
 		public int ImageIndex {
-			get
-			{
-				throw new NotImplementedException ();
+			get {
+				if ( TreeView != null && TreeView.ImageIndex != 0 && imageIndex == 0 )
+					return TreeView.ImageIndex;
+				return imageIndex;
 			}
-			set
-			{
-				throw new NotImplementedException ();
+			set {
+				imageIndex = value;
 			}
 		}
 		[MonoTODO]
@@ -194,7 +211,7 @@ namespace System.Windows.Forms {
 		public TreeNodeCollection Nodes {
 			get {
 				if ( children == null )
-					children = new TreeNodeCollection ( this );
+					children = new TreeNodeCollection ( this, treeView );
 				return children;
 			}
 		}
@@ -218,13 +235,14 @@ namespace System.Windows.Forms {
 		}
 		[MonoTODO]
 		public int SelectedImageIndex {
-			get
-			{
-				throw new NotImplementedException ();
+			get {
+				if ( TreeView != null && TreeView.SelectedImageIndex != 0 && selectedImageIndex == 0 )
+					return TreeView.SelectedImageIndex;
+
+				return selectedImageIndex;
 			}
-			set
-			{
-				//FIXME:
+			set {
+				selectedImageIndex = value;	
 			}
 		}
 		[MonoTODO]
@@ -245,12 +263,9 @@ namespace System.Windows.Forms {
 				text = value;
 			}
 		}
-		[MonoTODO]
+
 		public TreeView TreeView {
-			get
-			{
-				throw new NotImplementedException ();
-			}
+			get { return treeView; }
 		}
 		
 		// --- Public Methods
@@ -321,5 +336,57 @@ namespace System.Windows.Forms {
 		{
 			this.parent = parent;
 		}
+			
+		internal void setHandle ( IntPtr hItem )
+		{
+			this.handle = hItem;
+		}
+
+		internal void setTreeView ( TreeView treeView )
+		{
+			this.treeView = treeView;
+			foreach ( TreeNode node in Nodes )
+				node.setTreeView ( treeView );
+		}
+
+		internal void makeTree ( IntPtr parent )
+		{
+			if ( handle == IntPtr.Zero )
+				handle = insertNode ( parent );
+
+			foreach ( TreeNode node in Nodes )
+				node.makeTree ( handle );
+		}
+
+		internal void createNode ( )
+		{
+			IntPtr parentHandle = IntPtr.Zero;
+
+			if ( Parent != null )
+				parentHandle = Parent.Handle;
+			else {
+				unchecked {
+					int intPtr = ( int ) TreeViewItemInsertPosition.TVI_ROOT;
+					parentHandle = (IntPtr) intPtr;
+				}
+			}
+
+			if ( parentHandle != IntPtr.Zero ) {
+				handle = insertNode ( parentHandle );
+			}
+		}
+
+		internal IntPtr insertNode (  IntPtr parent )
+		{
+			if ( TreeView != null ) {
+				TVINSERTSTRUCT insStruct = new TVINSERTSTRUCT ( );
+				insStruct.hParent = parent;
+
+				insStruct.item.mask = (uint) TreeViewItemFlags.TVIF_TEXT;
+				insStruct.item.pszText = Text;
+				return (IntPtr) Win32.SendMessage ( TreeView.Handle , TreeViewMessages.TVM_INSERTITEMA, 0, ref insStruct );
+			}
+			return IntPtr.Zero;
+		}
 	}
 }

+ 5 - 2
mcs/class/System.Windows.Forms/System.Windows.Forms/TreeNodeCollection.cs

@@ -4,6 +4,7 @@
 // Author:
 //   stubbed out by Jackson Harper ([email protected])
 //   Dennis Hayes ([email protected])
+//   Aleksey Ryabchuk ([email protected])
 //
 // (C) 2002 Ximian, Inc
 //
@@ -19,11 +20,13 @@ namespace System.Windows.Forms {
 
 		private TreeNode  owner;
 		private ArrayList list;
+		private TreeView  treeView;
 
-		internal TreeNodeCollection ( TreeNode owner )
+		internal TreeNodeCollection ( TreeNode owner, TreeView  treeView )
 		{
 			list = new ArrayList();
 			this.owner = owner;
+			this.treeView = treeView;
 		}
 		
 		public int Count {
@@ -60,7 +63,7 @@ namespace System.Windows.Forms {
 				throw new ArgumentException("Object already has a parent.", "node");
 
 			node.setParent( owner );
-
+			node.setTreeView ( treeView );
 			int index = list.Add( node );
 			return 	index;		
 		}

+ 266 - 138
mcs/class/System.Windows.Forms/System.Windows.Forms/TreeView.cs

@@ -4,10 +4,13 @@
 // Author:
 //   stubbed out by Jackson Harper ([email protected])
 //	Dennis Hayes ([email protected])
+//   Aleksey Ryabchuk ([email protected])
 //
 // (C) 2002 Ximian, Inc
 //
 using System.Drawing;
+using System.ComponentModel;
+
 namespace System.Windows.Forms {
 
 	// <summary>
@@ -21,6 +24,17 @@ namespace System.Windows.Forms {
 		private int selectedImageIndex;
 		private TreeNodeCollection nodes;
 		private int indent;
+		private BorderStyle borderStyle;
+		private bool checkBoxes;
+		private bool fullRowSelect;
+		private bool hideSelection;
+		private bool hotTracking;
+		private bool showLines;
+		private bool showPlusMinus;
+		private bool showRootLines;
+		private ImageList imageList;
+		private bool sorted;
+		const int DefaultIndent = 19;
 		//
 		//  --- Public Constructors
 		//
@@ -30,131 +44,161 @@ namespace System.Windows.Forms {
 			imageIndex = 0;
 			selectedImageIndex = 0;
 			SubClassWndProc_ = true;
+			borderStyle = BorderStyle.Fixed3D;
+			checkBoxes = false;
+			fullRowSelect = false;
+			hideSelection = true;
+			hotTracking = false;
+			showLines = true;
+			showPlusMinus = true;
+			showRootLines = true;
+			sorted = false;
+			imageIndex = 0;
+			imageList = null;
+			indent = DefaultIndent;
 		}
 		
 		// --- Public Properties
 		
 		[MonoTODO]
 		public override Color BackColor {
-			get
-			{
-				//FIXME:
-				return base.BackColor;
-			}
-			set
-			{
-				//FIXME:
+			get { return base.BackColor; }
+			set {
 				base.BackColor = value;
+
+				if ( IsHandleCreated )
+					setBackColor ( );
 			}
 		}
-		[MonoTODO]
+
+		[EditorBrowsable (EditorBrowsableState.Never)]
 		public override Image BackgroundImage {
-			get
-			{
-				//FIXME:
-				return base.BackgroundImage;
-			}
-			set
-			{
-				//FIXME:
-				base.BackgroundImage = value;
-			}
+			get { return base.BackgroundImage;  }
+			set { base.BackgroundImage = value; }
 		}
-		[MonoTODO]
+
 		public BorderStyle BorderStyle {
-			get
-			{
-				throw new NotImplementedException ();
-			}
-			set
-			{
-				//FIXME:
+			get {   return borderStyle; }
+			set {
+				if ( !Enum.IsDefined ( typeof(BorderStyle), value ) )
+					throw new InvalidEnumArgumentException( "BorderStyle",
+						(int)value,
+						typeof(BorderStyle));
+				
+				if ( borderStyle != value ) {
+					int oldStyle = getBorderStyle ( borderStyle );
+					int oldExStyle = getBorderExStyle ( borderStyle );
+					borderStyle = value;
+
+					if ( IsHandleCreated ) {
+						Win32.UpdateWindowStyle ( Handle, oldStyle, getBorderStyle ( borderStyle ) );
+						Win32.UpdateWindowExStyle ( Handle, oldExStyle, getBorderExStyle ( borderStyle ) );
+					}
+				}
 			}
 		}
 		[MonoTODO]
 		public bool CheckBoxes {
-			get
-			{
-				throw new NotImplementedException ();
-			}
-			set
-			{
-				//FIXME:
+			get { return checkBoxes; }
+			set {
+				checkBoxes = value;
+				RecreateHandle ( );
 			}
 		}
-		[MonoTODO]
+
 		public override Color ForeColor {
-			get
-			{
-				//FIXME:
-				return base.ForeColor;
-			}
-			set
-			{
-				//FIXME:
+			get { return base.ForeColor; }
+			set {
 				base.ForeColor = value;
+			
+				if ( IsHandleCreated )
+					setForeColor ( );
 			}
 		}
-		[MonoTODO]
+
 		public bool FullRowSelect {
-			get
-			{
-				throw new NotImplementedException ();
-			}
-			set
-			{
-				//FIXME:
+			get { return fullRowSelect; }
+			set {
+				if ( fullRowSelect != value ) {
+					int oldStyle = fullRowSelect ? (int)TreeViewStyles.TVS_FULLROWSELECT : 0;
+					fullRowSelect = value;
+						
+					if ( IsHandleCreated ) {
+						int newStyle = fullRowSelect ? (int)TreeViewStyles.TVS_FULLROWSELECT : 0;
+						Win32.UpdateWindowStyle ( Handle, oldStyle, newStyle );
+					}
+				}
 			}
 		}
-		[MonoTODO]
+
 		public bool HideSelection {
-			get
-			{
-				throw new NotImplementedException ();
-			}
-			set
-			{
-				//FIXME:
+			get { return hideSelection; }
+			set {
+				if ( hideSelection != value ) {
+					int oldStyle = hideSelection ? 0 : (int)TreeViewStyles.TVS_SHOWSELALWAYS;
+					hideSelection = value;
+						
+					if ( IsHandleCreated ) {
+						int newStyle = hideSelection ? 0 : (int)TreeViewStyles.TVS_SHOWSELALWAYS;
+						Win32.UpdateWindowStyle ( Handle, oldStyle, newStyle );
+					}
+				}
 			}
 		}
-		[MonoTODO]
+
 		public bool HotTracking {
-			get
-			{
-				throw new NotImplementedException ();
-			}
-			set
-			{
-				//FIXME:
+			get { return hotTracking; }
+			set {
+				if ( hotTracking != value ) {
+					int oldStyle = hotTracking ? (int)TreeViewStyles.TVS_TRACKSELECT : 0;
+					hotTracking = value;
+						
+					if ( IsHandleCreated ) {
+						int newStyle = hotTracking ? (int)TreeViewStyles.TVS_TRACKSELECT : 0;
+						Win32.UpdateWindowStyle ( Handle, oldStyle, newStyle );
+					}
+				}
 			}
 		}
 		[MonoTODO]
 		public int ImageIndex {
-			get
-			{
-				return imageIndex;
-			}
-			set
-			{
-				//FIXME:
+			get { return imageIndex; }
+			set {
+				if ( imageIndex != value ) {
+					imageIndex = value;
+					RecreateHandle ( );
+				}
 			}
 		}
 		[MonoTODO]
 		public ImageList ImageList {
-			get
-			{
-				throw new NotImplementedException ();
-			}
-			set
-			{
-				//FIXME:
+			get { return imageList; }
+			set {
+				if ( imageList != value ) {
+					imageList = value;
+					if ( IsHandleCreated )
+						setImageList ( );
+				}
 			}
 		}
-		[MonoTODO]
+
 		public int Indent {
 			get { return indent; }
 			set {
-				indent = value;
+				if ( value < 0 )
+					throw new ArgumentException ( 
+						 string.Format ("'{0}' is not a valid value for 'Indent'.  'Indent' must be greater than or equal to 0.", value), "value");
+
+				if ( value > 32000 )
+					throw new ArgumentException ( 
+						string.Format ("'{0}' is not a valid value for 'Indent'. 'Indent' must be less than or equal to 32000.", value), "value" );
+
+				if ( indent != value ) {
+					indent = value;
+
+					if ( IsHandleCreated )
+						setIndent ( );
+				}
 			}
 		}
 		[MonoTODO]
@@ -183,7 +227,7 @@ namespace System.Windows.Forms {
 		public TreeNodeCollection Nodes {
 			get {
 				if ( nodes == null )
-					nodes = new TreeNodeCollection ( null );
+					nodes = new TreeNodeCollection ( null, this );
 				return nodes;
 			}
 		}
@@ -211,13 +255,12 @@ namespace System.Windows.Forms {
 		}
 		[MonoTODO]
 		public int SelectedImageIndex {
-			get
-			{
-				return selectedImageIndex;
-			}
-			set
-			{
-				//FIXME:
+			get { return selectedImageIndex; }
+			set {
+				if ( selectedImageIndex != value ) {
+					selectedImageIndex = value;
+					RecreateHandle ( );
+				}
 			}
 		}
 		[MonoTODO]
@@ -231,61 +274,63 @@ namespace System.Windows.Forms {
 				//FIXME:
 			}
 		}
-		[MonoTODO]
+
 		public bool ShowLines {
-			get
-			{
-				throw new NotImplementedException ();
-			}
-			set
-			{
-				//FIXME:
+			get { return showLines;	}
+			set {
+				if ( showLines != value ) {
+					int oldStyle = showLines ? (int)TreeViewStyles.TVS_HASLINES : 0;
+					showLines = value;
+						
+					if ( IsHandleCreated ) {
+						int newStyle = showLines ? (int)TreeViewStyles.TVS_HASLINES : 0;
+						Win32.UpdateWindowStyle ( Handle, oldStyle, newStyle );
+					}
+				}
 			}
 		}
-		[MonoTODO]
+
 		public bool ShowPlusMinus {
-			get
-			{
-				throw new NotImplementedException ();
-			}
-			set
-			{
-				//FIXME:
+			get { return showPlusMinus; }
+			set {
+				if ( showPlusMinus != value ) {
+					int oldStyle = showPlusMinus ? (int)TreeViewStyles.TVS_HASBUTTONS : 0;
+					showPlusMinus = value;
+						
+					if ( IsHandleCreated ) {
+						int newStyle = showPlusMinus ? (int)TreeViewStyles.TVS_HASBUTTONS : 0;
+						Win32.UpdateWindowStyle ( Handle, oldStyle, newStyle );
+					}
+				}
 			}
 		}
-		[MonoTODO]
+
 		public bool ShowRootLines {
-			get
-			{
-				throw new NotImplementedException ();
-			}
-			set
-			{
-				//FIXME:
+			get { return showRootLines; }
+			set {
+				if ( showRootLines != value ) {
+					int oldStyle = showRootLines ? (int)TreeViewStyles.TVS_LINESATROOT : 0;
+					showRootLines = value;
+						
+					if ( IsHandleCreated ) {
+						int newStyle = showRootLines ? (int)TreeViewStyles.TVS_LINESATROOT : 0;
+						Win32.UpdateWindowStyle ( Handle, oldStyle, newStyle );
+					}
+				}
 			}
 		}
 		[MonoTODO]
 		public bool Sorted {
-			get
-			{
-				throw new NotImplementedException ();
-			}
-			set
-			{
-				//FIXME:
+			get { return sorted; }
+			set {
+				sorted = value;
 			}
 		}
 
+		[EditorBrowsable (EditorBrowsableState.Never)]
 		public override string Text {
-			get {
-				//FIXME:
-				return base.Text;
-			}
-			set
-			{
-				//FIXME:
-				base.Text = value;
-			}
+			get { return base.Text;	 }
+			set { base.Text = value; }
 		}
 		[MonoTODO]
 		public TreeNode TopNode {
@@ -370,6 +415,31 @@ namespace System.Windows.Forms {
 
 				createParams.ClassName = Win32.TREEVIEW_CLASS;
 				createParams.Style |= (int) WindowStyles.WS_CHILD ;
+
+				createParams.Style   |= getBorderStyle   ( BorderStyle );
+				createParams.ExStyle |= getBorderExStyle ( BorderStyle );
+
+				if ( CheckBoxes )
+					createParams.Style |= (int) TreeViewStyles.TVS_CHECKBOXES;
+
+				if ( FullRowSelect )
+					createParams.Style |= (int) TreeViewStyles.TVS_FULLROWSELECT;
+
+				if ( ShowLines )
+					createParams.Style |= (int) TreeViewStyles.TVS_HASLINES;
+
+				if ( !HideSelection )
+					createParams.Style |= (int) TreeViewStyles.TVS_SHOWSELALWAYS;
+
+				if ( HotTracking )
+					createParams.Style |= (int) TreeViewStyles.TVS_TRACKSELECT;
+
+				if ( ShowPlusMinus )
+					createParams.Style |= (int) TreeViewStyles.TVS_HASBUTTONS;
+
+				if ( ShowRootLines )
+					createParams.Style |= (int) TreeViewStyles.TVS_LINESATROOT;
+
 				return createParams;
 			}		
 		}
@@ -385,6 +455,7 @@ namespace System.Windows.Forms {
 		{
 			initCommonControlsLibrary ( );
 			base.CreateHandle();
+			makeTree ( );
 		}
 
 
@@ -449,6 +520,14 @@ namespace System.Windows.Forms {
 		{
 			//FIXME:
 			base.OnHandleCreated(e);
+			
+			setImageList ( );
+			if ( BackColor != Control.DefaultBackColor )
+				setBackColor ( );
+			if ( ForeColor != Control.DefaultForeColor )
+				setForeColor ( );
+			if ( Indent != DefaultIndent )
+				setIndent ( );
 		}
 		[MonoTODO]
 		protected override void OnHandleDestroyed(EventArgs e)
@@ -485,12 +564,61 @@ namespace System.Windows.Forms {
 			CallControlWndProc( ref m );
 		}
 
-	    private void initCommonControlsLibrary ( ) {
-		    if ( !RecreatingHandle ) {
-			    INITCOMMONCONTROLSEX initEx = new INITCOMMONCONTROLSEX();
-			    initEx.dwICC = CommonControlInitFlags.ICC_TREEVIEW_CLASSES;
-			    Win32.InitCommonControlsEx(initEx);
-		    }
-	    }
+		private void initCommonControlsLibrary ( ) {
+			if ( !RecreatingHandle ) {
+				INITCOMMONCONTROLSEX initEx = new INITCOMMONCONTROLSEX();
+				initEx.dwICC = CommonControlInitFlags.ICC_TREEVIEW_CLASSES;
+				Win32.InitCommonControlsEx(initEx);
+			}
+		}
+
+		internal void makeTree ( )
+		{
+			IntPtr parent = IntPtr.Zero;
+			unchecked {
+				int intPtr = ( int ) TreeViewItemInsertPosition.TVI_ROOT;
+				parent = (IntPtr) intPtr;
+			}
+
+			foreach ( TreeNode node in Nodes )
+				node.makeTree ( parent );
+		}
+
+		private void setBackColor ( )
+		{
+			Win32.SendMessage ( Handle , (int)TreeViewMessages.TVM_SETBKCOLOR, 0, Win32.RGB( BackColor ) ) ;
+		}
+
+		private void setForeColor ( )
+		{
+			Win32.SendMessage ( Handle , (int)TreeViewMessages.TVM_SETTEXTCOLOR, 0, Win32.RGB( ForeColor ) ) ;
+		}
+
+		private int getBorderStyle ( BorderStyle style )
+		{
+			if ( style == BorderStyle.FixedSingle )
+				return (int) WindowStyles.WS_BORDER;
+
+			return 0;
+		}
+
+		private int getBorderExStyle ( BorderStyle style )
+		{
+			if ( style == BorderStyle.Fixed3D )
+				return (int) (int)WindowExStyles.WS_EX_CLIENTEDGE;
+
+			return 0;
+		}
+
+		private void setImageList ( )
+		{
+			int handle = ( ImageList != null ) ? ImageList.Handle.ToInt32 ( ) : 0 ;
+			Win32.SendMessage ( Handle , (int)TreeViewMessages.TVM_SETIMAGELIST, (int)TreeViewImageListFlags.TVSIL_NORMAL, handle ) ;
+		}
+
+		private void setIndent ( )
+		{
+			Win32.SendMessage ( Handle , (int)TreeViewMessages.TVM_SETINDENT, Indent, 0 ) ;
+		}
 	}
 }

+ 47 - 10
mcs/class/System.Windows.Forms/System.Windows.Forms/win32Enums.cs

@@ -1240,15 +1240,34 @@ namespace System.Windows.Forms{
 	#endregion
 
 	#region TreeView Messages
-	public enum TreeViewMessages {
-		TV_FIRST			=  0x1100,
-		TVM_GETITEMRECT		= (TV_FIRST + 4),
-		TVM_SETIMAGELIST	= (TV_FIRST + 9),
-		TVM_HITTEST         = (TV_FIRST + 17),
-		TVM_SORTCHILDRENCB  = (TV_FIRST + 21),
-		TVM_GETITEMW		= (TV_FIRST + 62),
-		TVM_SETITEMW        = (TV_FIRST + 63),
-		TVM_INSERTITEMW     = (TV_FIRST + 50)
+	public enum TreeViewMessages : int {
+		TV_FIRST	    =  0x1100,
+		TVM_INSERTITEMA     =  ( TV_FIRST + 0 ),
+		TVM_DELETEITEM      =  ( TV_FIRST + 1 ),
+		TVM_EXPAND          =  ( TV_FIRST + 2 ),
+		TVM_GETITEMRECT	    =  ( TV_FIRST + 4 ),
+		TVM_GETCOUNT        =  ( TV_FIRST + 5 ),
+		TVM_GETINDENT       =  ( TV_FIRST + 6 ),
+		TVM_SETINDENT       =  ( TV_FIRST + 7 ),
+		TVM_GETIMAGELIST    =  ( TV_FIRST + 8 ),
+		TVM_SETIMAGELIST    =  ( TV_FIRST + 9 ),
+		TVM_GETNEXTITEM     =  ( TV_FIRST + 10 ),
+		TVM_SELECTITEM      =  ( TV_FIRST + 11 ),
+		TVM_GETITEMA        =  ( TV_FIRST + 12 ),
+		TVM_SETITEMA        =  ( TV_FIRST + 13 ),
+		TVM_EDITLABELA      =  ( TV_FIRST + 14 ),
+		TVM_GETEDITCONTROL  =  ( TV_FIRST + 15 ),
+		TVM_GETVISIBLECOUNT =  ( TV_FIRST + 16 ),
+		TVM_HITTEST         =  ( TV_FIRST + 17 ),
+		TVM_CREATEDRAGIMAGE =  ( TV_FIRST + 18 ),
+		TVM_SORTCHILDREN    =  ( TV_FIRST + 19 ),
+		TVM_ENSUREVISIBLE   =  ( TV_FIRST + 20 ),
+		TVM_SORTCHILDRENCB  =  ( TV_FIRST + 21 ),
+		TVM_SETBKCOLOR      =  ( TV_FIRST + 29 ),
+		TVM_SETTEXTCOLOR    =  ( TV_FIRST + 30 ),
+		TVM_GETITEMW	    =  ( TV_FIRST + 62 ),
+		TVM_SETITEMW        =  ( TV_FIRST + 63 ),
+		TVM_INSERTITEMW     =  ( TV_FIRST + 50 )
 	}
 	#endregion
 
@@ -1729,7 +1748,7 @@ namespace System.Windows.Forms{
 	#endregion
 
 	#region TreeViewItemInsertPosition
-	public enum TreeViewItemInsertPosition : long {
+	public enum TreeViewItemInsertPosition : uint {
 		TVI_ROOT                = 0xFFFF0000,
 		TVI_FIRST               = 0xFFFF0001,
 		TVI_LAST                = 0xFFFF0002,
@@ -1817,6 +1836,24 @@ namespace System.Windows.Forms{
 	}
 	#endregion
 
+	public enum TreeViewStyles : int {
+		TVS_HASBUTTONS          = 0x0001,
+		TVS_HASLINES            = 0x0002,
+		TVS_LINESATROOT         = 0x0004,
+		TVS_EDITLABELS          = 0x0008,
+		TVS_DISABLEDRAGDROP     = 0x0010,
+		TVS_SHOWSELALWAYS       = 0x0020,
+		TVS_RTLREADING          = 0x0040,
+		TVS_NOTOOLTIPS          = 0x0080,
+		TVS_CHECKBOXES          = 0x0100,
+		TVS_TRACKSELECT         = 0x0200,
+		TVS_SINGLEEXPAND        = 0x0400,
+		TVS_INFOTIP             = 0x0800,
+		TVS_FULLROWSELECT       = 0x1000,
+		TVS_NOSCROLL            = 0x2000,
+		TVS_NONEVENHEIGHT       = 0x4000
+	}
+
 	#region Windows System Objects
 	public enum SystemObject : long {
 		// Reserved IDs for system objects

+ 8 - 8
mcs/class/System.Windows.Forms/System.Windows.Forms/win32Structs.cs

@@ -468,14 +468,14 @@ namespace System.Windows.Forms
 	#endregion
 
 	#region TVITEM
-	[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
+	[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
 	internal struct TVITEM 
 	{
-		internal	int      mask;
+		internal	uint      mask;
 		internal	IntPtr    hItem;
-		internal	int      state;
-		internal	int      stateMask;
-		internal	IntPtr    pszText;
+		internal	uint      state;
+		internal	uint      stateMask;
+		internal	string    pszText;
 		internal	int       cchTextMax;
 		internal	int       iImage;
 		internal	int       iSelectedImage;
@@ -641,9 +641,9 @@ namespace System.Windows.Forms
 	[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
 	internal struct TVINSERTSTRUCT
 	{
-		internal int hParent;
-		internal int hInsertAfter;
-		internal TVITEM   item;
+		internal IntPtr hParent;
+		internal IntPtr hInsertAfter;
+		internal TVITEM item;
     }
 	#endregion
 

+ 2 - 2
mcs/class/System.Windows.Forms/System.Windows.Forms/win32functions.cs

@@ -254,8 +254,8 @@ namespace System.Windows.Forms{
 		internal static extern int SendMessage(IntPtr hWnd, RebarMessages msg, int wParam, ref REBARBANDINFO lParam);
 		[DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
 		internal static extern void SendMessage(IntPtr hWnd, TreeViewMessages msg, int wParam, ref TVITEM lParam);
-		[DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
-		internal static extern void SendMessage(IntPtr hWnd, TreeViewMessages msg, int wParam, ref TVINSERTSTRUCT lParam);
+		[DllImport("user32.dll", CharSet=CharSet.Ansi)]
+		internal static extern int SendMessage(IntPtr hWnd, TreeViewMessages msg, int wParam, ref TVINSERTSTRUCT lParam);
 		[DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
 		internal static extern void SendMessage(IntPtr hWnd, TreeViewMessages msg, int wParam, ref TVSORTCB lParam);
 		[DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]