我有一个win32应用程序,主窗口上有一个按钮。
当我单击鼠标左键时,我收到WM_LBUTTONDOWN消息,当我释放鼠标左键时,我收到WM_LBUTTONUP消息,这是正常的。
但是,如果在处理消息WM_LBUTTONDOWN时,(当我按住鼠标左键时),程序会显示一个模态对话窗口,该按钮将永远不会收到WM_LBUTTONUP。
这成为一个问题,因为在WM_LBUTTONDOWN中,程序执行了一些需要在WM_LBUTTONUP中清除的内容。现在因为模态对话框,再也没有机会清理了。
有没有更好的方法来解决这个问题?我试过SetCapture,似乎仍然无法接收WM_LBUTTONUP。
答案 0 :(得分:5)
这很合理。当您显示模态对话框时,它会启动自己的模态消息循环。因此它将收到WM_LBUTTONUP
消息。
您遇到的根本问题是,您正在显示模式对话框以回复WM_LBUTTONDOWN
,而实际上您应该在回复WM_LBUTTONUP
时显示该对话框。尝试按下其他应用程序中的按钮,并注意只有当按钮按下时才会执行操作。您应该这样做并遵循平台标准。