Model view controller 双击时未按预期调用Windows CWnd::OnLButtonDown

Model view controller 双击时未按预期调用Windows CWnd::OnLButtonDown,model-view-controller,winapi,mfc,Model View Controller,Winapi,Mfc,我正在开发一个交互式MFC应用程序,它使用我自己的算法显示一个3D对象,基本上使用MFC作为框架,但使用了大量的pDC->Polygon()、pDC->Rectangle()、pDC->DrawText()等调用 用户界面有许多可点击的区域,这些区域都工作得很好。但是,屏幕上的旋转、旋转等控制。3D图像激励用户双击、三次单击以及其他操作 我99%肯定的是,在Windows(或其他)确定操作不是双击,或双击时,而只是一次之前,不会调用CWnd::OnLButtonDown()。这是一系列的点击,每

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

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

我99%肯定的是,在Windows(或其他)确定操作不是双击,或双击时,而只是一次之前,不会调用
CWnd::OnLButtonDown()
。这是一系列的点击,每点击一秒就会产生一个通知。用户体验是断断续续的旋转。暂时的解决办法是让用户在点击之间轻轻移动鼠标,这样可以解决问题,但相当不友好


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

我想你已经把它向后了-第一次点击变成了WM_LBUTTONDOWN,第二次变成了双击

要防止窗口生成WM_lbuttondblck消息,请从窗口中删除CS_DBLCLKS样式

这些都在文档中进行了解释


编辑:我说错了,CS_DBLCLKS是类样式,而不是窗口样式。我认为您不能删除它,您必须创建一个不包含它的新窗口类。它是由MFC提供的-请参见本页。

只需添加一个答案,此方法对我有效:

    WORD dwStyle = GetClassLongPtr(handle, GCL_STYLE);
    dwStyle &= ~CS_DBLCLKS;
    SetClassLongPtr(handle, GCL_STYLE, dwStyle);
可以使用这些函数编辑特定窗口的WNDCLASSEX样式结构,以删除双击事件并更正单击行为



事实上,您是对的,在第一次、第三次等点击时会调用OnLButtonDown,而第二次、第四次等点击则不会传递。任何地方都没有CS_DBLCLK;我跨过CreateWindow(),它的样式位是从我的
CMainFrame::PreCreateWindow
:WS_OVERLAPPEDWINDOW | WS_SYSMENU | WS|u BORDER设置的,也许其中一个对我来说是“扩展的”?请原谅我迟迟没有接受你的答案。我没有意识到复选标记轮廓是一个控件…作为一个边线绘制3d对象使用多边形调用通过dc将非常缓慢。如果您使用GetBitmapBits调用并编写自己的三角形扫描转换器,您将获得更好的速度。。。当然,也可以使用GL或DX。