探讨《如何在MFC设计超链接控件类》
来源:互联网 发布:淘宝商家贴吧 编辑:程序博客网 时间:2024/05/29 14:44
《如何在MFC设计超链接控件类》
原文传送门:http://blog.kingsamchen.com/archives/517#comment-1912
运行之后一切都完美,只有一个问题,当弹出IE窗口挡住了Label之后,在切换会原来的程序,鼠标移动到Label上时不会再次显示手型鼠标指针。查询资料跟踪程序后发现:
void CLinkLabel::OnMouseMove(UINT nFlags, CPoint point){ // TODO: 在此添加消息处理程序代码和/或调用默认值 if (m_bTrack) { if (m_bMouseOn) { CRect rec; GetClientRect(&rec); // 鼠标离开了LinkLabel if (!rec.PtInRect(point)) { m_bMouseOn = FALSE; ::ReleaseCapture(); } } // 鼠标进入LabelLink else { m_bMouseOn = TRUE; SetCapture(); // #define IDC_HAND MAKEINTRESOURCE(32649) // 直接引用IDC_HAND需要添加头文件 ::SetCursor(AfxGetApp()->LoadStandardCursor(MAKEINTRESOURCE(32649))); Invalidate(TRUE); } } CStatic::OnMouseMove(nFlags, point);}
如果我鼠标悬停在CLinkLabel,如果突然有窗口阻挡了CLinkLabel所在的主窗口,鼠标再次移动到CLinkLabel,因为之前主窗口丢失了焦点,手型鼠标被重置成焦点窗口默认样式,SetCapture(手型)已经自动失效
鼠标不在CLinkLabel,不会发生CLinkLabel::OnMouseMove,鼠标在CLinkLabel,则 rec.PtInRect(point)==TRUE,不会进入进入if (!rec.PtInRect(point))执行m_bMouseOn = FALSE
,因此m_bMouseOn一直是等于TRUE,CLinkLabel认为鼠标一直在控件上,不会再次::SetCursor()。
通过论坛朋友帮助和网上查询咨询找到了两种解决方案:
1、在WM_SETCURSOR消息中执行SetCursor(论坛提供)
2、在PreTranslateMessage中截获WM_MOUSEMOVE,添加一个监视,如果鼠标离开则产生WM_MOUSELEAVE事件,然后处理之。传送门
PreTranslateMessage(MSG* pMsg){// TODO: 在此添加专用代码和/或调用基类// m_ToolTip.RelayEvent(pMsg);switch( pMsg->message ){case WM_MOUSEMOVE://为了让系统产生上面的WM_MOUSELEAVE消息,你必需做如下处理TRACKMOUSEEVENT trmouse;trmouse.cbSize = sizeof(TRACKMOUSEEVENT);trmouse.dwFlags = TME_LEAVE;trmouse.dwHoverTime = 400;trmouse.hwndTrack = pMsg->hwnd;if(!_TrackMouseEvent(&trmouse))return FALSE;break;}return CLinkLabel::PreTranslateMessage(pMsg);}我选择了第一种,简单直接。第二种可以借鉴。
- 探讨《如何在MFC设计超链接控件类》
- 如何在MFC设计超链接控件类
- 如何在vb控件上添加超链接
- 【MFC】:MFC如何给控件设计缺省值?
- MFC静态文本控件设置超链接
- MFC超链接
- MFC编程中如何在工具条上实现自定义控件
- 在VS2010/MFC中如何对对话框添加控件
- Hyperlink超链接控件CHyperLink类
- MFC控件扩展性设置(按钮、图片、超链接)
- MFC超链接静态类的使用
- 在word中如何全部取消超链接
- 如何在Symbian程序中使用超链接
- Flex如何在Alert中显示超链接
- 如何在回复中插入超链接
- 如何在对话框中加入超链接
- 如何在MindMapper中建立超链接
- android 如何在超链接跳转到activity
- 解决Godaddy邮箱无法收信的问题
- PHP unicode解码 和 utf8与unicode
- 浅谈数据仓库建设中的数据建模方法
- C/C++程序内存泄漏检测
- JS获取table中td的绝对坐标
- 探讨《如何在MFC设计超链接控件类》
- 头文件中的static和const成员的初始化方法总结...
- VB.NET根据年月和选择的第几周,得到次周日起范围
- Ubuntu上使用android4.0.3模拟器实现JNI例子
- 修复网络连接
- Xcode 修改源文件作者,公司版权信息
- android模拟器上安装taintdroid全过程
- android listview 控件的美化
- myeclipse注册机代码