2014-09-10 157 views
0

我有一个隐藏对话框的任务,但我需要点击属于这个对话框的按钮来执行一些功能,然后才能进入下一个对话框。MFC:有没有办法没有On_Bn_Clicked()事件的活动按钮?

但是当我隐藏这个对话框时,我无法点击按钮。没有任何方法来实现这个没有On_Bn_Clicked()事件的按钮?我的意思是,当对话框被调用时,按钮也被激活。

感谢您的帮助。

+0

为什么你想单击一个按钮而不使用事件处理程序。如果我误解了你的问题,只需使用带有WM_COMMAND代码的SendMessage,并且按钮后面的动作发生。 – xMRi 2014-09-11 10:01:40

回答

1

当您单击按钮时,会发送几条Windows消息。重要的是WM_LBUTTONDOWN,WM_LBUTTONUP它告诉按钮你点击了鼠标左键。然后过了一段时间,WM_COMMAND消息被发送到父窗口来处理按钮点击。那时你的ON_COMMAND()MFC处理程序被调用。 MFC绝大部分都会将这些内容全部从您这里抽象出来。

你可以去使用Win32 SendMessage API来模拟它,但是如果消息泵被阻塞,那么当你认为它会被点击时,你的按钮可能不会被点击。如果你想快速回答你的问题,那么这是一个“完成它”的方法。这将是这个样子:

SendMessage(button.GetSafeHwnd(), WM_LBUTTONDOWN, MK_LBUTTON, 0); SendMessage(button.GetSafeHwnd(), WM_LBUTTONUP, MK_LBUTTON, 0);

我觉得更明智的做法是采取在这ON_BN_CLICKED()事件处理程序的代码,并简单地将其移动到可重复使用的功能。这样,您可以从程序中的任何位置调用On_Bn_Clicked()中的代码。

+0

在Windows上使用SendMessage输入消息不是一个“真正的好”的想法。当使用这个时,你也可以使用带WM_COMMAND消息的SendMessage。 – xMRi 2014-09-11 10:02:35

+0

感谢您的帮助。我解决了这个问题。只需实现代码,但不要将它们带到On_Bn_Clicked()。 – vinhdq91 2014-09-13 10:18:42

0

直接从代码中调用On_Bn_Clicked()。这样做没有坏处。 (我想你不想用鼠标实际点击隐藏的按钮......)

+0

是的,但我只是实现代码,不需要调用On_Bn_Clicked()。谢谢你,我解决了我的问题:) – vinhdq91 2014-09-13 10:20:39

相关问题