编辑框等控件边框美化

源码说明:美化能获取焦点控件的边框颜色,获取焦点后颜色不同(类似彗星小助手、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);
}


  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
介绍: 本案例教你如何使用CSkin界面库 在winform平台做出《彗星小助手》的界面效果 本案例实现了部分功能 主要是展现界面的属性设置流程和界面库的使用 更新时间:2014 8 26 更新功能: 1 修复SkinPanel滚动条不显示的问题 2 修复SkinPanel右下边框不显示的问题 3 修复好友列表头像闪烁的一些BUG 4 修复SkinMain异形窗体点击任务栏最小化操作 5 加入内置工具类FastBitmap 此类用来快速Bitmap读写像素 如何使用看:http: bbs cskin net thread 83 1 1 html 6 修复截图控件的未选框双击错误BUG 增加截图控件属性BmpLayerCurrent:控件所截图的图片 7 SkinToolStrip添加BaseItemNorml属性 BaseItem默认背景图 8 修复SkinComboBox下拉框项的细节样式 9 加入SkinFileTansfersContainer控件与SkinFileTransfersItem控件 SkinFileTansfersContainer:文件传输列表容器 这里面内置Add Remove Search等操作ItemList方法 SkinFileTransfersItem:文件传输列表项 用于添加进列表容器 10 SkinToolStrip控件添加BindTabControl 绑定要操作的TabControl 属性 绑定后点击ToolStripButton就可以根据ToolStripButton中的Tag TabPage的Index值 进行切换TabPage 11 优化设计时SkinTabControl略卡的问题 12 SkinTabePage添加属性(BorderColor:边框颜色) 13 修复好友列表闪烁状态下好友被删除 分组依然闪烁 14 SkinButton SkinCheckBox SkinRadioButton添加属性(IsEnabledDraw:是否画禁用状态下的效果 默认true) 15 好友列表添加三个事件: (DownSubItem:用鼠标按下子项时发生) (UpSubItem:用鼠标按下并释放子项时发生) (ClickSubItem:用鼠标单击子项时发生) 16 SkinTabControl添加两个事件: (TabePageClosed:TabPage容器关闭后 ) (TabePageClosing:TabPage容器关闭前 ) 17 加入彗星小助手案例DEMO(不带Html编辑器版本CSkin dll) 注意: 由于部分免费用户无法加入工具箱 经检测是里面的一个Html编辑器控件不兼容的问题 在问题兼容之前 现在分发两个版本(一个:带Html编辑器版本 一个:不带Html编辑器版本) 本案例资源来自:CSkin论坛 http: bbs cskin net">介绍: 本案例教你如何使用CSkin界面库 在winform平台做出《彗星小助手》的界面效果 本案例实现了部分功能 主要是展现界面的属性设置流程和界面库的使用 更新时间:2014 8 26 更新功能: 1 修复SkinPanel滚动条不显示 [更多]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值