📄 hyperlinkex.cpp
字号:
// HyperLinkEx.cpp : implementation file
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "HyperLinkEx.h"
/////////////////////////////////////////////////////////////////////////////
// CHyperLinkEx
CHyperLinkEx::CHyperLinkEx()
{
m_nImage = 0;
m_nIconCx = -4;
m_lpImage = NULL;
}
CHyperLinkEx::~CHyperLinkEx()
{
}
BEGIN_MESSAGE_MAP(CHyperLinkEx, CHyperLink)
//{{AFX_MSG_MAP(CHyperLinkEx)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
///////////////////////////////////////////////////////////////////////////
// CHyperLinkEx message handlers
BOOL CHyperLinkEx::AutoCreate(CWnd * lpParent, LPCTSTR lpString,
LPRECT lpRect, long nWndID, long nIconCx,
CImageList * lpList, long nImage)
{
// 保存数据
m_nIconCx = nIconCx;
m_lpImage = lpList;
m_nImage = nImage;
// 计算窗口的高度
CDC * lpDC = lpParent->GetDC();
if(lpDC == NULL) return FALSE;
CFont * lpFont = lpParent->GetFont();
lpDC->SelectObject(lpFont);
RECT rcRect;
rcRect.top = lpRect->top;
rcRect.right = lpRect->right;
rcRect.bottom = lpRect->bottom;
rcRect.left = lpRect->left + nIconCx + 4;
lpDC->DrawText(lpString, &rcRect, DT_CALCRECT |
DT_EDITCONTROL | DT_WORDBREAK);
// 释放HDC对象
lpParent->ReleaseDC(lpDC);
// 更新窗口的位置
if(rcRect.bottom > lpRect->bottom)
lpRect->bottom = rcRect.bottom;
// 创建新的窗口
return Create(lpString, WS_CHILD | SS_NOTIFY |
WS_VISIBLE, rcRect, lpParent, nWndID);
}
void CHyperLinkEx::SetImage(CImageList * lpList, long nImage, long nCx)
{
m_lpImage = lpList;
m_nImage = nImage; m_nIconCx = nCx;
}
void CHyperLinkEx::SetString(LPCTSTR lpString, LPRECT lpRect)
{
// 计算窗口的高度
HDC hdc = ::GetDC(NULL);
CFont * lpFont = GetFont();
SelectObject(hdc, lpFont->GetSafeHandle());
// 计算窗口的位置
RECT rcRect;
rcRect.top = lpRect->top;
rcRect.right = lpRect->right;
rcRect.bottom = lpRect->bottom;
rcRect.left = lpRect->left + m_nIconCx + 4;
DrawText(hdc, lpString, -1, &rcRect, DT_CALCRECT |
DT_EDITCONTROL | DT_WORDBREAK);
// 释放HDC对象
::ReleaseDC(NULL, hdc);
// 更新窗口的位置
if(rcRect.bottom > lpRect->bottom)
lpRect->bottom = rcRect.bottom;
// 将窗口移到相应的位置
MoveWindow(&rcRect, TRUE);
}
void CHyperLinkEx::OnPaint()
{
CPaintDC dc(this);
// 首先显示图标
if(m_lpImage != NULL)
{
m_lpImage->Draw(&dc, m_nImage,
CPoint(0, 0), ILD_NORMAL);
}
// 显示文字信息
if(::GetFocus() == m_hWnd)
dc.SetTextColor(m_rgbActive);
else if( m_bMouseHover )
dc.SetTextColor(m_rgbHover);
else
dc.SetTextColor(m_rgbLink);
// 设置文字方式
dc.SetBkMode(TRANSPARENT);
dc.SelectObject( GetFont() );
RECT rcRect;
GetClientRect(&rcRect);
rcRect.left += (m_nIconCx + 4);
char lpBuffer[1024];
GetWindowText(lpBuffer, 1024);
dc.DrawText(lpBuffer, &rcRect, DT_EDITCONTROL);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -