自定义编辑框是登陆界面经常用到的效果,所以我也模仿站酷网的素材做了个

要想继承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

最新文章

  1. Duiib 创建不规则窗口(转载)
  2. Odoo Website 替换 谷歌地图为 百度地图
  3. Java开发中经典的小实例-(随机产生验证码)
  4. lnmp重置mysql密码
  5. JS控制DIV隐藏显示
  6. XML中五个转义字符
  7. 安装DirectX SDK (June 2010) 失败(Error Code S1023)(转)
  8. 如果AlertView输入框为空,则禁止点击确定按钮
  9. Windows 环境下于虚拟环境安装源码安装 cx_oracle
  10. 关于struts2的modelDriven
  11. javaIO流小结(1)
  12. Linux 文件操作——系统调用和标准I/O库
  13. ScrollView属性fillViewport解决android布局不能撑满全屏的问题
  14. 10.30 NFLS-NOIP模拟赛 解题报告
  15. 【原创】ASP.NET Web开发,实现打印Log日志,步骤详解
  16. JS封闭函数、闭包、内置对象
  17. 解析:type t_string is table of varchar2(32767) index by binary_integer
  18. redis基本类型和使用
  19. lua -- 商店的数据管理类
  20. python 迭代器/生成器/迭代对象

热门文章

  1. 在linux的shell里访问一个URL
  2. 解决Jsoup网页抓取过程中需要cookie的问题
  3. mybatis中的变量#与$
  4. webdriver(python)学习笔记四——定位一组元素
  5. codeforces 682C Alyona and the Tree DFS
  6. HDU-1438 钥匙计数之一
  7. 一个FragmentActivity多个Fragment的生命周期事件记录
  8. Oracle中错误代码ORA-02292 违反了完整性约束条件解决
  9. Android和iOS隐藏状态条
  10. [CODEVS1697]⑨要写信