2011-02-23 81 views

回答

16

您可以简单地在OnInitDialog函数中创建线程。没有理由通过去搜索一个不同的函数来过度复杂,或者将初始化代码分成两部分。 (还有不是任何这样的功能,因为有要发送没有相应的Windows消息。)

如果你希望得到您的对话框,在屏幕之前创建的线程,你可以只显示它手动使用ShowWindow function。例如:

ShowWindow(SW_SHOW); 
RedrawWindow(); 

也看到这个帖子的雷蒙德陈:Waiting until the dialog box is displayed before doing something

+0

我发现我还需要调用'CenterWindow()',因为调用ShowWindow导致左上角的对话框。 – Klox 2016-06-25 17:32:43

+0

@klox嗯,这不应该是必要的。对话框将自动以其所有者窗口为中心。这发生在内部MFC函数'_AfxPostInitDialog'中,它在'OnInitDialog'后面运行。如果'OnInitDialog'函数没有改变对话框的坐标,'_AfxPostInitDialog'实际上会调用'CenterWindow'。但明确地调用它也不会伤害,所以无论工作如何。考虑到多显示器系统,请确保您将其置于合理的位置。始终以主显示器为中心是错误的决定。 :-) – 2016-06-26 07:02:36

+0

我没有所有者窗口(对话框是唯一的窗口),但是您的描述有助于解释我看到的行为变化。 – Klox 2016-06-27 21:18:09

0

OnInitDialog()是初始化时调用的主要函数(与WM_CREATE相关)。

为什么你不能在那里创建你的线程?

+0

我在onintidialog函数内部创建了两个线程,但是当我运行该对话框时,对话框非常缓慢。因此,我在内部创建线程,即5ms时间后对话形成,然后线程将开始工作正常。所以我认为,除了在定时器中创建线程以外,如果在创建dialo之后还有其他任何函数被调用,那么我可以将我的代码放在那里。是否存在任何函数? – Suri 2011-02-23 08:23:48

+1

对'WM_INITDIALOG'的反应是不是'OnInitDialog'? – 2011-02-23 08:26:40

0

我已经改变了线程的优先级,以低于正常当线程执行的第一次我的线程设置为正常修道院。这工作正常。感谢您的答复。

相关问题