最近项目中有个托盘左键单击、双击事件,但发现双击的时候总是先弹出单击的菜单(这个是正常的,因为双击必定先触发单击事件嘛),那如何避免这样的情况呢....
方案1 : 用线程处理单击事件,延时判断,如果是双击,则不显示单击的菜单
首先在 对话框中添加 BOOL m_bLButtonFlag; // 0 表示单击 1 表示双击
然后再
LRESULT XXX::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
case WM_LBUTTONDOWN:
{
// 显示菜单
afxbeginthread()...
return TRUE;
}
case WM_LBUTTONDBLCLK: // 恢复显示
{
m_bLButtonFlag = TRUE;
...
}
然后再线程中处理单击的事件信息
方案2 ,延时处理,SETTIMER(), 在ONTIMER 中处理相应的事件
if (LOWORD(lParam) == WM_LBUTTONDOWN )
{
SetTimer(111,500,NULL);
}
void CMy12314Dlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if (m_showflag == false )
{
CMenu menu, *pSubMenu;
if (!menu.LoadMenu(IDR_MENU2)) return ;
if (!(pSubMenu = menu.GetSubMenu(0))) return;
// Make first menu item the default (bold font)
// ::SetMenuDefaultItem(pSubMenu->m_hMenu, 0, TRUE);
//Display and track the popup menu
CPoint pos;
::GetCursorPos(&pos);
::SetForegroundWindow(nd.hWnd);
::TrackPopupMenu(pSubMenu->m_hMenu, 0, pos.x, pos.y, 0, this->GetSafeHwnd(), NULL);
}
else
{
m_showflag = true;
}
问题: 在线程中菜单显示一直没解决,后来改用定时器,单击菜单可以正常显示。