代码之家  ›  专栏  ›  技术社区  ›  wallyk

双击时未按预期调用Windows cwnd::OnlButtonDown

  •  2
  • wallyk  · 技术社区  · 15 年前

    我正在开发一个交互式的MFC应用程序,它使用我自己的算法显示一个3D对象,基本上使用MFC作为框架,但是使用很多 pDC->Polygon(), pDC->Rectangle(), pDC->DrawText() 等来电。

    用户界面有许多可点击的区域,它们都工作得很好。但是,屏幕上的旋转、旋转等控制。3D图像激励用户双击、三次单击等。

    我99%肯定 CWnd::OnLButtonDown() 直到Windows(或其他任何操作)确定操作不是双击或双击时才调用,但只有一次。这是一系列的单击操作,每秒单击一次都会收到通知。用户体验是口吃的旋转。暂时的解决方法是让用户在点击之间轻轻移动鼠标,这就解决了问题,但相当不友好。

    应用程序可以 双击事件挂钩。也许有办法进一步禁用潜在的双击处理?或者有一种更低级的方法来捕获鼠标按钮?

    2 回复  |  直到 8 年前
        1
  •  2
  •   Mark Ransom    15 年前

    我想你倒过来了——第一次点击是作为wm按钮通过的,第二次点击变成了双击。

    要防止窗口生成wm_lButtondblck消息,请从窗口中删除cs_ldlcks样式。

    这一切都解释在 WM_LBUTTONDBLCLK 文档。

    编辑: 我说错了,cs_dblcks是一种类样式,而不是窗口样式。我认为你不能删除它,你必须创建一个不包含它的新窗口类。它是由MFC提供的-请参阅本页 http://msdn.microsoft.com/en-us/library/a77269ff(VS.80).aspx .

        2
  •  1
  •   shuji    8 年前

    为了增加一个答案,这个方法对我很有效:

        WORD dwStyle = GetClassLongPtr(handle, GCL_STYLE);
        dwStyle &= ~CS_DBLCLKS;
        SetClassLongPtr(handle, GCL_STYLE, dwStyle);
    

    可以使用这些函数编辑特定窗口的wndClassX样式结构,删除双击事件并更正单击行为。

    GetClassLongPtr
    SetClassLongPtr