簡體   English   中英

防止雙擊MFC-Dialog按鈕

[英]Prevent double click on MFC-Dialog button

我正在使用MFC C ++開發Autocad / Bricscad-Dialogs。 知道我發現了一個更大的問題。 有一個對話框,用於設置“特殊”繪圖對象的元數據。 我用這個對話框(在一個循環中)更新每個'特殊'繪圖對象的數據。 因此,如果您有十個“特殊”繪圖對象,則相同的對話框將打開十次(連續)。 現在我遇到的問題是用戶有時會雙擊“OK”-Button。 但是如果雙擊足夠快,則會自動單擊此對話框的下一個實例的“確定” - 按鈕。 我嘗試了很多(例如,如果點擊它就禁用按鈕),但沒有解決我的問題。 也許你們中的某個人有個好主意。

最好的問候,西蒙

當您打開一個新對話框時,您可以在進入正常的消息循環之前刷新鼠標單擊消息的消息隊列,例如:

MSG msg;
while (PeekMessage(&msg, hWndDlg, WM_LBUTTONDOWN, WM_LBUTTONDOWN, PM_REMOVE));

我試圖擴展喬納森波特的答案。

當您打開一個新對話框並調用OnInitDIalog時,只需從隊列中刪除鼠標消息並等待1/10秒。

MSG msg;
DWORD dwStart = ::GetTickCount():
while (PeekMessage(&msg, hWndDlg, WM_LBUTTONDOWN, WM_LBUTTONDOWN, PM_REMOVE)!=0 ||
       (::GetTickCount() - dwStart) < 100))
      ;

使用PeekMessage的技巧可行,問題是只要“雙擊”就需要運行循環。 如果點擊距離為1/10秒,則需要在這段時間內刪除所有鼠標點擊。

並且OnInitDialog也是正確的位置。 您可以將此刷新擴展到所有鼠標消息WM_MOUSEFIRST / WM_MOUSELAST ...以獲取所有點擊。

啟動下一個對話框時延遲1/10秒並不昂貴或煩人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM