如何在MFC设计超链接控件类

如何在MFC设计超链接控件类,第1张

1:控件宿主

在现有的控件上进行二次开发是一个不错的选择,这样做可以避免需要自己设计一个ACTX控件的麻烦。

在现有的控件中,静态文本STATIC无疑是最好的选择。所以我们的类,将选择继承自CStatic。并且为了能够接受WM_MOUSEMOVE消息,我们需要添加相应的消息映射接口~

2:一些基础功能

作为超链接控件,我们至少需要能够改变控件的背景颜色和文本颜色。而且控件应该有鼠标指针切换的功能(即鼠标移到控件上,指针变为小手,移除后恢复)

如果你喜欢,可以增加下划线效果(个人不喜欢超链接带下划线TvT)

至于单击事件,是继承自CStatic

3:如何实现

嗯,终于到重点了。

关于如何实现,一两句废话是讲不清楚的,也难以讲清楚,所以我们有必要结合代码来说明。

首先我们要解决类声明的问题(class declaration)

下面CLabelLink的类声明

view source

#pragma once

class CLabelLink : public CStatic

{

public:

CLabelLink()

virtual ~CLabelLink() // 保证正确析构

// interface declaration

void SetTextColor(COLORREF clrText) // 设置文本颜色

void SetBackgroundColor(COLORREF clrBackground) //设置背景颜色

void EnableTrack(BOOL bEnable = TRUE) // 是否鼠标跟踪.即鼠标移入控件时指针切换的功能

void SetLinkUrl(LPCTSTR lpszTargetUrl) // 设置目标链接地址

protected:

virtual void PreSubclassWindow() // 用以设置控件属性

afx_msg HBRUSH CtlColor(CDC *pDC, UINT nCtlColor) // 控件颜色设置消息映射

afx_msg void OnMouseMove(UINT nFlags, CPoint point) // 鼠标移动消息映射

afx_msg void OnStnClicked() // 控件单击消息映射

DECLARE_MESSAGE_MAP()

protected:

BOOL m_bHover

BOOL m_bTrack

COLORREF m_clrTextColor

COLORREF m_clrBackgroundColor

CBrush m_Brush

CString m_sTargetUrl

}

大致了解下上面的代码,我们就会发现,CLabelLink提供给Coder的接口主要就那么四个:SetTextColor、SetBackgroundColor、EnableTrack和SetLinkUrl。对于这四个接口,理解起来都是没有问题的。

首先我们需要关注的是如何设置控件的文本颜色和背景颜色。在MFC中,这通常是利用DialogBox的WM_CTLCOLOR消息中进行控件绘制。

MFC的静态框,没有超链这个属性,需要自己做。

响应静态框的鼠标事件,然后用ShellExecute打开一个网址即可。

如果做的再细致一点,改变文字的颜色,可以添加WM_CTLCOLOR的映射函数,在函数中添加 if(pWnd->GetDlgCtrlID()==这里写你要改变的控件ID) { pDC->SetTextColor(RGB(0,0,255))}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11753849.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存