/******************************************************************************* * 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 } }