使用NotifyIcon显示气球提示,使用BalloonTipClicked()时发现不管是使用鼠标左键或右键点击气球都会引发改事件,有什么办法区分左右键,从而使左键点击则执行事件,右键点击则不执行?

解决方案 »

  1.   

    BalloonTipClicked 的 e参数
      

  2.   

    LRESULT CnidDlg::OnBackGround(WPARAM wParam,LPARAM lParam)
    {
    //新建一个菜单资源,定义了在任务栏图标上点击右键和左键不同的动作
    switch(lParam)
    {
    case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”

    CMenu menu;
    menu.LoadMenu(IDR_MENU1);
    CMenu* pSubMenu = menu.GetSubMenu(0);
    ::SetMenuDefaultItem(pSubMenu->m_hMenu, 0, TRUE);
    CPoint mouse;
    GetCursorPos(&mouse);
    ::SetForegroundWindow(this->m_hWnd);
    ::TrackPopupMenu(pSubMenu->m_hMenu, 0, mouse.x, mouse.y, 0,
    this->m_hWnd, NULL);
    break;
    }
    case WM_LBUTTONDBLCLK:
    {
    this->ShowWindow(SW_SHOWNORMAL);
    break;
    }
    }
    return 0;
    }用MFC似乎简单一点,能区分左右键
      

  3.   

    MPC什么啊?C++?
    BalloonTipClicked 的 e参数不能转换成MouseEventArgs!
      

  4.   

    如果你要用微软的那个 NotifyIcon 玩意是不行的。你可以考虑自己写一个 NotifyIcon,这样你自己处理消息事件,根据消息码自然知道是左键还是右键点击了 BallonTip。不过,我印象中似乎最底层的 BallonTipClick 消息是没有区分鼠标到底是那个按钮点击了的。倒是对通知区的图标有所区分。
      

  5.   

    最简单的理由:因为90%的用户都会去用单击键(对右手习惯的人来说,就是“左”键;反之用左手习惯的是“右”键)来点击气球消息,不会有哪个人用 ContextMenu 键(也就是右手习惯的右键)去点那个气球……
      

  6.   

    if (e.Button == MouseButtons.Left),判断左键