如何处理鼠标三击?

weizhisheng 2001-04-16 08:34:00
好象以前在那里见到过有讨论的,不过实在找不到了,只好再提一次.
要求:不能影响WM_LBUTTONDOWN,WM_LBUTTONUP和WM_LBUTTONDBLCLK消息的正常处理.最好能有个DEMO.
...全文
491 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
weizhisheng 2001-04-21
  • 打赏
  • 举报
回复
OK
w12 2001-04-20
  • 打赏
  • 举报
回复
这次我是由备而来啊!
void click_3()
{
}

BOOL CDlgApp::PreTranslateMessage(MSG* pMsg)
{

static short flag=0,flagtime=0;
UINT time;
static MSG tempMsg;
static DWORD t1,t2,t3=20000;
time=GetDoubleClickTime();
t2=GetTickCount();
if((pMsg->message == WM_LBUTTONDBLCLK )||(pMsg->message ==WM_LBUTTONDOWN))
{
if(pMsg->message == WM_LBUTTONDBLCLK )
{
t1=GetTickCount();
flag=1;flagtime=1;
tempMsg.hwnd =pMsg->hwnd;
tempMsg.message=pMsg->message;
tempMsg.lParam=pMsg->lParam;
tempMsg.wParam=pMsg->wParam;
return true;
}
if(pMsg->message == WM_LBUTTONDOWN)
{
if(flag==1)
{
t2=GetTickCount();
t3=t2-t1;
if(t3<time)
{
click_3();
flag=0;flagtime=0;
return true;
}
flag=0;
}
}

}else{
if(flagtime)
{
t3=t2-t1;
if(t3>time)
{
flagtime=0;
return CWinApp::PreTranslateMessage(&tempMsg);
}
}
}
return CWinApp::PreTranslateMessage(pMsg);
weizhisheng 2001-04-20
  • 打赏
  • 举报
回复
多谢、多谢!我这就去试!再加30分,以表感谢!
BTW:为什么M$的网站总是进不去?
weizhisheng 2001-04-19
  • 打赏
  • 举报
回复
真的假的啊...我一看见那个文档编号就觉得有问题...不过M$的网站我还从没去过,好,去瞧瞧.
fd兄的也是一个思路,钩子到没有考虑过,虽然似乎有点小题大作,不过如果能解决问题的话也认了.我这就去试试,希望有结果吧.
csdev 2001-04-19
  • 打赏
  • 举报
回复
ahphone(阿丰)的办法应该可以,不过得加计数器。
ahphone 2001-04-19
  • 打赏
  • 举报
回复
微软的办法:处理完双击后(因为双击的操作相对较少),存一个变量,然后重载一个单击的消息函数。
此处理方法来自msdn.micro$oft.com/....
文档编号:1234567
哈哈!!
fd 2001-04-19
  • 打赏
  • 举报
回复
挂一个鼠标钩子,在 WM_LBUTTONDBCLK,到来时设置一个标志 记下系统时间,如用
GetTickCount 然后 return 不调用 CallNext.... ,当WM_LBUTTONDWON到来时
查看 标志和时间是否都满足,如是 发送自定义消息 Postmessage,如不满足
CallNext...(函数名记不住了)


fd 2001-04-19
  • 打赏
  • 举报
回复
挂一个鼠标钩子,在 WM_LBUTTONDBCLK,到来时设置一个标志 记下系统时间,如用
GetTickCount 然后 return 不调用 CallNext.... ,当WM_LBUTTONDWON到来时
查看 标志和时间是否都满足,如是 发送自定义消息 Postmessage,如不满足
CallNext...(函数名记不住了)


yoci 2001-04-19
  • 打赏
  • 举报
回复
还是定时器
weizhisheng 2001-04-19
  • 打赏
  • 举报
回复
??????????????????????????????????????????????????????
weizhisheng 2001-04-18
  • 打赏
  • 举报
回复
那什么才行?
fleg 2001-04-18
  • 打赏
  • 举报
回复
定时器不行的,其他的就不知道了
weizhisheng 2001-04-18
  • 打赏
  • 举报
回复
??????????????????????????????????????????????????????????????
weizhisheng 2001-04-18
  • 打赏
  • 举报
回复
试验...好象不行...在第二次的时候是WM_LBUTTONDBLCLK,第二个DOWN根本就发不出来.而且怎么截住DBLCLK呢?
难!难!难!
hproof 2001-04-18
  • 打赏
  • 举报
回复
哈哈哈,,,,我发现不能接受单击事件,哈哈,,,,,自己改吧。
hproof 2001-04-18
  • 打赏
  • 举报
回复
当我点了2次后你怎么知道我是否要点第3次呢?
如我点,你因该视为“三击”;
如不点,你因该视为“双击”;
普通的方法不行。
这样行不行?:
在CMyView里处理WM_LBUTTONDOWN,记录当时的系统时间,比较后发出自己的“成员函数”调用。
void CMyView::OnLButtonDown(...,CPoint point)
{
m_dwT1=GetSyeTime();//...???

DWORD t12,t13;
t12=m_dwT1-m_dwT2;
t13=m_dwT1-m_dwT3;

if(t13<TIME_CLICK3) //一定“短”时间范围内第三次点。
{
DoClick3(point);
}
else if(t12>TIME_CLICK2_OUT) //点了两次,但总不点“本以为会有的”第三次,
{
if(t12<TIME_CLICK2)
DoClick2(point);
else
DoClick1(point);
}
m_dwT3=m_dwT2;
m_dwT2=m_dwT1;
}
当然还有很多要做,比如三个变量的初始化问题,或者验证m_dwT3比m_dwT1大(或相等)时的情况等。或者,当“完成一次确定”后,比如执行DoClick3()后,自己设置三个变量的值等。
weizhisheng 2001-04-18
  • 打赏
  • 举报
回复
多谢w12兄的热心指点,不过和我预想的效果有点不大一样.
我想的是:如果在很短的时间内连按了三次鼠标,就直接发送三击消息而不发送双击消息.w12兄做出来的效果和Word里面的是一样的,就是双击和三击的消息都发出了,我最头疼的是怎么栏住双击消息,等短时间内用户没有再次输入再发出去.难道我要再起一个线程?
w12 2001-04-18
  • 打赏
  • 举报
回复
呼呼!不容易啊,终于成了!
void click_3()
{
}

BOOL CDlgApp::PreTranslateMessage(MSG* pMsg)
{
static short flag=0;
UINT time;
static DWORD t1,t2,t3=20000;
time=GetDoubleClickTime();
if((pMsg->message == WM_LBUTTONDBLCLK )||(pMsg->message ==WM_LBUTTONDOWN))
{
if(pMsg->message == WM_LBUTTONDBLCLK )
{
t1=GetTickCount();
flag=1;
}
if(pMsg->message == WM_LBUTTONDOWN)
{
if(flag==1)
{
t2=GetTickCount();
t3=t2-t1;
if(t3<time)
{
click_3();
flag=0;
return true;
}
flag=0;
}
}

}
return CWinApp::PreTranslateMessage(pMsg);
}
neptune 2001-04-17
  • 打赏
  • 举报
回复
那就先WM_LBUTTONDBLCLK后WM_LBUTTONDOWN?
weizhisheng 2001-04-17
  • 打赏
  • 举报
回复
有没有有点建设性的意见啊...难点是不能按常规顺序发送WM_LBUTTONDBLCLK消息,而是必须等待短暂的时间,如果没有再次输入就发送WM_LBUTTONDBLCLK,否则发送三击消息.这个消息循环可能非常复杂了
加载更多回复(4)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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