[置顶] VC++界面编程之--自定义CEdit(编辑框)皮肤
2024-10-15 12:42:34
自定义编辑框是登陆界面经常用到的效果,所以我也模仿站酷网的素材做了个。
要想继承CCustomDraw来完全自绘CEdit控件,是不太可行的方案,因为一旦你完全重绘,那么你需要额外做以下几件事:
1. CEdit光标的处理;
2. 当是密码提示时,需要弹窗提示用户大写打开。
3. 需要处理窗口文字的滚动。
这样一来,工作量会很大,而且效果也不一定好。
我这里想到相对比较好的解决方案是:子窗口+透明边框的CEdit。子窗口负责皮肤的绘制,而CEdit负责处理用户的输入。这样一来,可以利用到CEdit原有的一些特性,以保证原有的效果,并减轻我们开发的工作量。
如下图的密码输入框侦测到用户键盘大写打开时,CEdit也会提示用户大写已经打开:
CEdit制作透明背景的方式是:
1. 子窗口获取WM_CTLCOLOREDIT和WM_CTLCOLORSTATIC这两个消息,当CEdit为ReadOnly时会响应WM_CTLCOLORSTATIC。
2. 在这两个消息中,返回背景画刷。
LRESULT OnCtlColorEdit(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
CDCHandle dc( (HDC) wParam );
dc.SetTextColor(m_clrText);
dc.SetBkMode(TRANSPARENT); // The AtlGetBackgroundBrush will repaint window.
if( m_brEditBack.m_GDIBrush.m_hBrush == NULL )
{
m_brEditBack.GetBackGroundBrush(m_Edit.m_hWnd, m_hWnd);
} return (LRESULT)m_brEditBack.m_GDIBrush.m_hBrush;
}
总结了下,有些Windows控件看起来简单,但要想完全实现其效果,也得花很多功夫。能利用Windows现有的东西就尽量利用,不要一直想着完全重写。
本文源码下载链接:http://download.csdn.net/detail/renstarone/6399469
最新文章
- Duiib 创建不规则窗口(转载)
- Odoo Website 替换 谷歌地图为 百度地图
- Java开发中经典的小实例-(随机产生验证码)
- lnmp重置mysql密码
- JS控制DIV隐藏显示
- XML中五个转义字符
- 安装DirectX SDK (June 2010) 失败(Error Code S1023)(转)
- 如果AlertView输入框为空,则禁止点击确定按钮
- Windows 环境下于虚拟环境安装源码安装 cx_oracle
- 关于struts2的modelDriven
- javaIO流小结(1)
- Linux 文件操作——系统调用和标准I/O库
- ScrollView属性fillViewport解决android布局不能撑满全屏的问题
- 10.30 NFLS-NOIP模拟赛 解题报告
- 【原创】ASP.NET Web开发,实现打印Log日志,步骤详解
- JS封闭函数、闭包、内置对象
- 解析:type t_string is table of varchar2(32767) index by binary_integer
- redis基本类型和使用
- lua -- 商店的数据管理类
- python 迭代器/生成器/迭代对象