📄 hotedit.cpp
字号:
// HotEdit.cpp : implementation file
//
#include "stdafx.h"
#include "HotEdit.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CHotEdit
CHotEdit::CHotEdit()
{
m_clr3DFace = GetSysColor(COLOR_3DFACE);
m_clr3DLight = GetSysColor(COLOR_3DLIGHT);
m_clr3DHilight = GetSysColor(COLOR_3DHILIGHT);
m_clr3DShadow = GetSysColor(COLOR_3DSHADOW);
m_clr3DDkShadow = GetSysColor(COLOR_3DDKSHADOW);
m_fGotFocus = false;
m_fTimerSet = false;
}
CHotEdit::~CHotEdit()
{
}
BEGIN_MESSAGE_MAP(CHotEdit, CEdit)
//{{AFX_MSG_MAP(CHotEdit)
ON_WM_PAINT()
ON_WM_SETFOCUS()
ON_WM_KILLFOCUS()
ON_WM_MOUSEMOVE()
ON_WM_TIMER()
ON_WM_NCMOUSEMOVE()
ON_WM_SYSCOLORCHANGE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CHotEdit message handlers
void CHotEdit::OnPaint()
{
Default();
if (m_fGotFocus) {
DrawBorder();
} else {
DrawBorder(false);
}
}
void CHotEdit::OnSetFocus(CWnd* pOldWnd)
{
CEdit::OnSetFocus(pOldWnd);
m_fGotFocus = true;
DrawBorder();
}
void CHotEdit::OnKillFocus(CWnd* pNewWnd)
{
CEdit::OnKillFocus(pNewWnd);
m_fGotFocus = false;
DrawBorder(false);
}
void CHotEdit::OnMouseMove(UINT nFlags, CPoint point)
{
if (!m_fGotFocus)
{
//尚未获得输入焦点
if (!m_fTimerSet)
{
//Timer没有启动
DrawBorder();
//绘制边界
SetTimer(1, 10, NULL);
//启动时钟Timer
m_fTimerSet = true;
}
}
CEdit::OnMouseMove(nFlags, point);
}
void CHotEdit::OnTimer(UINT nIDEvent)
{
POINT pt;
GetCursorPos(&pt);
CRect rcItem;
GetWindowRect(&rcItem);
if(!rcItem.PtInRect(pt))
{
KillTimer(1);
m_fTimerSet = false;
if (!m_fGotFocus)
{
DrawBorder(false);
}
return;
}
CEdit::OnTimer(nIDEvent);
}
void CHotEdit::OnNcMouseMove(UINT nHitTest, CPoint point)
{
if (!m_fTimerSet) {
DrawBorder();
SetTimer(1, 10, NULL);
m_fTimerSet = true;
}
CEdit::OnNcMouseMove(nHitTest, point);
}
void CHotEdit::OnSysColorChange()
{
CEdit::OnSysColorChange();
m_clr3DFace = GetSysColor(COLOR_3DFACE);
m_clr3DLight = GetSysColor(COLOR_3DLIGHT);
m_clr3DHilight = GetSysColor(COLOR_3DHILIGHT);
m_clr3DShadow = GetSysColor(COLOR_3DSHADOW);
m_clr3DDkShadow = GetSysColor(COLOR_3DDKSHADOW);
}
void CHotEdit::DrawBorder(bool fHot)
{
CRect rcItem;
DWORD dwExStyle = GetExStyle();
//获取控件的扩展风格(这是由用户在资源编辑器中设置的)
CDC* pDC = GetDC();
COLORREF clrBlack;
int nBorderWidth = 0;
int nLoop;
GetWindowRect(&rcItem);
ScreenToClient(&rcItem);
//获取控件的区域矩形
clrBlack = RGB(0, 0, 0);
//设置色彩
if (!IsWindowEnabled())
{
fHot = true;
}
if (dwExStyle & WS_EX_DLGMODALFRAME)
{
//模式对话框风格,边界加宽
nBorderWidth += 3;
}
if (dwExStyle & WS_EX_CLIENTEDGE)
{
//客户区边界的风格
nBorderWidth += 2;
}
if (dwExStyle & WS_EX_STATICEDGE && !(dwExStyle & WS_EX_DLGMODALFRAME))
{
nBorderWidth ++;
}
for (nLoop = 0; nLoop < nBorderWidth; nLoop++)
{
pDC->Draw3dRect(rcItem, m_clr3DFace, m_clr3DFace);
//绘制3维矩形
rcItem.DeflateRect(1, 1);
//内缩矩形
}
rcItem.InflateRect(1, 1);
//外扩矩形边界
if (fHot)
{
//如果鼠标位于控件上方,绘制凹形边界,否则为平面边界
if (dwExStyle & WS_EX_CLIENTEDGE)
{
pDC->Draw3dRect(rcItem, m_clr3DDkShadow, m_clr3DLight);
rcItem.InflateRect(1, 1);
pDC->Draw3dRect(rcItem, m_clr3DShadow, m_clr3DHilight);
rcItem.InflateRect(1, 1);
}
if (dwExStyle & WS_EX_STATICEDGE && !(dwExStyle & WS_EX_DLGMODALFRAME))
{
pDC->Draw3dRect(rcItem, m_clr3DShadow, m_clr3DHilight);
rcItem.InflateRect(1, 1);
}
if (dwExStyle & WS_EX_DLGMODALFRAME)
{
pDC->Draw3dRect(rcItem, m_clr3DFace, m_clr3DFace);
rcItem.InflateRect(1, 1);
pDC->Draw3dRect(rcItem, m_clr3DHilight, m_clr3DShadow);
rcItem.InflateRect(1, 1);
pDC->Draw3dRect(rcItem, m_clr3DLight, m_clr3DDkShadow);
}
}
ReleaseDC(pDC);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -