源码说明:美化能获取焦点控件的边框颜色,获取焦点后颜色不同(类似彗星小助手、QQ等软件),支持自定义颜色,支持单独设置各个控件颜色.
实现方法:子类化,在WM_NCPAINT、WM_PAINT等消息自己画出边框
开发环境:VS2005 MFC / 易语言
源码下载:http://download.csdn.net/detail/cometnet/5663673

    1. // SkinEdit.cpp : 实现文件
    2. //
    3. #include "stdafx.h"
    4. #include "SkinEdit.h"
    5. // CSkinEdit
    6. IMPLEMENT_DYNAMIC(CSkinEdit, CEdit)
    7. CSkinEdit::CSkinEdit()
    8. {
    9. m_bTracking=m_bHover=m_bFocus=FALSE;
    10. m_ClientBrush=::CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
    11. m_hOrderBrush=::CreateSolidBrush(GetSysColor(COLOR_WINDOWFRAME));
    12. m_HotOrderBrush1=::CreateSolidBrush(0xFDC860);
    13. m_HotOrderBrush2=::CreateSolidBrush(0xE7AC49);
    14. }
    15. CSkinEdit::~CSkinEdit()
    16. {
    17. DeleteObject(m_ClientBrush);
    18. DeleteObject(m_hOrderBrush);
    19. DeleteObject(m_HotOrderBrush1);
    20. DeleteObject(m_HotOrderBrush2);
    21. }
    22. BEGIN_MESSAGE_MAP(CSkinEdit, CEdit)
    23. ON_WM_NCPAINT()
    24. ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
    25. ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover)
    26. ON_WM_MOUSEMOVE()
    27. ON_WM_SETFOCUS()
    28. ON_WM_KILLFOCUS()
    29. END_MESSAGE_MAP()
    30. // CSkinEdit 消息处理程序
    31. void CSkinEdit::OnMouseMove(UINT nFlags, CPoint point)
    32. {
    33. if (!m_bTracking)
    34. {
    35. TRACKMOUSEEVENT tme;
    36. tme.cbSize = sizeof(tme);
    37. tme.hwndTrack = m_hWnd;
    38. tme.dwFlags = TME_LEAVE | TME_HOVER;
    39. tme.dwHoverTime = 50;
    40. m_bTracking = (bool)_TrackMouseEvent(&tme);
    41. }
    42. CEdit::OnMouseMove(nFlags, point);
    43. }
    44. LRESULT CSkinEdit::OnMouseLeave(WPARAM wParam, LPARAM lParam)
    45. {
    46. m_bTracking = FALSE;
    47. m_bHover=FALSE;
    48. DrawBorder();
    49. return 0;
    50. }
    51. LRESULT CSkinEdit::OnMouseHover(WPARAM wParam, LPARAM lParam)
    52. {
    53. m_bHover=TRUE;
    54. DrawBorder();
    55. return 0;
    56. }
    57. void CSkinEdit::OnSetFocus(CWnd* pOldWnd)
    58. {
    59. CEdit::OnSetFocus(pOldWnd);
    60. m_bFocus=TRUE;
    61. DrawBorder();
    62. }
    63. void CSkinEdit::OnKillFocus(CWnd* pNewWnd)
    64. {
    65. CEdit::OnKillFocus(pNewWnd);
    66. m_bFocus=FALSE;
    67. DrawBorder();
    68. }
    69. void CSkinEdit::OnNcPaint()
    70. {
    71. CEdit::OnNcPaint();
    72. DrawBorder();
    73. }
    74. void CSkinEdit::OnPaint()
    75. {
    76. CEdit::OnPaint();
    77. DrawBorder();
    78. }
    79. void CSkinEdit::DrawBorder()
    80. {
    81. HDC hDC=::GetWindowDC(m_hWnd);
    82. CRect rc;
    83. ::GetWindowRect(m_hWnd,&rc);
    84. rc=CRect(0,0,rc.right-rc.left,rc.bottom-rc.top);
    85. if(m_bHover){
    86. ::FrameRect(hDC,&rc,m_HotOrderBrush1);
    87. rc.InflateRect(-1,-1);
    88. ::FrameRect(hDC,&rc,m_HotOrderBrush2);
    89. }else if(m_bFocus){
    90. ::FrameRect(hDC,&rc,m_ClientBrush);
    91. rc.InflateRect(-1,-1);
    92. ::FrameRect(hDC,&rc,m_HotOrderBrush2);
    93. }else{
    94. ::FrameRect(hDC,&rc,m_ClientBrush);
    95. rc.InflateRect(-1,-1);
    96. ::FrameRect(hDC,&rc,m_hOrderBrush);
    97. }
    98. ::ReleaseDC(m_hWnd,hDC);
    99. }

http://blog.csdn.net/CometNet/article/details/9194751

编辑框等控件边框美化(继承CEdit,然后覆盖OnMouseLeave, OnSetFocus, OnPaint函数即可。原来的CEdit虽然代码不可见,但它也是有句柄的,照样随便画)的更多相关文章

  1. MFC设置静态文本框,编辑框等控件背景和字体颜色

    在MFC类库提供了CWnd::OnCtlColor函数,在工作框架的子窗口被重画时将调用该成员函数.因此可以重载WM_CTLCOLOR消息的响应函数.此函数的原型:afx_msg HBRUSH OnC ...

  2. 好用的编辑框布局控件TdxLayoutControl

    TdxLayoutControl是编辑框的容器,里面的编辑框可以自动对齐,自由拖放,异常方便.

  3. 用MVC的辅助方法自定义了两个控件:“可编辑的下拉框控件”和“文本框日历控件”

    接触MVC也没多长时间,一开始学的时候绝得MVC结构比较清晰.后来入了门具体操作下来感觉MVC控件怎么这么少还不可以像ASP.net form那样拖拽.这样设计界面来,想我种以前没学过JS,Jquer ...

  4. css input checkbox复选框控件 样式美化的多种方案

    checkbox复选框可能是网站中常用的html元素,但大多数人并不满意它的默认样式,这篇文章就讲讲如何实现input checkbox复选框控件 样式美化效果. 资源网站大全 https://55w ...

  5. 编写可编辑的List控件

    今天由于项目的需要,要编写个能编辑的List控件,即双击List控件的表项能修改其中的内容.由于MFC自带的List控件是不能编辑的,所以在网上找了下怎样编写可编辑的CListCtrl控件,基本上都是 ...

  6. 界面美化.CStatic控件的美化(好多系列文章)

    http://www.cnblogs.com/20090802/archive/2010/09/17/1829283.html 静态控件也是比较常用的控件,在VS开发环境中用的应该挺频繁的吧. 其实m ...

  7. 市委组织部考核项目——利用EasyUi中可编辑的DataGrid控件对多行数据进行编辑并提交

    http://blog.csdn.net/cjr15233661143/article/details/19041165 市委组织部考核项目中需要录入原始数据,拿开发区的数据录入举例说明,见下图,需要 ...

  8. win32: 文本编辑框(Edit)控件响应事件

    过去几年,关于文本编辑框(Edit)控件的响应事件,我都是在主程序 while(GetMessage(&messages, NULL, 0, 0)) { ... } 捕获. 总感觉这种方式让人 ...

  9. 重新想象 Windows 8 Store Apps (15) - 控件 UI: 字体继承, Style, ControlTemplate, SystemResource, VisualState, VisualStateManager

    原文:重新想象 Windows 8 Store Apps (15) - 控件 UI: 字体继承, Style, ControlTemplate, SystemResource, VisualState ...

随机推荐

  1. 100.dll调用

    在dll中声明 _declspec(dllexport) ; _declspec(dllexport)void go() { MessageBoxA(, ); } 调用dll HINSTANCE hl ...

  2. rhel5安装 oracle11

    readhat 安装11gr2文档 需要注意的地方:必须关掉的 1,防火墙:2,SElinux . root 用户运行  setup  命令可关防火墙与SElinux 修改网络配置文件,一定要重启此文 ...

  3. 【习题 6-7 UVA - 804】Petri Net Simulation

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟就好 [代码] /* 1.Shoud it use long long ? 2.Have you ever test sever ...

  4. Android Studio - no debuggable applications 的解决的方法

    之前logcat总是无法显示调试应用的信息 曾经我都是卸载重装.后来发如今StackOverflow有一个哥们说的非常对.一次就成功. 原话是这么说的: You also should have To ...

  5. (转)DOS批处理的字符串功能

    批处理有着具有非常强大的字符串处理能力,其功能绝不低于C语言里面的字符串函数集.批处理中可实现的字符串处理功能有:截取字符串内容.替换字符串特定字段.合并字符串.扩充字符串等功能.下面对这些功能一一进 ...

  6. 安装后,挂载c盘失败

    现象: 安装后,window C盘mount失败 错误内容如下: Error mounting: mount exited with exit code 13: ntfs_attr_pread_i: ...

  7. UVA 11090 Going in Cycle!!(Bellman-Ford推断负圈)

    题意:给定一个n个点m条边的加权有向图,求平均权值最小的回路. 思路:使用二分法求解.对于每个枚举值mid,推断每条边权值减去mid后有无负圈就可以. #include<cstdio> # ...

  8. 【Android工具类】验证码倒计时帮助类CountDownButtonHelper的实现

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 我们在做有关短信验证码功能的时候.为了防止用户无休止的获取短信验证码,或者是误操作.造成验证码混乱的情况.我 ...

  9. E11 css hack

    E11      识别\0 { color:red; color:blue \0; } chrome下颜色是红色.IE11是蓝色

  10. 6.4 Android硬件访问服务编写HAL代码

    JNI向上提供本地函数,向下加载HAL文件,并调用HAL的函数: HAL负责访问驱动程序执行硬件操作 JNI和HAL都是用c语言或者C++语言编写的,JNI加载HAL的实质就是使用dlopen加载动态 ...