【问题标题】:To restrict ShowWindow() of dialog限制对话框的 ShowWindow()
【发布时间】:2011-04-28 11:40:57
【问题描述】:

我在 MFC(Wince 平台)中有一个对话框,上面有一个列表框。我需要在对话框变得可见后生成一个线程。但有时似乎线程在 ShowWindow() 完全执行之前就已启动。我如何限制线程的执行,直到对话框在屏幕上完全可见。

问候,

穆克什

【问题讨论】:

  • ShowWindow 不用于对话框。
  • 但它的工作原理...据我所知,对话框是一种窗口,它不是特定于任何窗口的窗口。显示窗口也适用于所有类型的子窗口。喜欢(按钮、列表、编辑框等)
  • 确实,对于初学者来说,如果您使用 MFC,则根本不应该使用 ShowWindow。但是“对话框”通常是指模态对话框,在这种情况下,您将在 MFC 中使用DoModal
  • 我有对话框,上面有列表框..并且该对话框是无模式对话框。所以我在某些按钮单击事件上隐藏并显示对话框。所以这就是为什么在显示窗口后我需要为另一个线程启动一个线程..
  • 你真的不应该在另一个线程中进行绘图。所有 UI 操作,包括填充控件和显示窗口,都应限制在 UI 线程中。

标签: winapi mfc windows-ce


【解决方案1】:

您不应该使用第二个线程进行绘图(正如其他人所说)。

如果您想在另一个线程中发生操作时更新窗口,则在另一个线程中使窗口无效以强制重绘,然后在重绘发生时使用任何新值更新窗口。这样,您就不必对您遇到问题的绘制操作进行任何可怕的同步。

【讨论】:

    【解决方案2】:

    您可能希望在第一次激活对话框时生成一个线程。您需要使用其中一条 WM_ACTIVATE 消息

    【讨论】:

    • 嗯好的,但它不是那样的..对话框正在创建一次。我正在使用模态较少的对话框。我已经在内存中创建了。所以点击按钮我需要显示和隐藏窗口。所以就像在一个按钮上单击显示窗口并启动线程,在另一个按钮上单击隐藏窗口然后停止线程。所以对于停止按钮它的工作正常,但是在完成 ShowWindow() 调用之前启动按钮线程开始
    【解决方案3】:

    要绝对确保线程在对话框可见的同时启动,只需将线程作为第一次处理 WM_PAINT 时执行的最后一件事启动即可。

    【讨论】:

    • 感谢 codebolt,你的意思是说我需要调用启动线程作为 OnPaint() 函数中的最后一条语句......是吗?
    • 是的,但是你应该只做一次(OnPaint 会被调用很多次)。所以做一个测试,看看你是否已经启动了线程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 2023-04-09
    • 2021-05-16
    • 2013-07-25
    • 1970-01-01
    相关资源
    最近更新 更多