鼠标移动到窗体的某个控件上,能有个提示

warriormark 2010-04-20 11:56:44
如题。
1 MFC 工程
2 基于对话框程序

补充说明:
1 提示函数函数为(afxMessageBox("aaa"));

能给出源码得高分
给出资料也有分
...全文
767 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐的小菜鸟 2010-09-05
  • 打赏
  • 举报
回复
xiexie 顶起
warriormark 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 andywei1982 的回复:]
去查查 CToolTipCtrl 这个类的用法就知道了、、、、
[/Quote]


Tip这个效果我就用CToolTipCtrl这个解决了

现在实际需求是:现在是鼠标移动到控件上,改变鼠标外形

大家都说了不少方法
我现在来实际操作下

感谢大家持续关注
warriormark 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 wltg2001 的回复:]
引用 6 楼 warriormark 的回复:
引用 4 楼 wltg2001 的回复:
自已从现有控件类中继承个子类,处理WM_MOUSEMOVE消息就行了。

这个思路很不对头
怎么是去每个控件处理 WM_MOUSEMOVE消息,这样工作量多大啊。。

应该是对话框来处理WM_MOUSEMOVE消息,然后根据wParam和lParam来判断是哪个控件才对。。

这个也是可以的……
[/Quote]

。。。我一个button就自绘了三种。。。
andywei1982 2010-04-21
  • 打赏
  • 举报
回复
去查查 CToolTipCtrl 这个类的用法就知道了、、、、
FireBirdCN 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 warriormark 的回复:]
引用 16 楼 firebirdcn 的回复:
引用 14 楼 warriormark 的回复:
WM_MOUSEMOVE精度太低

简单解释就是,我鼠标不停的移动,它发送WM_MOUSEMOVE的间隔在某些时间段太高了。

“自已从现有控件类中继承个子类”
没看懂这句话

我是直接在Dlg::OnMouseMove中做的


派生子类 是让你派生一个CButtionEX这……
[/Quote]

派生类不是提升为肉价钱 哪有你想的那么麻烦~写好了这个类你可以省很多事 再说这个类也没那么复杂
磨刀不误砍柴工的
wltg2001 2010-04-20
  • 打赏
  • 举报
回复
自已从现有控件类中继承个子类,处理WM_MOUSEMOVE消息就行了。
acdbxzyw 2010-04-20
  • 打赏
  • 举报
回复
有个鼠标事件可以实现。。。
向立天 2010-04-20
  • 打赏
  • 举报
回复
看看我这篇博客吧
希望对你有帮助
http://blog.csdn.net/xianglitian/archive/2007/08/06/1728242.aspx
soswaidao 2010-04-20
  • 打赏
  • 举报
回复
友情帮顶,友情帮顶
wltg2001 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 warriormark 的回复:]
WM_MOUSEMOVE精度太低

简单解释就是,我鼠标不停的移动,它发送WM_MOUSEMOVE的间隔在某些时间段太高了。

“自已从现有控件类中继承个子类”
没看懂这句话

我是直接在Dlg::OnMouseMove中做的
[/Quote]
说得不清楚,比如你想实现按钮上的功能,那么从CButton子类中继承一个子类就行了。
wltg2001 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 warriormark 的回复:]
引用 4 楼 wltg2001 的回复:
自已从现有控件类中继承个子类,处理WM_MOUSEMOVE消息就行了。

这个思路很不对头
怎么是去每个控件处理 WM_MOUSEMOVE消息,这样工作量多大啊。。

应该是对话框来处理WM_MOUSEMOVE消息,然后根据wParam和lParam来判断是哪个控件才对。。
[/Quote]
这个也是可以的,不过,你如何判断鼠标到底移到了哪个控件上面呢,如果是利用鼠标的位置那么你要获取控件在对话框中的位置,同样很麻烦。
我说每个控件,其实是指每一种控件,比如有三个按钮,那么写一个自己的CMyButton类就行了。一般来说,这个工作很简单,因为你只是在原来父类的基础上加一个函数就行了。
尹成 2010-04-20
  • 打赏
  • 举报
回复
加入消息映射.
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipNotify)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipNotify)


实现 函数

BOOL 你自己的类::OnToolTipNotify(UINT ID, NMHDR *pNMHDR,
LRESULT *pResult)
{
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
CString strTipText;
UINT nID = pNMHDR->idFrom;
if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
{
nID = ::GetDlgCtrlID((HWND)nID);
}

if (nID == 0) return FALSE;
switch(nID)
{
case ID_XXX:
MessageBox("aa");
break;
}
zbychhaozeng 2010-04-20
  • 打赏
  • 举报
回复
我把步骤说一下你自己去实现一下

第一步这个肯定是在mousemove消息相应函数里面写的,
用一个while通过findwindows()来判断来判断你要的窗口句柄
用isptrect()//好像拼写错了
if(hwnd->isptrect(pt))
{
afxMessageBox("aaa");
}
这样就好了!
warriormark 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 firebirdcn 的回复:]
引用 14 楼 warriormark 的回复:
WM_MOUSEMOVE精度太低

简单解释就是,我鼠标不停的移动,它发送WM_MOUSEMOVE的间隔在某些时间段太高了。

“自已从现有控件类中继承个子类”
没看懂这句话

我是直接在Dlg::OnMouseMove中做的


派生子类 是让你派生一个CButtionEX这样的类 在这个类中处理鼠标消息
然后用这个类 来……
[/Quote]

那我疯了的。本来就不是个什么核心功能,把豆腐搞成了肉价钱。
静态的,动态的,继承的,自绘的~~~
FireBirdCN 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 warriormark 的回复:]
WM_MOUSEMOVE精度太低

简单解释就是,我鼠标不停的移动,它发送WM_MOUSEMOVE的间隔在某些时间段太高了。

“自已从现有控件类中继承个子类”
没看懂这句话

我是直接在Dlg::OnMouseMove中做的
[/Quote]

派生子类 是让你派生一个CButtionEX这样的类 在这个类中处理鼠标消息
然后用这个类 来实例化你的控件
warriormark 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 vc_love2010 的回复:]
简单的很,处理 notify 消息就可以.


加入消息映射.
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipNotify)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipNotify)


实现 函数

BOOL 你自己的类::OnToolTipN……
[/Quote]

11楼你别慌,你肯定有分的。
这个加Tip的需求我用MFC的CToolTip类搞定了,效果差强人意,所以就此打住算了。

你这个我用来看看做另外一个效果,不过现在快下班了,明天上班之后才能尝试。
最迟4月21日下午5点结贴。
warriormark 2010-04-20
  • 打赏
  • 举报
回复
WM_MOUSEMOVE精度太低

简单解释就是,我鼠标不停的移动,它发送WM_MOUSEMOVE的间隔在某些时间段太高了。

“自已从现有控件类中继承个子类”
没看懂这句话

我是直接在Dlg::OnMouseMove中做的


Elecsoft 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wltg2001 的回复:]
自已从现有控件类中继承个子类,处理WM_MOUSEMOVE消息就行了。
[/Quote]
这样就行,
VR_Lab 2010-04-20
  • 打赏
  • 举报
回复
其实就是处理鼠标移动消息,最好自己继承一个控件类,然后重写OnMouseMove这个虚函数判断鼠标在该窗口内的位置即可。
vc_love2010 2010-04-20
  • 打赏
  • 举报
回复
简单的很,处理 notify 消息就可以.


加入消息映射.
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipNotify)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipNotify)


实现 函数

BOOL 你自己的类::OnToolTipNotify(UINT ID, NMHDR *pNMHDR,
LRESULT *pResult)
{
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
CString strTipText;
UINT nID = pNMHDR->idFrom;
if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
{
nID = ::GetDlgCtrlID((HWND)nID);
}

if (nID == 0) return FALSE;
switch(nID)
{
case ID_XXX:
MessageBox("aa");
break;
}


这个是我做ToolTip用的. 应该给分吧
加载更多回复(6)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧