/*******************************************************************************
* Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential
* 类的信息:
* 1.程序名称:NativeMethods.cs
* 2.功能描述:
* 编辑履历:
* 作者 日期 版本 修改内容
* 陈晓野 2014/09/04 1.00 新建
*******************************************************************************/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Security.Permissions;
namespace Dongke.IBOSS.PRD.Basics.BaseControls
{
///
/// CodeProject.com "Simple pop-up control" "http://www.codeproject.com/cs/miscctrl/simplepopup.asp".
/// Represents a Windows combo box control with a custom popup control attached.
///
[ToolboxBitmap(typeof(System.Windows.Forms.ComboBox)), ToolboxItem(true), ToolboxItemFilter("System.Windows.Forms"), Description("Displays an editable text box with a drop-down list of permitted values.")]
public abstract partial class PopupComboBox : DKComboBox
{
///
/// Initializes a new instance of the class.
///
public PopupComboBox()
{
InitializeComponent();
base.DropDownHeight = base.DropDownWidth = 1;
base.IntegralHeight = false;
}
///
/// The pop-up wrapper for the dropDownControl.
/// Made PROTECTED instead of PRIVATE so descendent classes can set its Resizable property.
/// Note however the pop-up properties must be set after the dropDownControl is assigned, since this
/// popup wrapper is recreated when the dropDownControl is assigned.
///
protected Popup dropDown;
private Control dropDownControl;
///
/// Gets or sets the drop down control.
///
/// The drop down control.
public Control DropDownControl
{
get
{
return dropDownControl;
}
set
{
if (dropDownControl == value)
return;
dropDownControl = value;
dropDown = new Popup(value);
}
}
///
/// Shows the drop down.
///
public virtual void ShowDropDown()
{
if (dropDown != null)
{
dropDown.Show(this);
}
}
///
/// Hides the drop down.
///
public virtual void HideDropDown()
{
if (dropDown != null)
{
dropDown.Hide();
}
}
///
/// Processes Windows messages.
///
/// The Windows to process.
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
protected override void WndProc(ref Message m)
{
if (m.Msg == (NativeMethods.WM_REFLECT + NativeMethods.WM_COMMAND))
{
if (NativeMethods.HIWORD(m.WParam) == NativeMethods.CBN_DROPDOWN)
{
// Blocks a redisplay when the user closes the control by clicking
// on the combobox.
TimeSpan TimeSpan = DateTime.Now.Subtract(dropDown.LastClosedTimeStamp);
if (TimeSpan.TotalMilliseconds > 500)
ShowDropDown();
return;
}
}
base.WndProc(ref m);
}
#region " Unused Properties "
/// This property is not relevant for this class.
/// This property is not relevant for this class.
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)]
public new int DropDownWidth
{
get { return base.DropDownWidth; }
set { base.DropDownWidth = value; }
}
/// This property is not relevant for this class.
/// This property is not relevant for this class.
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)]
public new int DropDownHeight
{
get { return base.DropDownHeight; }
set
{
dropDown.Height = value;
base.DropDownHeight = value;
}
}
/// This property is not relevant for this class.
/// This property is not relevant for this class.
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)]
public new bool IntegralHeight
{
get { return base.IntegralHeight; }
set { base.IntegralHeight = value; }
}
/// This property is not relevant for this class.
/// This property is not relevant for this class.
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)]
public new ObjectCollection Items
{
get { return base.Items; }
}
/// This property is not relevant for this class.
/// This property is not relevant for this class.
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)]
public new int ItemHeight
{
get { return base.ItemHeight; }
set { base.ItemHeight = value; }
}
#endregion
}
}