Visual c++ 对链接到静态文本框的控制变量内容的更改不会';不要在对话中思考

Visual c++ 对链接到静态文本框的控制变量内容的更改不会';不要在对话中思考,visual-c++,mfc,Visual C++,Mfc,我有一个CString变量,它链接到我的一个对话框中的一个静态文本框,我们称它为controlVariable。当我点击这个对话框中的开始按钮时,会发生一些事情。首先,我更新控制变量的内容(比如说“初始化开始”)。我执行UpdateData(FALSE),然后运行另一个类的初始化(启动一些线程)。这个初始化需要一些时间,所以这就是为什么静态文本框的内容在运行时需要反映这一点。但是直到函数完成,OnBnClickedStart()才会反映这些更改。我无法在对话框中反映对此控制变量的更改 我所尝试的

我有一个
CString
变量,它链接到我的一个对话框中的一个静态文本框,我们称它为controlVariable。当我点击这个对话框中的开始按钮时,会发生一些事情。首先,我更新控制变量的内容(比如说“初始化开始”)。我执行
UpdateData(FALSE)
,然后运行另一个类的初始化(启动一些线程)。这个初始化需要一些时间,所以这就是为什么静态文本框的内容在运行时需要反映这一点。但是直到函数完成,
OnBnClickedStart()
才会反映这些更改。我无法在对话框中反映对此控制变量的更改

我所尝试的:

  • UpdateData(FALSE)
    使用基本CString append函数(例如CString A=str1+str2;)更改控制变量并使用.format()更改控制变量(例如controlVariable.format(_T(“某些文本”);)后

  • 更改控制变量内容后运行
    OnPaint()

  • 我进入调试模式,程序运行到dialog类的BEGIN_MESSAGE_MAP部分,并在那里循环,直到我退出它。链接到我的控制变量的静态文本框的内容在我跳出BEGIN_MESSAGE_MAP之前不会更新。因此,在OnBnClickedStart()函数的末尾,静态文本框的内容甚至不会更新

示例代码:

CMyClass someClass;

CString controlVariable; // linked to some static text in the SomeDlgClass

void SomeDlgClass::OnBnClickedStart() 
{
    controlVariable = CString("System initialized\r\n"); // Also tried 
    UpdateData(FALSE); // Also tried OnPaint()

    someClass.initialize(); // I would like the static text box to update before I run this
}
因此,当我运行这个程序时,我的主对话框似乎是“冻结”的——我无法移动窗口或单击任何按钮。建议


谢谢。

如果您将
PostMessage(WM\u命令,按钮\u id)
作为
OnInitDialog
中的最后一项,该怎么办<代码>按钮\u id用于单击启动时的
按钮。您可以发布对话框的最低版本,使用
Sleep
模拟长时间等待。如果您正在运行长时间的操作,则系统可能会阻塞。将冗长的操作移动到工作线程中,或者可能使用UpdateWindow强制重新绘制。在了解Windows API编程之前,不要尝试编写MFC代码。消息处理是严格同步的。当您在消息处理程序中时,不会发送其他消息。这就是为什么在离开处理程序之前,您看不到所反映的更改。阻止GUI线程从来不是一个好主意。您需要卸载耗时的操作,建立适当的同步。这不是一项容易的任务。如果您将
PostMessage(WM\u命令,按钮\u id)
作为
OnInitDialog
中的最后一项内容,该怎么办<代码>按钮\u id
用于单击启动时的
按钮。您可以发布对话框的最低版本,使用
Sleep
模拟长时间等待。如果您正在运行长时间的操作,则系统可能会阻塞。将冗长的操作移动到工作线程中,或者可能使用UpdateWindow强制重新绘制。在了解Windows API编程之前,不要尝试编写MFC代码。消息处理是严格同步的。当您在消息处理程序中时,不会发送其他消息。这就是为什么在离开处理程序之前,您看不到所反映的更改。阻止GUI线程从来不是一个好主意。您需要卸载耗时的操作,建立适当的同步。这不是一项容易的任务。