2011-02-23 80 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

我已經改變了線程的優先級,以低於正常當線程執行的第一次我的線程設置爲正常修道院。這工作正常。感謝您的答覆。

相關問題