MFC 中Static text 如何响应鼠标hover事件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC 中Static text 如何响应鼠标hover事件?相关的知识,希望对你有一定的参考价值。
如题,本人想用静态文本实现超链接功能,当鼠标放在文本上,文本内容显示下划线。请问如何实现。知道的指导小弟一下,不胜感激
重载CStatic类,在鼠标入入事件中添加TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.hwndTrack = m_hWnd;
tme.dwFlags = TME_LEAVE | TME_HOVER;
tme.dwHoverTime = 1;
_TrackMouseEvent(&tme);
则会接收到鼠标离开事件。
BEGIN_MESSAGE_MAP(CMyStatic, CStatic)
//AFX_MSG_MAP
ON_MESSAGE(WM_MOUSEMOVE,mv)
ON_MESSAGE(WM_MOUSEHOVER,mho)
ON_MESSAGE(WM_MOUSELEAVE,ml)
ON_MESSAGE(WM_MOUSEFIRST,mf)
END_MESSAGE_MAP()追问
我重写了CStatic类,但是不能相应鼠标HOver和鼠标进入的消息,能相应鼠标移动的消息
追答CMyStatic::CMyStatic(CTestMFCDlg* p):m_p(p),m_bin(false)
CMyStatic::~CMyStatic(void)
LRESULT CMyStatic::mv(WPARAM wParam,LPARAM lParam)
if(!m_bin)
m_bin=true;
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.hwndTrack = m_hWnd;
tme.dwFlags = TME_LEAVE | TME_HOVER;
tme.dwHoverTime = 1;
_TrackMouseEvent(&tme);
if(m_p)
m_p->PostMessage(MY_MESSAGE,0,lParam);
return 0;
BEGIN_MESSAGE_MAP(CMyStatic, CStatic)
//AFX_MSG_MAP
ON_MESSAGE(WM_MOUSEMOVE,mv)
ON_MESSAGE(WM_MOUSEHOVER,mho)
ON_MESSAGE(WM_MOUSELEAVE,ml)
ON_MESSAGE(WM_MOUSEFIRST,mf)
END_MESSAGE_MAP()
LRESULT CMyStatic::ml(WPARAM wParam,LPARAM lParam)
m_bin=false;
if(m_p)
m_p->PostMessage(MY_MESSAGE,1,lParam);
return 0;
LRESULT CMyStatic::mho(WPARAM wParam,LPARAM lParam)
if(m_p)
m_p->PostMessage(MY_MESSAGE,2,lParam);
return 0;
LRESULT CMyStatic::mf(WPARAM wParam,LPARAM lParam)
if(m_p)
m_p->PostMessage(MY_MESSAGE,3,lParam);
return 0;
m_p 这个是什么?能把完整的代码发给我吗?感觉有的模糊,看不清楚代码逻辑
追答mv\ml\mf\mho这四个函数是响应相应事件的。具体的在BEGIN_MESSAGE_MAP中已经映射。
至于这四个函数的内容,由你自己写。
其中
if(m_p)
m_p->PostMessage(MY_MESSAGE,3,lParam);
是我自己测试的代码,m_p是一个窗口的句柄。
这个你可以不要。
MFC中如何让静态控件响应鼠标移动的消息?
我想在静态文本控件中显示3D图形(用OGRE渲染),于是我自定义了继承CWnd的CMyModule类,并且在CMyModule中已经写了响应WM_MOUSEMOVE消息的处理函数。我在对话框模板中拖入了静态文本控件。然后把这个控件关联我的自定义类,现在已经能在对话框的静态控件中显示3D图像了,现在的问题是当鼠标移动到静态控件时还是不能响应我的消息函数,不能移动图形。本人菜鸟,请高手指点。
我曾经在SDI工程下的View中能显示3D图形并且也能够响应鼠标的移动消息。
还有,在鼠标的响应函数中,放一些TRACE宏,输出点内容,看看是否的确没有进入鼠标消息响应。 参考技术A 你在你的OnLButtonDown方法里设置个断点,调试下看看鼠标消息是否能得到响应 参考技术B WM_MOUSEMOVE
一般情况下,鼠标移动是不能拖动图形的,一定要和leftbuttondown或 rightbuttondown联合使用。
某个键按下时,同时移动鼠标,同时捕捉这两个消息,然后处理图形移动。追问
在CMyModule中我也已经写了
void CMyModule::OnLButtonDown(UINT nFlags, CPoint point)
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_mouseLast = point;
CWnd::OnLButtonDown(nFlags, point);
在自己的类里面,得到消息后要自己处理,就是重新画图。不能用缺省的处理。
本回答被提问者采纳以上是关于MFC 中Static text 如何响应鼠标hover事件?的主要内容,如果未能解决你的问题,请参考以下文章
MFC 中,按钮和其他(比如:图片框、列表框)控件怎么响应鼠标移动消息?