1.3.3 小试牛刀--编程(www.cppentry.com)实现写邮件超级链接(4)
⑥ 定义函数SetLinkCursor()和GetLinkCursor(),用于分别设定鼠标的形状和获取鼠标的形状,具体代码如下:
- void CHyperLink::SetLinkCursor(HCURSOR hCursor)
- {
- m_hLinkCursor = hCursor;
- if (m_hLinkCursor == NULL)
- SetDefaultCursor();
- }
-
- HCURSOR CHyperLink::GetLinkCursor() const
- {
- return m_hLinkCursor;
- }
⑦ 定义函数SetUnderline()和GetUnderline(),分别用于设置是否有下划线和获取是否具有下划线,具体代码如下:- //设置下划线
- void CHyperLink::SetUnderline(BOOL bUnderline /* = TRUE */)
- {
- m_bUnderline = bUnderline;
-
- if (::IsWindow(GetSafeHwnd()))
- {
- LOGFONT lf;
- GetFont()->GetLogFont(&lf);
- lf.lfUnderline = m_bUnderline;
- m_Font.DeleteObject();
- m_Font.CreateFontIndirect(&lf);
- SetFont(&m_Font);
- Invalidate();
- }
- }
-
- BOOL CHyperLink::GetUnderline() const
- {
- return m_bUnderline;
- }
⑧ 定义函数SetAutoSize()和GetAutoSize(),分别用于设置和获取是否是自动改变大小,具体代码如下: - void CHyperLink::SetAutoSize(BOOL bAutoSize /* = TRUE */)
- {
- m_bAdjustToFit = bAutoSize;
- if (::IsWindow(GetSafeHwnd()))
- PositionWindow();
- }
-
- BOOL CHyperLink::GetAutoSize() const
- {
- return m_bAdjustToFit;
- }
⑨ 定义函数PositionWindow(),用于调整窗体的大小,具体代码如下: - void CHyperLink::PositionWindow()
- {
- if (!::IsWindow(GetSafeHwnd()) || !m_bAdjustToFit)
- return;
- CRect rect;
- GetWindowRect(rect);
- CWnd *pParent = GetParent();
- if (pParent)
- pParent->ScreenToClient(rect);
- CString strWndText;
- GetWindowText(strWndText);
- CDC *pDC = GetDC();
- CFont *pOldFont = pDC->SelectObject(&m_Font);
- CSize Extent = pDC->GetTextExtent(strWndText);
- pDC->SelectObject(pOldFont);
- ReleaseDC(pDC);
- DWORD dwStyle = GetStyle();
- if (dwStyle & SS_CENTERIMAGE)
- rect.DeflateRect(0, (rect.Height() - Extent.cy)/2);
- else
- rectrect.bottom = rect.top + Extent.cy;
- if (dwStyle & SS_CENTER)
- rect.DeflateRect((rect.Width() - Extent.cx)/2, 0);
- else if (dwStyle & SS_RIGHT)
- rectrect.left = rect.right - Extent.cx;
- else
- rectrect.right = rect.left + Extent.cx;
- SetWindowPos(NULL, rect.left, rect.top,
- rect.Width(), rect.Height(), SWP_NOZORDER);
- }