📄 01_9_12_14.asp.html
字号:
</td></tr></table><table width=100% ><tr><td class=a14>
DECLARE_MESSAGE_MAP()</td></tr></table><table width=100% ><tr><td class=a14>
private:</td></tr></table><table width=100% ><tr><td class=a14>
BOOL m_bcaptured; //捕捉鼠标移动</td></tr></table><table width=100% ><tr><td class=a14>
COLORREF m_clickedtextcor; //单击超联接后文本的颜色</td></tr></table><table width=100% ><tr><td class=a14>
COLORREF m_moveontextcor; //鼠标移动到超联接时的文本的颜色</td></tr></table><table width=100% ><tr><td class=a14>
COLORREF m_ordinarytextcor; //未激活超联接时文本的颜色</td></tr></table><table width=100% ><tr><td class=a14>
LOGFONT m_lf; </td></tr></table><table width=100% ><tr><td class=a14>
CFont m_font; //超联接上的文本的字体</td></tr></table><table width=100% ><tr><td class=a14>
};</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table>
<table width=100% >
<tr>
<td class=a14><b> 二、为类编写实现文件 </b></td>
</tr>
</table>
<table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr>
<td class=a14> 在类的两个重载构造函数中完成类的初始化工作 </td>
</tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
CSuperLinkCtrl::CSuperLinkCtrl()</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
m_bClicked=FALSE; </td></tr></table><table width=100% ><tr><td class=a14>
m_bcaptured=FALSE;</td></tr></table><table width=100% ><tr><td class=a14>
m_clickedtextcor=RGB(0,255,255);</td></tr></table><table width=100% ><tr><td class=a14>
m_moveontextcor=RGB(0,255,0);</td></tr></table><table width=100% ><tr><td class=a14>
m_ordinarytextcor=RGB(0,0,255);</td></tr></table><table width=100% ><tr><td class=a14>
m_crText=m_ordinarytextcor; </td></tr></table><table width=100% ><tr><td class=a14>
// 设置初始化字体颜色</td></tr></table><table width=100% ><tr><td class=a14>
::GetObject((HFONT)GetStockObject</td></tr></table><table width=100% ><tr><td class=a14>
(DEFAULT_GUI_FONT),sizeof(m_lf),&m_lf); </td></tr></table><table width=100% ><tr><td class=a14>
//取得当前的缺省字体</td></tr></table><table width=100% ><tr><td class=a14>
m_lf.lfUnderline = TRUE; </td></tr></table><table width=100% ><tr><td class=a14>
//为当前缺省字体加入下划线</td></tr></table><table width=100% ><tr><td class=a14>
BOOL bCreated = m_font.CreateFontIndirect(&m_lf); </td></tr></table><table width=100% ><tr><td class=a14>
// 创建超联接字体</td></tr></table><table width=100% ><tr><td class=a14>
ASSERT(bCreated);</td></tr></table><table width=100% ><tr><td class=a14>
m_hCursor=NULL; </td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
CSuperLinkCtrl::CSuperLinkCtrl(COLORREF</td></tr></table><table width=100% ><tr><td class=a14>
clickedtextcor,COLORREF </td></tr></table><table width=100% ><tr><td class=a14>
moveontextcor,COLORREF ordinarytextcor)</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
m_bClicked=FALSE;</td></tr></table><table width=100% ><tr><td class=a14>
m_bcaptured=FALSE;</td></tr></table><table width=100% ><tr><td class=a14>
m_clickedtextcor=clickedtextcor;</td></tr></table><table width=100% ><tr><td class=a14>
m_moveontextcor=moveontextcor;</td></tr></table><table width=100% ><tr><td class=a14>
m_ordinarytextcor=ordinarytextcor;</td></tr></table><table width=100% ><tr><td class=a14>
m_crText=m_ordinarytextcor; </td></tr></table><table width=100% ><tr><td class=a14>
// 设置初始化字体颜色</td></tr></table><table width=100% ><tr><td class=a14>
::GetObject((HFONT)GetStockObject</td></tr></table><table width=100% ><tr><td class=a14>
(DEFAULT_GUI_FONT),sizeof(m_lf),&m_lf); </td></tr></table><table width=100% ><tr><td class=a14>
//取得当前的缺省字体</td></tr></table><table width=100% ><tr><td class=a14>
m_lf.lfUnderline = TRUE; </td></tr></table><table width=100% ><tr><td class=a14>
//为当前缺省字体加入下划线</td></tr></table><table width=100% ><tr><td class=a14>
BOOL bCreated = m_font.CreateFontIndirect(&m_lf); </td></tr></table><table width=100% ><tr><td class=a14>
// 创建超联接字体</td></tr></table><table width=100% ><tr><td class=a14>
ASSERT(bCreated);</td></tr></table><table width=100% ><tr><td class=a14>
m_hCursor=NULL;</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
在类的析构函数中删除在类的构造函数中创建的字体</td></tr></table><table width=100% ><tr><td class=a14>
CSuperLinkCtrl::~CSuperLinkCtrl()</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
m_font.DeleteObject(); </td></tr></table><table width=100% ><tr><td class=a14>
//删除在类的构造函数中创建的字体</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
用classwizard为类加入如下消息映射并编写消息映射函数</td></tr></table><table width=100% ><tr><td class=a14>
BEGIN_MESSAGE_MAP(CSuperLinkCtrl, CStatic)</td></tr></table><table width=100% ><tr><td class=a14>
//{{AFX_MSG_MAP(CSuperLinkCtrl)</td></tr></table><table width=100% ><tr><td class=a14>
ON_WM_CTLCOLOR_REFLECT()</td></tr></table><table width=100% ><tr><td class=a14>
ON_WM_LBUTTONDOWN()</td></tr></table><table width=100% ><tr><td class=a14>
ON_WM_SETCURSOR()</td></tr></table><table width=100% ><tr><td class=a14>
ON_WM_MOUSEMOVE()</td></tr></table><table width=100% ><tr><td class=a14>
//}}AFX_MSG_MAP</td></tr></table><table width=100% ><tr><td class=a14>
END_MESSAGE_MAP()</td></tr></table><table width=100% ><tr><td class=a14>
编写消息映射函数CtlColor()用于实现超联接文本颜色的变化</td></tr></table><table width=100% ><tr><td class=a14>
HBRUSH CSuperLinkCtrl::CtlColor(CDC* pDC, UINT nCtlColor) </td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
// TODO: Change any attributes of the DC here</td></tr></table><table width=100% ><tr><td class=a14>
if (CTLCOLOR_STATIC == nCtlColor)</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
pDC->SelectObject(&m_font);</td></tr></table><table width=100% ><tr><td class=a14>
pDC->SetTextColor(m_crText);</td></tr></table><table width=100% ><tr><td class=a14>
pDC->SetBkMode(TRANSPARENT);</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
HBRUSH hBrush = ::CreateSolidBrush</td></tr></table><table width=100% ><tr><td class=a14>
(GetSysColor(COLOR_3DFACE)); //创建一个刷子句柄</td></tr></table><table width=100% ><tr><td class=a14>
return hBrush; // 返回一个用来画控件背景的刷子句柄</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
实现鼠标按下左键消息</td></tr></table><table width=100% ><tr><td class=a14>
void CSuperLinkCtrl::OnLButtonDown</td></tr></table><table width=100% ><tr><td class=a14>
(UINT nFlags, CPoint point) </td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
// TODO: Add your message handler </td></tr></table><table width=100% ><tr><td class=a14>
code here and/or call default</td></tr></table><table width=100% ><tr><td class=a14>
m_bClicked=TRUE; </td></tr></table><table width=100% ><tr><td class=a14>
m_crText=m_clickedtextcor; //设置超联接文本的颜色</td></tr></table><table width=100% ><tr><td class=a14>
RedrawWindow(); // 重画控件实现超联接文本颜色的变化</td></tr></table><table width=100% ><tr><td class=a14>
if(m_linktext!="") </td></tr></table><table width=100% ><tr><td class=a14>
//如果设置了超联接的地址则调用</td></tr></table><table width=100% ><tr><td class=a14>
ShellExecute函数实现超联接</td></tr></table><table width=100% ><tr><td class=a14>
ShellExecute(NULL, "open", m_linktext,</td></tr></table><table width=100% ><tr><td class=a14>
NULL, NULL, SW_SHOWNORMAL); </td></tr></table><table width=100% ><tr><td class=a14>
CStatic::OnLButtonDown(nFlags, point);</td></tr></table><table width=100% ><tr><td class=a14>
// 调用基类响应函数</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
设置超联接文本上的鼠标形状的消息映射函数</td></tr></table><table width=100% ><tr><td class=a14>
BOOL CSuperLinkCtrl::OnSetCursor(CWnd* pWnd, </td></tr></table><table width=100% ><tr><td class=a14>
UINT nHitTest, UINT message) </td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
// TODO: Add your message handler code here and/or call default</td></tr></table><table width=100% ><tr><td class=a14>
if (m_hCursor) // 如果已取得光标句柄则设置新的鼠标形状</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
::SetCursor(m_hCursor);</td></tr></table><table width=100% ><tr><td class=a14>
return TRUE;</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
return CStatic::OnSetCursor(pWnd, nHitTest, message);</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
设置超联接文本上的光标句柄</td></tr></table><table width=100% ><tr><td class=a14>
void CSuperLinkCtrl::SetLinkCursor(HCURSOR hCursor)</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
m_hCursor = hCursor;</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
响应鼠标移动消息</td></tr></table><table width=100% ><tr><td class=a14>
void CSuperLinkCtrl::OnMouseMove</td></tr></table><table width=100% ><tr><td class=a14>
(UINT nFlags, CPoint point) </td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
// TODO: Add your message handler </td></tr></table><table width=100% ><tr><td class=a14>
code here and/or call default</td></tr></table><table width=100% ><tr><td class=a14>
SetCapture(); // 捕捉鼠标</td></tr></table><table width=100% ><tr><td class=a14>
POINT mpoint; </td></tr></table><table width=100% ><tr><td class=a14>
GetCursorPos(&mpoint); // 取得当前鼠标位置</td></tr></table><table width=100% ><tr><td class=a14>
CRect rect;</td></tr></table><table width=100% ><tr><td class=a14>
GetWindowRect(&rect); // 取得控件的窗口大小</td></tr></table><table width=100% ><tr><td class=a14>
if(!rect.PtInRect(mpoint)) // 判断鼠标是否在控件的窗口内</td></tr></table><table width=100% ><tr><td class=a14>
{ // 鼠标不在控件的窗口内</td></tr></table><table width=100% ><tr><td class=a14>
m_bcaptured=FALSE;</td></tr></table><table width=100% ><tr><td class=a14>
ReleaseCapture(); // 释放鼠标捕捉</td></tr></table><table width=100% ><tr><td class=a14>
MouseLeave(); // 调用mouseleave()函数</td></tr></table><table width=100% ><tr><td class=a14>
return;</td></tr></table><table width=100% ><tr><td class=a14>
} </td></tr></table><table width=100% ><tr><td class=a14>
// 鼠标在控件的窗口内</td></tr></table><table width=100% ><tr><td class=a14>
if(m_bcaptured) // 如果鼠标在窗口内且已经被捕捉则返回</td></tr></table><table width=100% ><tr><td class=a14>
return;</td></tr></table><table width=100% ><tr><td class=a14>
m_bcaptured=TRUE;</td></tr></table><table width=100% ><tr><td class=a14>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -