关于透明编辑框的做法,网上已有不少,大都实现复杂,且效果不好。
主要响应三个消息即可实现透明效果:WM_CTLCOLOR、WM_NCPAINT、EN_CHANGE。
通过响应WM_CTLCOLOR做两件事情:
1、设置绘制dc的背景模式为透明;
2、返回背景画刷;
由于1,所以必须在EN_CHANGE响应函数中刷新编辑框控件;
由于2,系统编辑框绘制客户区和非客户区均会使用该画刷,所以必须在WM_NCPAINT响应函数中自行绘制边框;
剩下的事情便是取得编辑框在父窗口区域的背景,将其转换成画刷。
效果图如下:
详见源代码:http://download.youkuaiyun.com/source/3005544
用此办法还可实现编辑框文本为空时显示提示文本的功能,下篇再介绍。