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

Windows 模式对话框窗口出现后,按钮丢失WM_LBUTTONUP,windows,winapi,Windows,Winapi,我有一个win32应用程序,主窗口上有一个按钮 当我点击鼠标左键时,我收到WM_LBUTTONDOWN消息,当我松开鼠标左键时,我收到WM_LBUTTONUP消息,这是正常的 但是,如果在处理消息WM_LBUTTONDOWN时,当我按住鼠标左键时,程序显示一个模式对话框窗口,则该按钮将永远不会收到WM_LBUTTONUP 这成为一个问题,因为在WM_lbuttonown中,程序做了一些需要在WM_LBUTTONUP中澄清的事情。现在,由于模态对话框,没有机会再清除了 有没有更好的方法来处理这个问

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

当我点击鼠标左键时,我收到WM_LBUTTONDOWN消息,当我松开鼠标左键时,我收到WM_LBUTTONUP消息,这是正常的

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

这成为一个问题,因为在WM_lbuttonown中,程序做了一些需要在WM_LBUTTONUP中澄清的事情。现在,由于模态对话框,没有机会再清除了


有没有更好的方法来处理这个问题?我试过设置捕捉,似乎仍然无法接收WM_LBUTTONUP。

这是很合理的。显示模式对话框时,它将启动自己的模式消息循环。因此它将接收WM_LBUTTONUP消息


您所面临的基本问题是,您正在显示模式对话框以响应WM_LBUTTONDOWN,而实际上您应该显示它以响应WM_LBUTTONUP。尝试在其他应用程序中按下按钮,并注意只有当按钮向上时才会发生该操作。您也应该这样做,并遵循平台标准。

这是非常合理的。显示模式对话框时,它将启动自己的模式消息循环。因此它将接收WM_LBUTTONUP消息


您所面临的基本问题是,您正在显示模式对话框以响应WM_LBUTTONDOWN,而实际上您应该显示它以响应WM_LBUTTONUP。尝试在其他应用程序中按下按钮,并注意只有当按钮向上时才会发生该操作。您也应该这样做,并遵循平台标准。

在其他地方弹出的模式对话框如何,比如在WM_定时器过程中,当我按住鼠标左键时,我认为会产生相同的影响,会松开WM_LBUTTONUP。一个真实的例子,当按下鼠标左键时,打开电源,当鼠标左键释放时,关掉电源,但是,主窗口在中间处理某个东西,并检测出什么原因出现错误并弹出消息窗口,然后我们丢失了WMLLButoUp。我仍然认为应该有一种方法来检测这种情况,并有一种方法来处理这种情况。对不起,我真的不明白这些。我想我已经解释了为什么你会看到你所看到的,我也解释了你应该如何处理按钮点击,也就是说,在调用操作之前,等待按钮启动。我想说的是,在WM_LBUTTONDOWN中处理/调用操作的程序需要/客户要求如果您显示一个响应WM_LBUTTONDOWN的模式对话框,然后模式消息循环将获得WM_LBUTTONUP消息。@liuhongbo如果您的客户有特定的需求,那么他们将自己设置为失败。Windows的工作方式与David解释的一样,没有任何改变。在其他地方弹出的模式对话框如何,比如在WM_定时器进程中,当我按住鼠标左键时,我假设会产生相同的影响,会松开WM_LBUTTONUP。一个真实的例子,当按下鼠标左键时,打开电源,当鼠标左键释放时,关掉电源,但是,主窗口在中间处理某个东西,并检测出什么原因出现错误并弹出消息窗口,然后我们丢失了WMLLButoUp。我仍然认为应该有一种方法来检测这种情况,并有一种方法来处理这种情况。对不起,我真的不明白这些。我想我已经解释了为什么你会看到你所看到的,我也解释了你应该如何处理按钮点击,也就是说,在调用操作之前,等待按钮启动。我想说的是,在WM_LBUTTONDOWN中处理/调用操作的程序需要/客户要求如果您显示一个响应WM_LBUTTONDOWN的模式对话框,然后模式消息循环将获得WM_LBUTTONUP消息。@liuhongbo如果您的客户有特定的需求,那么他们将自己设置为失败。Windows按照David解释的方式工作,没有任何改变。