?? 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 + -