编辑框等控件边框美化(继承CEdit,然后覆盖OnMouseLeave, OnSetFocus, OnPaint函数即可。原来的CEdit虽然代码不可见,但它也是有句柄的,照样随便画)
源码说明:美化能获取焦点控件的边框颜色,获取焦点后颜色不同(类似彗星小助手、QQ等软件),支持自定义颜色,支持单独设置各个控件颜色.
实现方法:子类化,在WM_NCPAINT、WM_PAINT等消息自己画出边框
开发环境:VS2005 MFC / 易语言
源码下载:http://download.csdn.net/detail/cometnet/5663673
- // SkinEdit.cpp : 实现文件
- //
- #include "stdafx.h"
- #include "SkinEdit.h"
- // CSkinEdit
- IMPLEMENT_DYNAMIC(CSkinEdit, CEdit)
- CSkinEdit::CSkinEdit()
- {
- m_bTracking=m_bHover=m_bFocus=FALSE;
- m_ClientBrush=::CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
- m_hOrderBrush=::CreateSolidBrush(GetSysColor(COLOR_WINDOWFRAME));
- m_HotOrderBrush1=::CreateSolidBrush(0xFDC860);
- m_HotOrderBrush2=::CreateSolidBrush(0xE7AC49);
- }
- CSkinEdit::~CSkinEdit()
- {
- DeleteObject(m_ClientBrush);
- DeleteObject(m_hOrderBrush);
- DeleteObject(m_HotOrderBrush1);
- DeleteObject(m_HotOrderBrush2);
- }
- BEGIN_MESSAGE_MAP(CSkinEdit, CEdit)
- ON_WM_NCPAINT()
- ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
- ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover)
- ON_WM_MOUSEMOVE()
- ON_WM_SETFOCUS()
- ON_WM_KILLFOCUS()
- END_MESSAGE_MAP()
- // CSkinEdit 消息处理程序
- void CSkinEdit::OnMouseMove(UINT nFlags, CPoint point)
- {
- if (!m_bTracking)
- {
- TRACKMOUSEEVENT tme;
- tme.cbSize = sizeof(tme);
- tme.hwndTrack = m_hWnd;
- tme.dwFlags = TME_LEAVE | TME_HOVER;
- tme.dwHoverTime = 50;
- m_bTracking = (bool)_TrackMouseEvent(&tme);
- }
- CEdit::OnMouseMove(nFlags, point);
- }
- LRESULT CSkinEdit::OnMouseLeave(WPARAM wParam, LPARAM lParam)
- {
- m_bTracking = FALSE;
- m_bHover=FALSE;
- DrawBorder();
- return 0;
- }
- LRESULT CSkinEdit::OnMouseHover(WPARAM wParam, LPARAM lParam)
- {
- m_bHover=TRUE;
- DrawBorder();
- return 0;
- }
- void CSkinEdit::OnSetFocus(CWnd* pOldWnd)
- {
- CEdit::OnSetFocus(pOldWnd);
- m_bFocus=TRUE;
- DrawBorder();
- }
- void CSkinEdit::OnKillFocus(CWnd* pNewWnd)
- {
- CEdit::OnKillFocus(pNewWnd);
- m_bFocus=FALSE;
- DrawBorder();
- }
- void CSkinEdit::OnNcPaint()
- {
- CEdit::OnNcPaint();
- DrawBorder();
- }
- void CSkinEdit::OnPaint()
- {
- CEdit::OnPaint();
- DrawBorder();
- }
- void CSkinEdit::DrawBorder()
- {
- HDC hDC=::GetWindowDC(m_hWnd);
- CRect rc;
- ::GetWindowRect(m_hWnd,&rc);
- rc=CRect(0,0,rc.right-rc.left,rc.bottom-rc.top);
- if(m_bHover){
- ::FrameRect(hDC,&rc,m_HotOrderBrush1);
- rc.InflateRect(-1,-1);
- ::FrameRect(hDC,&rc,m_HotOrderBrush2);
- }else if(m_bFocus){
- ::FrameRect(hDC,&rc,m_ClientBrush);
- rc.InflateRect(-1,-1);
- ::FrameRect(hDC,&rc,m_HotOrderBrush2);
- }else{
- ::FrameRect(hDC,&rc,m_ClientBrush);
- rc.InflateRect(-1,-1);
- ::FrameRect(hDC,&rc,m_hOrderBrush);
- }
- ::ReleaseDC(m_hWnd,hDC);
- }
http://blog.csdn.net/CometNet/article/details/9194751
编辑框等控件边框美化(继承CEdit,然后覆盖OnMouseLeave, OnSetFocus, OnPaint函数即可。原来的CEdit虽然代码不可见,但它也是有句柄的,照样随便画)的更多相关文章
- MFC设置静态文本框,编辑框等控件背景和字体颜色
在MFC类库提供了CWnd::OnCtlColor函数,在工作框架的子窗口被重画时将调用该成员函数.因此可以重载WM_CTLCOLOR消息的响应函数.此函数的原型:afx_msg HBRUSH OnC ...
- 好用的编辑框布局控件TdxLayoutControl
TdxLayoutControl是编辑框的容器,里面的编辑框可以自动对齐,自由拖放,异常方便.
- 用MVC的辅助方法自定义了两个控件:“可编辑的下拉框控件”和“文本框日历控件”
接触MVC也没多长时间,一开始学的时候绝得MVC结构比较清晰.后来入了门具体操作下来感觉MVC控件怎么这么少还不可以像ASP.net form那样拖拽.这样设计界面来,想我种以前没学过JS,Jquer ...
- css input checkbox复选框控件 样式美化的多种方案
checkbox复选框可能是网站中常用的html元素,但大多数人并不满意它的默认样式,这篇文章就讲讲如何实现input checkbox复选框控件 样式美化效果. 资源网站大全 https://55w ...
- 编写可编辑的List控件
今天由于项目的需要,要编写个能编辑的List控件,即双击List控件的表项能修改其中的内容.由于MFC自带的List控件是不能编辑的,所以在网上找了下怎样编写可编辑的CListCtrl控件,基本上都是 ...
- 界面美化.CStatic控件的美化(好多系列文章)
http://www.cnblogs.com/20090802/archive/2010/09/17/1829283.html 静态控件也是比较常用的控件,在VS开发环境中用的应该挺频繁的吧. 其实m ...
- 市委组织部考核项目——利用EasyUi中可编辑的DataGrid控件对多行数据进行编辑并提交
http://blog.csdn.net/cjr15233661143/article/details/19041165 市委组织部考核项目中需要录入原始数据,拿开发区的数据录入举例说明,见下图,需要 ...
- win32: 文本编辑框(Edit)控件响应事件
过去几年,关于文本编辑框(Edit)控件的响应事件,我都是在主程序 while(GetMessage(&messages, NULL, 0, 0)) { ... } 捕获. 总感觉这种方式让人 ...
- 重新想象 Windows 8 Store Apps (15) - 控件 UI: 字体继承, Style, ControlTemplate, SystemResource, VisualState, VisualStateManager
原文:重新想象 Windows 8 Store Apps (15) - 控件 UI: 字体继承, Style, ControlTemplate, SystemResource, VisualState ...
随机推荐
- HTML中select的option设置selected="selected"无效的解决方式
今天遇到了一个奇葩问题,写HTML时有个select控件.通过设置option的selected="selected"竟然无效,可是在其它浏览器是能够的.问了一下Google大神, ...
- iOS开发 非常全的三方库、插件、大牛博客等等
UI 下拉刷新 EGOTableViewPullRefresh- 最早的下拉刷新控件. SVPullToRefresh- 下拉刷新控件. MJRefresh- 仅需一行代码就可以为UITableVie ...
- Java BlockingQueue Example(如何使用阻塞队列实现生产者-消费者问题)
Today we will look into Java BlockingQueue. java.util.concurrent.BlockingQueue is a java Queue that ...
- 洛谷—— P1168 中位数
https://www.luogu.org/problem/show?pid=1168 题目描述 给出一个长度为N的非负整数序列A[i],对于所有1 ≤ k ≤ (N + 1) / 2,输出A[1], ...
- C#自定义配置文件节的实现
1.配置文件:(注意configSections必须放在最上面否则会报错) <?xml version="1.0" encoding="utf-8" ?& ...
- Debian 上创建新的用户
Debian 上创建新的用户 使用Gnome的窗口界面创建 使用Linux的命令创建 添加用户: useradd -d /home/your_username -m your_username 添加密 ...
- [spark]spark 编程教程
参考: 英文:https://spark.apache.org/docs/latest/programming-guide.html 中文:http://www.cnblogs.com/lujin ...
- ocx 中使用CImage和CComPtr
#include <atlimage.h> using namespace ATL;
- Android 各个版本号WebView
转载请注明出处 http://blog.csdn.net/typename/ powered by miechal zhao : miechalzhao@gmail.com 前言: 依据Googl ...
- 【C++竞赛 C】yyy的数学公式
时间限制:1s 内存限制:32MB 问题描述 yyy遇到了一个数学问题如下: S_n=∑F(i) 其中F(i)表示i的最大奇因数 yyy的数学非常好,很快就得到了结果.现在他把问题交给你,你能解决吗? ...