在前一个帖子的回复里,有人问我是否有API直接支持这个效果,虽然我那个时候不是很清楚,但还是做了一点工作,在网上小找了一番,还真让我找到了。
原来,从XP开始,Windows就已经支持这样的效果了,可以通过发送一个EM_SETCUEBANNER消息来设置水印文字。
原文可以参考这里:http://www.codeproject.com/kb/edit/cueprovider.aspx(英文)
使用这个方法可以让问题变得非常简单,除掉API的声明,只用1行代码就可以搞定了,并且可以完美地解决ComboBox中的两个BUG。
SendMessage(_editHandle, EM_SETCUEBANNER, (IntPtr)1, "水印文字");
不过,简单是要有牺牲的。如果对水印效果没有太多的要求倒也无所谓,但如果要实现象文字位置、颜色、图片这样的功能,那就一定得DIY了。
另外,使用EM_SETCUEBANNER还有一个限制,就是只能在单行的TextBox上使用,其它控件是不能用的。关于这个消息的具体说明,可以参考MSDN里的相关内容
修改了上一篇文章中提供的源代码,可以体验一下Win32和DIY的区别,点击这里下载
posted on 2009-08-20 14:32  一风  阅读(922)  评论(3编辑  收藏  举报