在模式对话框窗口出现后,按钮丢失了WM_LBUTTONUP

时间:2014-07-23 13:51:44

标签: windows winapi

我有一个win32应用程序,主窗口上有一个按钮。

当我单击鼠标左键时,我收到WM_LBUTTONDOWN消息,当我释放鼠标左键时,我收到WM_LBUTTONUP消息,这是正常的。

但是,如果在处理消息WM_LBUTTONDOWN时,(当我按住鼠标左键时),程序会显示一个模态对话窗口,该按钮将永远不会收到WM_LBUTTONUP。

这成为一个问题,因为在WM_LBUTTONDOWN中,程序执行了一些需要在WM_LBUTTONUP中清除的内容。现在因为模态对话框,再也没有机会清理了。

有没有更好的方法来解决这个问题?我试过SetCapture,似乎仍然无法接收WM_LBUTTONUP。

1 个答案:

答案 0 :(得分:5)

这很合理。当您显示模态对话框时,它会启动自己的模态消息循环。因此它将收到WM_LBUTTONUP消息。

您遇到的根本问题是,您正在显示模式对话框以回复WM_LBUTTONDOWN,而实际上您应该在回复WM_LBUTTONUP时显示该对话框。尝试按下其他应用程序中的按钮,并注意只有当按钮按下时才会执行操作。您应该这样做并遵循平台标准。