首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >防止双击MFC对话框按钮

防止双击MFC对话框按钮
EN

Stack Overflow用户
提问于 2015-07-27 12:41:24
回答 2查看 1.7K关注 0票数 1

我正在开发MFC C++中的Autocad/Bricscad对话框。我发现了一个更大的问题。有一个对话框为“特殊”绘图对象设置元数据。我用这个对话框(在一个循环中)更新每个“特殊”绘图对象的数据。因此,如果您有十个“特殊”绘图对象,相同的对话框将打开十次(依次)。现在,我遇到了一个问题,用户有时双击"OK"-Button。但是,如果双击足够快,则该对话框下一个实例的"OK"-Button将自动单击。我试了很多次(例如,如果点击按钮就禁用它),但是没有解决我的问题。也许你们中有人有个好主意。

向你问好,西蒙

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-27 12:49:36

打开新对话框时,可以在进入正常消息循环之前刷新鼠标单击消息的消息队列,例如:

代码语言:javascript
运行
复制
MSG msg;
while (PeekMessage(&msg, hWndDlg, WM_LBUTTONDOWN, WM_LBUTTONDOWN, PM_REMOVE));
票数 2
EN

Stack Overflow用户

发布于 2015-07-28 07:09:09

我试着扩展乔纳森·波特的答案。

当您打开一个新对话框并调用OnInitDIalog时,只需从队列中删除鼠标消息并等待1/10秒钟。

代码语言:javascript
运行
复制
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秒并不昂贵,也不烦人。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31653383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档