如何为CHyperlink控件实现GetURL与GetTooltip方法?
实现CHyperlink类的GetURL和GetTooltip方法
CHyperlink类派生自CMFCLinkCtrl,提供了SetURL和SetTooltip方法,但没有对应的获取方法,我们可以通过以下方式实现:
1. 在类中声明Get方法
在CHyperlink的头文件里添加两个方法声明:
class CHyperlink : public CMFCLinkCtrl { public: // 获取链接地址 CString GetURL() const; // 获取提示文本 CString GetTooltip() const; };
2. 实现GetURL方法
利用Windows公共控件的LM_GETURL消息直接读取URL:
CString CHyperlink::GetURL() const { CString strURL; // 向控件发送LM_GETURL消息,缓冲区大小设为MAX_PATH ::SendMessage(const_cast<CHyperlink*>(this)->m_hWnd, LM_GETURL, MAX_PATH, (LPARAM)strURL.GetBuffer(MAX_PATH)); strURL.ReleaseBuffer(); return strURL; }
3. 实现GetTooltip方法
通过CMFCLinkCtrl继承的GetToolTipCtrl()获取tooltip控件,再读取文本:
CString CHyperlink::GetTooltip() const { CString strTooltip; CToolTipCtrl* pToolTip = const_cast<CHyperlink*>(this)->GetToolTipCtrl(); if (pToolTip != nullptr && pToolTip->GetSafeHwnd() != nullptr) { // 读取控件关联的tooltip文本(单个控件通常用ID 0) pToolTip->GetText(strTooltip, this, 0); } return strTooltip; }
补充说明
LM_GETURL是链接控件的标准系统消息,CMFCLinkCtrl内部实现SetURL也是基于这个消息,直接发送消息获取是最贴合原生逻辑的方式。GetToolTipCtrl()是CMFCButton(CMFCLinkCtrl的父类)提供的方法,通过它可以直接操作tooltip控件,无需额外处理消息。
内容的提问来源于stack exchange,提问作者Andrew Truckle
相关产品推荐
相关产品推荐

