📄 link.cpp
字号:
#include "stdafx.h"
#include "link.h"
#define TIP_ID 1
CLink::CLink()
{
m_bOver = false;
m_hLinkCursor=NULL; //初值设置为NULL,这样如果没有在程序中设置该值,就会使用默认的手形光标
}
CLink::~CLink()
{}
/////////////////////////////////////////////////////////////////////////////
BOOL CLink::DestroyWindow()
{
KillTimer(1);
return CStatic::DestroyWindow();
}
BOOL CLink::PreTranslateMessage(MSG* pMsg)
{
m_ToolTip.RelayEvent(pMsg);
return CStatic::PreTranslateMessage(pMsg);
}
void CLink::PreSubclassWindow()
{
DWORD dwStyle = GetStyle(); //修改属性,使之可接受消息
::SetWindowLong(GetSafeHwnd(), GWL_STYLE, dwStyle | SS_NOTIFY);
SetDefaultCursor(); //设置默认光标为手形光标
CRect rect;
GetClientRect(rect);
m_ToolTip.Create(this);
m_ToolTip.SetDelayTime(100);
m_ToolTip.SetMaxTipWidth(200);
m_ToolTip.AddTool(this, "", rect, TIP_ID); CStatic::PreSubclassWindow();
}
BEGIN_MESSAGE_MAP(CLink, CStatic)
//{{AFX_MSG_MAP(CLink)
ON_WM_CTLCOLOR_REFLECT()
ON_WM_SETCURSOR()
ON_WM_MOUSEMOVE()
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
HBRUSH CLink::CtlColor(CDC* pDC, UINT nCtlColor)
{
if (m_bOver)
pDC->SetTextColor(RGB(255, 0, 0));
else
pDC->SetTextColor( RGB( 0, 0, 238));
pDC->SetBkMode(TRANSPARENT); //设置背景是透明的
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
void CLink::OnMouseMove(UINT nFlags, CPoint point)
{
m_bOver = true;
Invalidate();
SetTimer(1, 100, NULL); //设置一个定时器,用于设置鼠标离开时的颜色
CStatic::OnMouseMove(nFlags, point);
}
void CLink::OnTimer(UINT nIDEvent)
{
CPoint pt(::GetMessagePos());
ScreenToClient(&pt);
CRect rc;
GetClientRect(rc);
if (!rc.PtInRect(pt))
{
m_bOver = false;
KillTimer(1);
Invalidate();
}
CStatic::OnTimer(nIDEvent);
}
BOOL CLink::OnSetCursor(CWnd* /*pWnd*/, UINT /*nHitTest*/, UINT /*message*/)
{
if (m_hLinkCursor) //如果设置了光标,就使用新设置的 光标
{
::SetCursor(m_hLinkCursor);
return true;
}
return false;
}
/////////////////////////////////////////////////////////////////////////////
void CLink::SetToolTipText(CString str)
{
m_ToolTip.UpdateTipText(str,this,TIP_ID);
}
void CLink::SetLinkCursor(HCURSOR hCursor)
{
m_hLinkCursor = hCursor;
if (m_hLinkCursor == NULL)
SetDefaultCursor();
}
void CLink::SetDefaultCursor() //从winhlp32.exe中提取手形光标,用做默认的光标
{
CString str;
::GetWindowsDirectory(str.GetBuffer(MAX_PATH), MAX_PATH);
str.ReleaseBuffer();
str += _T("\\winhlp32.exe");
HMODULE hModule = ::LoadLibrary(str);
if (hModule)
{
HCURSOR hHandCursor = ::LoadCursor(hModule, MAKEINTRESOURCE(106));
if (hHandCursor)
m_hLinkCursor =CopyCursor(hHandCursor);
}
FreeLibrary(hModule);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -