2009-11-01 55 views
2

我正在開發一個交互式MFC應用程序,它使用我自己的算法顯示一個3D對象,本質上使用MFC作爲框架,但使用大量的pDC->Polygon(), pDC->Rectangle(), pDC->DrawText()等調用。Windows CWnd :: OnLButtonDown沒有按預期方式調用雙擊

用戶界面有許多可點擊的區域,所有這些都很好用。然而,用於旋轉,旋轉等等的3D圖像的屏幕控件激勵用戶雙擊,三擊以及超出。

我99%的肯定,CWnd::OnLButtonDown()不被調用,直到Windows(或其他)已決定該操作不是雙擊或雙擊,但只有一次。這是一系列點擊每秒鐘點擊一次通知的結果。用戶體驗是結結實實的旋轉。臨時解決方法是讓用戶在點擊之間稍微移動鼠標 - 它解決了問題,但是不友好。

應用確實雙擊事件掛鉤。也許有辦法進一步禁用潛在的雙擊處理?或者,也許有更低級別的方法來捕獲鼠標按鈕?

+0

作爲使用多邊形的一邊繪製3D對象的調用通過DC會很慢。如果您使用GetBitmapBits調用並編寫您自己的三角形掃描轉換器,您將獲得更好的速度......或者當然只需使用GL或DX。 – Goz 2009-11-03 07:44:17

回答

2

我想你已經倒過來了 - 第一次點擊作爲WM_LBUTTONDOWN得到,第二次點擊變成雙擊。

要防止窗口生成WM_LBUTTONDBLCLK消息,請從窗口中刪除CS_DBLCLKS樣式。

這在WM_LBUTTONDBLCLK文檔中有所解釋。

編輯:我錯過了,CS_DBLCLKS是一種類風格,而不是窗口風格。我不認爲你可以刪除它,你必須創建一個不包含它的新窗口類。它由MFC提供 - 請參閱此頁http://msdn.microsoft.com/en-us/library/a77269ff(VS.80).aspx

+0

事實上,你是正確的,OnLButtonDown 調用的第一次,第三次等點擊,第二次,第四次等點擊不傳遞。 任何地方都沒有CS_DBLCLKS;我跨過了CreateWindow(),它具有從我的'CMainFrame :: PreCreateWindow'中設置的樣式位:WS_OVERLAPPEDWINDOW | WS_SYSMENU | WS_BORDER 也許其中之一是「擴大」的我? – wallyk 2009-11-03 05:40:54

+0

原諒我延遲接受你的答案。我沒有意識到複選標記大綱是一個控件.... – wallyk 2009-11-13 04:51:00

1

我想補充一個答案,這種方法爲我工作:

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

您可以使用這些功能來編輯WNDCLASSEX式結構爲特定的窗口取出雙擊事件和糾正單一的點擊行爲。

GetClassLongPtr
SetClassLongPtr

相關問題