📄 tristatetreeview.cs
字号:
// ---------------------------------------------------------------------------------------------
#region // Copyright (c) 2004-2005, SIL International. All Rights Reserved.
// <copyright from='2004' to='2005' company='SIL International'>
// Copyright (c) 2004-2005, SIL International. All Rights Reserved.
//
// Distributable under the terms of either the Common Public License or the
// GNU Lesser General Public License, as specified in the LICENSING.txt file.
// </copyright>
#endregion
//
// File: TriStateTreeView.cs
// Responsibility: Eberhard Beilharz/Tim Steenwyk
//
// <remarks>
// </remarks>
// ---------------------------------------------------------------------------------------------
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Skybound.VisualStyles;
namespace SIL.FieldWorks.Common.Controls
{
/// ----------------------------------------------------------------------------------------
/// <summary>
/// A tree view with tri-state check boxes
/// </summary>
/// <remarks>
/// REVIEW: If we want to have icons in addition to the check boxes, we probably have to
/// set the icons for the check boxes in a different way. The windows tree view control
/// can have a separate image list for states.
/// </remarks>
/// ----------------------------------------------------------------------------------------
public class TriStateTreeView : TreeView
{
private System.Windows.Forms.ImageList m_TriStateImages;
private System.ComponentModel.IContainer components;
/// <summary>
/// The check state
/// </summary>
/// <remarks>The states corresponds to image index</remarks>
public enum CheckState
{
/// <summary>greyed out</summary>
GreyChecked = 0,
/// <summary>Unchecked</summary>
Unchecked = 1,
/// <summary>Checked</summary>
Checked = 2,
}
#region Redefined Win-API structs and methods
/// <summary></summary>
[StructLayout(LayoutKind.Sequential, Pack=1)]
public struct TV_HITTESTINFO
{
/// <summary>Client coordinates of the point to test.</summary>
public Point pt;
/// <summary>Variable that receives information about the results of a hit test.</summary>
public TVHit flags;
/// <summary>Handle to the item that occupies the point.</summary>
public IntPtr hItem;
}
/// <summary>Hit tests for tree view</summary>
[Flags]
public enum TVHit
{
/// <summary>In the client area, but below the last item.</summary>
NoWhere = 0x0001,
/// <summary>On the bitmap associated with an item.</summary>
OnItemIcon = 0x0002,
/// <summary>On the label (string) associated with an item.</summary>
OnItemLabel = 0x0004,
/// <summary>In the indentation associated with an item.</summary>
OnItemIndent = 0x0008,
/// <summary>On the button associated with an item.</summary>
OnItemButton = 0x0010,
/// <summary>In the area to the right of an item. </summary>
OnItemRight = 0x0020,
/// <summary>On the state icon for a tree-view item that is in a user-defined state.</summary>
OnItemStateIcon = 0x0040,
/// <summary>On the bitmap or label associated with an item. </summary>
OnItem = (OnItemIcon | OnItemLabel | OnItemStateIcon),
/// <summary>Above the client area. </summary>
Above = 0x0100,
/// <summary>Below the client area.</summary>
Below = 0x0200,
/// <summary>To the right of the client area.</summary>
ToRight = 0x0400,
/// <summary>To the left of the client area.</summary>
ToLeft = 0x0800
}
/// <summary></summary>
public enum TreeViewMessages
{
/// <summary></summary>
TV_FIRST = 0x1100, // TreeView messages
/// <summary></summary>
TVM_HITTEST = (TV_FIRST + 17),
}
/// <summary></summary>
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int SendMessage(IntPtr hWnd, TreeViewMessages msg, int wParam, ref TV_HITTESTINFO lParam);
#endregion
#region Constructor and destructor
/// ------------------------------------------------------------------------------------
/// <summary>
/// Initializes a new instance of the <see cref="TriStateTreeView"/> class.
/// </summary>
/// ------------------------------------------------------------------------------------
public TriStateTreeView()
{
// This call is required by the Windows.Forms Form Designer.
InitializeComponent();
if (ThemeInformation.VisualStylesEnabled)
{
Bitmap bmp = new Bitmap(m_TriStateImages.ImageSize.Width, m_TriStateImages.ImageSize.Height);
Rectangle rc = new Rectangle(0, 0, bmp.Width, bmp.Height);
Graphics graphics = Graphics.FromImage(bmp);
ThemePaint.Draw(graphics, this, ThemeClasses.Button, ThemeParts.ButtonCheckBox,
ThemeStates.CheckBoxCheckedDisabled, rc, rc);
m_TriStateImages.Images[0] = bmp;
ThemePaint.Draw(graphics, this, ThemeClasses.Button, ThemeParts.ButtonCheckBox,
ThemeStates.CheckBoxUncheckedNormal, rc, rc);
m_TriStateImages.Images[1] = bmp;
ThemePaint.Draw(graphics, this, ThemeClasses.Button, ThemeParts.ButtonCheckBox,
ThemeStates.CheckBoxCheckedNormal, rc, rc);
m_TriStateImages.Images[2] = bmp;
}
ImageList = m_TriStateImages;
ImageIndex = (int)CheckState.Unchecked;
SelectedImageIndex = (int)CheckState.Unchecked;
}
/// -----------------------------------------------------------------------------------
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing"><c>true</c> to release both managed and unmanaged
/// resources; <c>false</c> to release only unmanaged resources.
/// </param>
/// -----------------------------------------------------------------------------------
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#endregion
#region Component Designer generated code
/// -----------------------------------------------------------------------------------
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
/// -----------------------------------------------------------------------------------
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(TriStateTreeView));
this.m_TriStateImages = new System.Windows.Forms.ImageList(this.components);
//
// m_TriStateImages
//
this.m_TriStateImages.ImageSize = new System.Drawing.Size(16, 16);
this.m_TriStateImages.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("m_TriStateImages.ImageStream")));
this.m_TriStateImages.TransparentColor = System.Drawing.Color.Magenta;
}
#endregion
#region Hide no longer appropriate properties from Designer
/// ------------------------------------------------------------------------------------
/// <summary>
///
/// </summary>
/// ------------------------------------------------------------------------------------
[Browsable(false)]
public new bool CheckBoxes
{
get { return base.CheckBoxes; }
set { base.CheckBoxes = value; }
}
/// ------------------------------------------------------------------------------------
/// <summary>
///
/// </summary>
/// ------------------------------------------------------------------------------------
[Browsable(false)]
public new int ImageIndex
{
get { return base.ImageIndex; }
set { base.ImageIndex = value; }
}
/// ------------------------------------------------------------------------------------
/// <summary>
///
/// </summary>
/// ------------------------------------------------------------------------------------
[Browsable(false)]
public new ImageList ImageList
{
get { return base.ImageList; }
set { base.ImageList = value; }
}
/// ------------------------------------------------------------------------------------
/// <summary>
///
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -