[英]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.