【问题标题】:Detect WM_LBUTTONDBLCLK on a button of Toolbar检测工具栏按钮上的 WM_LBUTTONDBLCLK
【发布时间】:2021-08-30 17:56:45
【问题描述】:

我们如何检测工具栏上按钮上的WM_LBUTTONDBLCLK(例如ID_FILE_NEW)?

【问题讨论】:

  • 我很好奇。为什么要规避事件处理程序的使用?
  • 这种奇怪的 UI 功能在 IMO 中是个坏主意。您想区分按钮的简单单击和双击吗?
  • 我也想知道为什么需要这样做。
  • @希望的功能:使用 ID_FILE_NEW 您可以擦除(而不是删除)现有文档。如果您不小心将其删除或更改了意见,您可以使用恢复命令恢复。 IF DoubleClick on ID_FILE_NEW 这肯定被删除了我
  • @Jabberwocky 是的,我想区分工具栏按钮上的简单单击和 DoubleClick。如何在没有 PreTransalteMessage() 的情况下实现这一点?

标签: winapi mfc window


【解决方案1】:

PreTranslateMessage() 似乎是直截了当的。我已经用这个代码 sn-p 进行了测试。

BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
    // Detect Clicks in Toolbar detektieren
    if (pMsg->hwnd == m_wndToolBar.GetSafeHwnd())
    {
        if (pMsg->message == WM_LBUTTONDBLCLK)
        {
            CPoint pt = pMsg->pt;
            m_wndToolBar.ScreenToClient(&pt);

            int nIdx = m_wndToolBar.CommandToIndex(ID_FILE_NEW);
            CRect rcIdx;
            m_wndToolBar.GetItemRect(nIdx, &rcIdx);
            if (rcIdx.PtInRect(pt))
            {
                MessageBox(_T("yupii double click detected"));
                return TRUE;
            }
        }
    }
    return CMDIFrameWndEx::PreTranslateMessage(pMsg);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    相关资源
    最近更新 更多