在现有的控件上进行二次开发是一个不错的选择,这样做可以避免需要自己设计一个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))}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)