模态对话框继续添加文本
C++ Modal dialog box continuing adding texts
我有一个对话框,在它里面,它有OK和Cancel按钮,然后它也有一个ListBox来显示两列的文本。我想在对话框显示后继续向列表框中添加文本。我该怎么做呢?因为在我调用DoModal()来显示对话框之后,代码没有继续执行。或者我应该创建两个线程(一个是显示对话框,而另一个线程继续添加文本到对话框)?
让你的对话框'拉'它需要的数据,也许每秒钟轮询数据源与窗口消息,或每100毫秒左右。或者,如果你走"两个线程"路线(更好但更复杂的选项),让你的数据源在有新数据时向你的对话框发送一个窗口消息,然后让对话框获取它需要的数据。这样做的原因是,使用现有的CDialog基础结构来获得一个行为像实际对话框的窗口要容易得多,而不是构建一个行为像对话框但不是真正的模态窗口。
如果你选择两个线程的路线,你的分工应该是:一个线程做所有的UI工作(包括显示对话框),另一个线程"生成"数据并让UI知道何时有新数据。所以工作线程不应该做任何与UI相关的事情,也不应该直接调用对话框上的任何方法——你不能从多个线程访问窗口。唯一的跨线程窗口通信应该通过窗口消息进行(即,使用::SendMessage())。所以当然不要做一些像myDialog->m_theList.AddString("blah")从另一个线程,或类似的东西。
显示对话框会在关闭对话框之前暂停进一步的执行。而不是显示它的模态,显示它的正常,但使它始终在顶部,所以你可以继续执行代码后,调用DoModal()
。或者,在调用DoModal()
之前,在框中填充所需的所有信息。
如果你决定采用"两个线程"的方法,你会发现MFC对话框上的控件不应该从创建对话框的线程以外的线程更新或访问。即使在另一个线程中有指向这些控件的指针,访问它们也不是线程安全的。无论对话框是否为模态,该规则都适用。
相反,您的第二个线程需要向对话框窗口发送PostMessage或SendMessage,因此更新发生在创建对话框的线程上(很可能是应用程序的主UI线程)。
- 从文本文件在组合框中添加项目
- 定义宏以将前缀 0x 添加到十六进制字符串文本
- 如何调用继承的重载运算符<<并在派生类的输出中添加更多文本?
- 如何从 c++ winrt UWP 应用中的代码将文本添加到富文本块
- c++ 添加具有写入文件错误的文本变量
- 在 MFC 组合框中设置文本,而不将其添加到列表中
- 将时间戳添加到文本文件中的空行中
- 将文本添加到鼠标位置时,请单击“给出分割故障”
- 如何在C++的文本变量中添加变量值
- 如何使用键盘输入和sf ::文本在SFML中添加一种文本框以显示文本字符串
- 将文本注释添加到exe文件mingw
- 使用FreeImage向图像添加文本
- 将文本添加到另一个程序文本框 C++
- 问答游戏/单击按钮将文本添加到标签
- 如何将文本添加到QTextEdit的顶部
- 从数据库检索后,将其他文本添加到组合框中
- 如何在Qt中使用线程将文本添加到文本编辑器中
- 使用QPushButton将文本添加到QTextEdit
- 为什么将文本添加到 RichEdit 窗口会冻结它
- C++将字符串文本添加到字符文本