在MFC中实现CListCtrl控件的超链接功能

在开发桌面应用程序时,经常需要在列表控件中添加超链接功能。本文将介绍如何在MFC的CListCtrl控件中实现超链接功能,并提供详细的代码实现。

在The Code Project上搜索相关实现时,发现大多数代码虽然能够提供基本功能,但并不完美。当光标移动到单元格上时,如果光标不在文字上,超链接无法工作。因此,决定编写代码,使得当光标移动到单元格中的文字上时,超链接能够工作,并且可以通过鼠标点击打开网站。

代码实现

首先,定义了一个结构体stURLTAG来存储超链接信息:

typedef struct { BOOL IsHoverOn; CString strURL; CString strTooltip; } stURLTAG;

然后,创建了一个名为CLinkListCtrl的类,它继承自CListCtrl:

#pragma once #include using namespace std; // CLinkListCtrl typedef struct { BOOL IsHoverOn; CString strURL; CString strTooltip; } stURLTAG; class CLinkListCtrl : public CListCtrl { DECLARE_DYNAMIC(CLinkListCtrl) public: CLinkListCtrl(); virtual ~CLinkListCtrl(); protected: DECLARE_MESSAGE_MAP() public: BOOL SetItemURL(int nItem, int nSubItem, CString strURL, CString strTooltip); void ClearItemURL(int nItem, int nSubItem); protected: CRect GetTextRect(int nItem, int nSubItem); BOOL PtInText(CPoint pt, int nItem, int nSubItem); BOOL IsURL(int nItem, int nSubItem); void RedrawSubItem(int nItem, int nSubItem, BOOL IsHoverOn); private: map m_mapURL; CFont m_ftUnderline; CFont m_ftURL; CToolTipCtrl m_toolTip; protected: virtual void PreSubclassWindow(); public: afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnMouseMove(UINT nFlags, CPoint point); afx_msg void OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult); virtual BOOL PreTranslateMessage(MSG* pMsg); };

接下来,展示如何使用CLinkListCtrl:

m_list.InsertColumn(0, "NO", LVCFMT_LEFT, 50); m_list.InsertColumn(1, "Name", LVCFMT_LEFT, 100); m_list.InsertColumn(2, "Enter IN", LVCFMT_LEFT, 80); m_list.SetExtendedStyle(m_list.GetExtendedStyle()|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT); m_list.InsertItem(0, _T("")); m_list.SetItemText(0, 0, "1"); m_list.SetItemText(0, 1, "bd"); m_list.SetItemText(0, 2, "baidu"); m_list.SetItemURL(0, 2, "www.baidu.com", "search website - baidu"); m_list.InsertItem(1, _T("")); m_list.SetItemText(1, 0, "2"); m_list.SetItemText(1, 1, "gg"); m_list.SetItemText(1, 2, "google"); m_list.SetItemURL(1, 2, "www.google.com", "search website - google");
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485