⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hyperlink.cpp

📁 对c++中的各种ui对象进行封装
💻 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 + -