⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hyperlinkex.cpp

📁 对c++中的各种ui对象进行封装
💻 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 + -