【发布时间】:2021-01-21 04:57:44
【问题描述】:
我正在使用 C++ 在 Visual Studio 2017 上开发基于对话框的 MFC 应用程序。
在我的应用程序中,我有一个显示文本的窗口。当我按下“开始”按钮时,我正在使用无限循环向它写入数字,并且我想在按下“停止”按钮时停止这个过程。窗口如下所示:
为此,在Start 按钮处理程序中,我使用while 循环来计算并在应用程序窗口中打印计数器。每次进入 while 循环时,我都会检查是否像这样按下了 ICD_BUTTON2(即停止按钮 ID):
void CEditableListControlDlg::OnBnClickedButton1()
{
int counter = 0;
while ((WM_COMMAND != IDC_BUTTON2)) {
counter++;
m_editCtrl.SetWindowTextA(std::to_string(counter).c_str());
}
}
我没有在Stop 按钮处理程序中输入任何代码。
但我的应用程序停止响应,我需要使用任务管理器将其关闭。可能是什么问题呢?也许这不是检查是否收到按钮单击消息的正确方法?
谢谢。
【问题讨论】:
-
我的橡皮鸭想知道
WM_COMMAND或IDC_BUTTON2如何在循环中改变它们的值 -
WM_COMMAND和IDC_BUTTON2是常量。你基本上是在写while (12 != 34) ...。 -
恕我直言,这需要在工作线程中完成吗?因此,在“开始”按钮中,您启动工作线程,将句柄传递给窗口,以便它可以发布消息以使用数字进行更新。然后,当您按下停止按钮时,您会杀死工作线程......否则,在按钮处理程序中使用
while只会阻塞系统。或者使用 cmets 中建议的计时器方法。 -
@AndrewTruckle 工作线程对我来说听起来有点矫枉过正。恕我直言,计时器在这里更合适。但毕竟我们不知道 OP 实际上 试图实现什么。因为只是增加一个数字对我来说听起来毫无意义。
标签: c++ visual-studio user-interface mfc dialog