如何在picture控件内让WM_MOUSEMOVE像WM_MOUSEHOVER一样用?

csyounth 2012-04-27 06:43:57
其实我需要WM_MOUSEHOVER,但是自己加载的WM_MOUSEHOVER没有系统自带的消息触发时间的间隔整齐。
换句话说,即使鼠标不动,在picture的控件上怎样才能不断有WM_MOUSEMOVE信号?
...全文
319 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
songyundi3 2013-05-06
  • 打赏
  • 举报
回复
引用 2 楼 huqiming 的回复:
http://www.qingfengju.com/article.asp?id=86
博主你好,我看到了你在2002年回复的一个帖子 “如何把TIF图象的黑白非压缩格式转换成CCITT Group 4 FAX的压缩格式?” 你向楼主发了个代码的邮件,能发给我一份吗? 感谢 des.death.kt@gmail.com
schlafenhamster 2012-05-05
  • 打赏
  • 举报
回复
问题是“让WM_MOUSEMOVE像WM_MOUSEHOVER”
schlafenhamster 2012-05-04
  • 打赏
  • 举报
回复
主要是不想助长题不达意的问题风格。
csyounth 2012-05-04
  • 打赏
  • 举报
回复
因为有几个人的回答一眼就看出是百度出来的,不仅没有帮助还浪费我的时间,至于huqiming和VisualEleven稍微有点对不住,我确实没控制好结贴评分的尺度,严格过分了,对不起。我不是心疼这点分,主要是不想助长文不对题的回答风格。
csyounth 2012-05-04
  • 打赏
  • 举报
回复
楼上你好,你的回答确实不属于文不对题,我在发这个帖子之前用的是你第一次回答里的方法,后来改用你的settimer,但是效果不好,最终用了计算时钟频率的方法。
huqiming 2012-05-04
  • 打赏
  • 举报
回复
评价很不客气啊,
找个能看的懂的看看我们的回复是不是
“文不对题,根本不看要求就作答,十分混乱”
csyounth 2012-05-03
  • 打赏
  • 举报
回复
问题已解决,大多数的回答都是文不对题,根本不看要求就作答,十分混乱。还是在google里搜索微秒定时器更靠谱些
csyounth 2012-05-02
  • 打赏
  • 举报
回复
我自己的消息不能在16毫秒内生成,用select也白搭吧
csyounth 2012-05-02
  • 打赏
  • 举报
回复
select是指什么?不明白
shawn 2012-05-02
  • 打赏
  • 举报
回复
// CExStatic 消息处理程序
void CExStatic::OnMouseMove(UINT nFlags, CPoint point)

通过在onmousemove中调用timesetevent提高精度,每个1ms调用自己的回调函数,查看自己的鼠标是否在有效区内,如果在那么继续,知道16ms时如果鼠标仍然在有小区内,那么自己发送OWM_MOUSEHOVER消息,不过这样明显cpu占用率较高。。。
csyounth 2012-04-28
  • 打赏
  • 举报
回复
0.014707
0.016549
0.015349
0.020307
0.011756
0.015263
0.020683
0.010294
0.015881
0.015705
0.019155
0.014478
0.01254
0.015197
0.015913
0.020764
0.011194
0.015042
0.047081
0.011652
0.031946
0.014858
0.015188
0.014927
0.017985
0.014881
0.015087
0.046004
这是用SetTimer触发TRACKMOUSEEVENT 后,MOUSEHOVER的时间间隔,不规整,最好能控制到小数点后三位一致
向立天 2012-04-28
  • 打赏
  • 举报
回复
你重载CStatic了?
不过不管怎么样可以试试在OnMouseMove中
用现有参数PostMessage继续发送WM_MOUSEMOVE消息是一下
huqiming 2012-04-28
  • 打赏
  • 举报
回复
那你只需要定时器的频率不低于60Hz就可以,用select试试吧
csyounth 2012-04-28
  • 打赏
  • 举报
回复
哦,愿闻其详
schlafenhamster 2012-04-28
  • 打赏
  • 举报
回复
这样可以啊:
static TRACKMOUSEEVENT tme;
static DWORD counter=0;
。。。
case WM_MOUSEMOVE:
tme.cbSize = sizeof(tme);
tme.dwFlags = TME_HOVER|TME_LEAVE;
tme.dwHoverTime = 15;//16.66666 tme.hwndTrack = hwnd;
TrackMouseEvent(&tme);
break;
case WM_MOUSEHOVER:
counter++;
sprintf(Prompt,"%d\r\n",counter);
OutputDebugString(Prompt);
TrackMouseEvent(&tme);
break;
}
// 鼠标不用动的。
问题是 时间不一定准,也不能很快。
csyounth 2012-04-28
  • 打赏
  • 举报
回复
我就郁闷了,怎么能把速度提上去呢?
Eleven 2012-04-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]
实际上是个控制飞行模拟的界面,确实用socket出我的操作指令,飞行窗口里的刷新是60Hz,所以我这边如果低于六十分之一秒,飞行界面里就会卡卡的,不知道如何解决
[/Quote]
SetTimer()的精度只有50ms左右
csyounth 2012-04-28
  • 打赏
  • 举报
回复
实际上是个控制飞行模拟的界面,确实用socket出我的操作指令,飞行窗口里的刷新是60Hz,所以我这边如果低于六十分之一秒,飞行界面里就会卡卡的,不知道如何解决
huqiming 2012-04-28
  • 打赏
  • 举报
回复
毫秒级别的时间精度问题确实是个大问题.不过一般对时间的要求都没那么严谨,包括视频播放的时候也是没那么高的时间要求.
嵌入式系统里面还好解决点,靠硬件自身.x86下就比较麻烦了.
你可以试试socket的select函数,可以到us级.创建一个线程循环用ms级等待和发送消息.
csyounth 2012-04-28
  • 打赏
  • 举报
回复
最好六十分之一秒发送一次
加载更多回复(7)

15,979

社区成员

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

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