Tag:开源控件 , 源码下载 , 控件开发 , 控件美化 , 窗体换肤 , Skin , QQ表情 , Windows API , GDI+编程 , SQLite , Socket , 控件透明 , 下拉控件 , HTML 解析器 , 图片水印 , ScrollBar(滚动条) , Google Sitemap , 数据库 , SQL , WinForm , P/Invoke , ComboBox , 水印 , Watermark , Control , ComboBox水印控件

 
您的位置: >> 首页 >> C# 视角 >> C# WinForm控件美化扩展系列之给ComboBox加水印

C# WinForm控件美化扩展系列之给ComboBox加水印

2009-07-25  来自:CS 程序员之窗  字体大小:【  
  • 摘要:前面两篇文章介绍了给TextBox 和RichTextBox 加水印,这篇文章将介绍怎样给ComboBox加水印。给ComboBox加水印要比给TextBox和RichTextBox 加水印麻烦很多,因为他是一个复合控件,我们要找到他的输入框才能进行一些操作,下面就介绍怎样来实现这个控件。

    前面两篇文章介绍了给TextBox RichTextBox 加水印,这篇文章将介绍怎样给ComboBox加水印。

ComboBox加水印要比给TextBox RichTextBox 加水印麻烦很多,因为他是一个复合控件,我们要找到他的输入框才能进行一些操作,下面就介绍怎样来实现这个控件。

第一步:我们建一个继承 ComboBox的类,命名为WatermakComboBox

第二步:给这个类添加两个属性,一个是EmptyTextTip,就是当控件没有输入内容和没有焦点的时候显示的提示文本,也就是水印了;另一个是EmptyTextTipColor,就是提示文本的颜色。

第三步:我们先要得到ComboBox中的输入框句柄。我们可以通过API函数 GetComboBoxInfo 得到ComboBox 的信息,打架可以通过 Baidu Google 搜索,了解这个函数的具体信息。得到输入框的句柄后,我们就可以用API函数GetWindowRect 来得到他的大小了,这个我们在绘制水印的时候需要用到的。

第四步:继承 NativeWindow,实现一个EditNativeWindow 类,通过这个类来截取输入框的WM_PAINT消息来绘制水印。在绘制的时候需要用到两个API函数GetDC ReleaseDC

第五步:重写ComboBoxOnHandleCreated OnHandleDestroyed 方法,当控件句柄创建后,我们需要得到ComboBox的信息和截取输入框的消息,来看看代码:
 

protected override void OnHandleCreated(EventArgs e)

        {

            base.OnHandleCreated(e);

            ComboBoxInfo cbi = new ComboBoxInfo();

            cbi.cbSize = Marshal.SizeOf(cbi);

            GetComboBoxInfo(base.Handle, ref cbi);

            _editHandle = cbi.hwndEdit;

            if (DropDownStyle != ComboBoxStyle.DropDownList)

            {

                _editNativeWindow = new EditNativeWindow(this);

            }

        }

 

        protected override void OnHandleDestroyed(EventArgs e)

        {

            base.OnHandleDestroyed(e);

            if (_editNativeWindow != null)

            {

                _editNativeWindow.Dispose();

                _editNativeWindow = null;

            }

        }

通过以上五个步骤,就可以实现给ComboBox 加水印了,完整的代码就到附件列表中下载吧。来看一下效果:
 
 
 

 

声明:

本文版权归作者和CS 程序员之窗所有,欢迎转载,转载必须保留以下版权信息,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

作者:Starts_2000

出处:http://www.csharpwin.com CS 程序员之窗

你可以免费使用或修改提供的源代码,但请保留源代码中的版权信息,详情请查看:

CS程序员之窗开源协议http://www.csharpwin.com/csol.html)。