zoukankan      html  css  js  c++  java
  • [置顶] VC++界面编程之--自定义CEdit(编辑框)皮肤

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

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

  • 相关阅读:
    OFDM系统中频域同步技术及FPGA实现
    SystemVerilog的挑战和机遇
    基础知识要牢固..复习复习,再复习
    样式在.net下测试不成功.附解决办法
    学习.net2.0的网站
    08年又快结束了..抱怨下!~
    今天去面试.net开发,感想
    在b/s开发中经常用到的javaScript技术
    淘宝"新版"首页
    Ajax技术简单入门
  • 原文地址:https://www.cnblogs.com/pangblog/p/3370792.html
Copyright © 2011-2022 走看看