📄 superlink.cpp
字号:
// SuperLink.cpp : implementation file
//
#include "stdafx.h"
#include "SuperLink.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSuperLink
CSuperLink::CSuperLink()
{
m_bClicked=FALSE;
m_bcaptured=FALSE;
m_crClicked = RGB(255, 0, 255);
m_crMoveOn = RGB(255, 0, 0);
m_crOrdinary = RGB(0, 0, 255);
m_crText = m_crOrdinary;
::GetObject((HFONT)GetStockObject(DEFAULT_GUI_FONT),sizeof(m_lf),&m_lf);
m_lf.lfUnderline = TRUE;
BOOL bCreated = m_font.CreateFontIndirect(&m_lf);
ASSERT(bCreated);
m_hCursor=NULL;
}
CSuperLink::CSuperLink(COLORREF crClicked, COLORREF crMoveOn, COLORREF crOordinary)
{
m_bClicked=FALSE;
m_bcaptured=FALSE;
m_crClicked = crClicked;
m_crMoveOn = crMoveOn;
m_crOrdinary = crOordinary;
m_crText = m_crOrdinary;
::GetObject((HFONT)GetStockObject(DEFAULT_GUI_FONT),sizeof(m_lf),&m_lf);
m_lf.lfUnderline = TRUE;
BOOL bCreated = m_font.CreateFontIndirect(&m_lf);
ASSERT(bCreated);
m_hCursor=NULL;
}
CSuperLink::~CSuperLink()
{
m_font.DeleteObject();
}
BEGIN_MESSAGE_MAP(CSuperLink, CStatic)
//{{AFX_MSG_MAP(CSuperLink)
ON_WM_LBUTTONDOWN()
ON_WM_SETCURSOR()
ON_WM_MOUSEMOVE()
ON_WM_CTLCOLOR_REFLECT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSuperLink message handlers
HBRUSH CSuperLink::CtlColor(CDC* pDC, UINT nCtlColor)
{
// TODO: Change any attributes of the DC here
if (CTLCOLOR_STATIC == nCtlColor)
{
pDC->SelectObject(&m_font);
pDC->SetTextColor(m_crText);
pDC->SetBkMode(TRANSPARENT);
}
HBRUSH hBrush = ::CreateSolidBrush(GetSysColor(COLOR_3DFACE));
return hBrush;
}
void CSuperLink::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_bClicked=TRUE;
m_crText=m_crClicked;
RedrawWindow();
if(m_linktext!="")
ShellExecute(NULL, "open", m_linktext, NULL, NULL, SW_SHOWNORMAL);
CStatic::OnLButtonDown(nFlags, point);
}
BOOL CSuperLink::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call default
if (m_hCursor)
{
::SetCursor(m_hCursor);
return TRUE;
}
return CStatic::OnSetCursor(pWnd, nHitTest, message);
}
void CSuperLink::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
SetCapture();
POINT mpoint;
GetCursorPos(&mpoint);
CRect rect;
GetWindowRect(&rect);
if(!rect.PtInRect(mpoint))
{
m_bcaptured=FALSE;
ReleaseCapture();
MouseLeave();
return;
}
if(m_bcaptured)
return;
m_bcaptured=TRUE;
MouseEnter();
ReleaseCapture();
CStatic::OnMouseMove(nFlags, point);
}
BOOL CSuperLink::SetLinkAddress(CString strLink)
{
if(strLink.Find("http")!=-1)
m_linktext = strLink;
else if(strLink.Find("@")!=-1)
m_linktext = "mailto:" + strLink;
else
{
MessageBox("Error: wrong superlink format");
m_linktext="";
return FALSE;
}
return TRUE;
}
void CSuperLink::MouseLeave(void)
{
m_crText = m_bClicked ? m_crClicked : m_crOrdinary;
RedrawWindow();
}
void CSuperLink::MouseEnter(void)
{
m_crText = m_bClicked ? m_crClicked : m_crMoveOn;
RedrawWindow();
}
void CSuperLink::SetLinkCursor(HCURSOR hCursor)
{
m_hCursor = hCursor;
}
void CSuperLink::SetSuperLink(BOOL setlink)
{
if (setlink)
ModifyStyle(0,SS_NOTIFY);
else
ModifyStyle(SS_NOTIFY,0);
}
/*
使用方法:
在对话框中创建一个CStatic文本对象,设置其ID为ID_SUPERLINK,为其添加变量m_Link,
类型为CStatic,在该对话框的OnInitDialog()函数中调用:
m_Link.SubclassDlgItem(IDC_SUPERLINK, this);
m_Link.SetSuperLink(TRUE);
m_Link.SetLinkCursor(AfxGetApp()->LoadCursor(IDC_CURSOR));
m_Link.SetLinkAddress("hexuhmn@mail.china.com");
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -