如何区分WM_LBUTTONDOWN和WM_LBUTTONDBLCLK消息?

WiseNeuro 2005-05-04 09:49:45
我想实现如下效果:
当在窗体的任务栏上双击鼠标左键时显示窗体,当单击鼠标左键时显示一个菜单。像qq那样的效果。消息处理程序如下:
void __fastcall TFormMain::MyNotify(TMessage& Msg)
{
POINT MousePos;

switch(Msg.LParam)
{
case WM_RBUTTONUP:
if (GetCursorPos(&MousePos))
{
PopupMenuSystem->PopupComponent = FormMain;
SetForegroundWindow(Handle);
PopupMenuSystem->Popup(MousePos.x, MousePos.y);
}
else
Show();
break;
case WM_LBUTTONDBLCLK:
Show() ;
break;
case WM_LBUTTONDOWN:
if (GetCursorPos(&MousePos))
{
PopupMenuState->PopupComponent = FormMain;
SetForegroundWindow(Handle);
PopupMenuState->Popup(MousePos.x, MousePos.y);
}
else
Show() ;
break ;

default:
break;
}
TForm::Dispatch(&Msg);


但是,双击鼠标左键时,他也会发送单击消息,弹出菜单。我该怎样区分这两个消息,或如何实现我想要的效果。谢谢。
...全文
273 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
WiseNeuro 2005-05-05
  • 打赏
  • 举报
回复
ok
搞定
zhenyu362 2005-05-05
  • 打赏
  • 举报
回复
哈哈,我觉得只能用计时来做,因为WM_LBUTTONDBLCLK必定是跟在一个WM_LBUTTONDOWN后面,所以我想到的办法是这样:
static bool bDBLCLK=false;
case WM_LBUTTONDBLCLK:
bDBLCLK=true;
Show() ;
break;
case WM_LBUTTONDOWN:
Timer1->Enable=true;

................
TimerProc
{
if(bDBCLK)
{bDBCLK=false;}
else
{ your code here....}
}

把Timer的intervalue设置成1s就够了
tghost333 2005-05-04
  • 打赏
  • 举报
回复
用两个函数分别控制WM_NCLBUTTONDBLCLK和WM_NCLBUTTONLCLK
类似:
void __fastcall Change(TMessage &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_NCLBUTTONDBLCLK, TMessage, Change);
END_MESSAGE_MAP(TForm);

1,222

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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