📄 hyperlink.cpp
字号:
// HyperLink.cpp : implementation file
///////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "HyperLink.h"
// DLL Instance
extern HINSTANCE m_hInst;
extern HCURSOR m_hHandCur;
///////////////////////////////////////////////////////////////////
// CHyperLink
CHyperLink::CHyperLink()
{
// 基本属性
m_bUnderLine = TRUE;
m_bMouseHover = FALSE;
// 文字的几种颜色
m_rgbLink = RGB(0, 0, 255);
m_rgbHover = RGB(255, 0, 0);
m_rgbActive = RGB(255, 0, 0);
}
CHyperLink::~CHyperLink()
{
}
BEGIN_MESSAGE_MAP(CHyperLink, CStatic)
//{{AFX_MSG_MAP(CHyperLink)
ON_WM_NCHITTEST()
ON_WM_CTLCOLOR_REFLECT()
ON_WM_MOUSEMOVE()
ON_WM_SETCURSOR()
ON_WM_LBUTTONDOWN()
ON_WM_KILLFOCUS()
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//////////////////////////////////////////////////////////////////
// CHyperLink message handlers
void CHyperLink::PreSubclassWindow()
{
CStatic::PreSubclassWindow();
if( m_bUnderLine )
{
LOGFONT lgFont;
CFont * lpFont = GetFont();
if(lpFont != NULL)
{
lpFont->GetLogFont(&lgFont);
lgFont.lfUnderline = TRUE;
m_ftFont.CreateFontIndirect(&lgFont);
CStatic::SetFont(&m_ftFont);
}
}
}
void CHyperLink::SetFont(CFont * lpFont, BOOL bRedraw)
{
if(m_bUnderLine && lpFont != NULL)
{
// 删除旧有的Font
m_ftFont.DeleteObject();
m_ftFont.m_hObject = NULL;
// 创建新的Font
LOGFONT lgFont;
lpFont->GetLogFont(&lgFont);
lgFont.lfUnderline = TRUE;
m_ftFont.CreateFontIndirect(&lgFont);
}
// 设置新的字体
CStatic::SetFont(lpFont, bRedraw);
}
HBRUSH CHyperLink::CtlColor(CDC * lpDC, UINT nCtlColor)
{
if(::GetFocus() == m_hWnd)
lpDC->SetTextColor(m_rgbActive);
else if( m_bMouseHover )
lpDC->SetTextColor(m_rgbHover);
else
lpDC->SetTextColor(m_rgbLink);
// 设置文字方式
lpDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
UINT CHyperLink::OnNcHitTest(CPoint)
{
return HTCLIENT;
}
BOOL CHyperLink::OnSetCursor(CWnd * lpWnd, UINT nHitTest, UINT message)
{
// 设置光标
::SetCursor(m_hHandCur);
return TRUE;
}
void CHyperLink::OnLButtonDown(UINT nFlags, CPoint point)
{
CStatic::OnLButtonDown(nFlags, point);
SetFocus(); Invalidate(TRUE);
}
void CHyperLink::OnKillFocus(CWnd * lpNewWnd)
{
CStatic::OnKillFocus(lpNewWnd);
Invalidate(TRUE);
}
void CHyperLink::OnMouseMove(UINT nFlags, CPoint point)
{
// 调用Button默认入口
CStatic::OnMouseMove(nFlags, point);
// 调用Timer,来跟踪Hover事件
if( !m_bMouseHover )
{
SetTimer(0x0001, 50, NULL);
m_bMouseHover = TRUE;
Invalidate(TRUE);
}
}
void CHyperLink::OnTimer(UINT nIDEvent)
{
if( m_bMouseHover )
{
POINT myPos;
GetCursorPos(&myPos);
RECT rtRect;
GetWindowRect(&rtRect);
if( !PtInRect(&rtRect, myPos) )
{
KillTimer(0x0001);
m_bMouseHover = FALSE;
Invalidate(TRUE);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -