2014-03-24 47 views
0

我有一箇舊的MFC應用程序,它具有跨越200行的OnCreate函數。CMainFrame中的消息框OnCreate

CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 
... 
PostMessage(LOAD_IMAGES,0,0); 
... 
ValidatePermissions(); 
... 
} 

LOAD_IMAGES是用戶的消息,其處理程序嘗試加載其已從上次會議未保存的圖片。基本上這嘗試創建一個新的CDocument ...

ValidatePermissions功能彈出一個模式消息框,如果它發現任何權限丟失..

我注意到,如果我有模式消息框彈出,然後我得到一個崩潰時LOAD_IMAGES處理程序觸發(因爲它不能創建一個CDocument,我認爲這是因爲CMainFrame尚未創建)。

我該如何處理這種情況。是否有任何文檔暗示OnCreate中沒有模態消息框?

回答

1

嘗試將調用移動到LOAD_IMAGES的消息處理程序的ValidatePermissions。這應該讓窗口創建完成,然後讓消息框抽取消息。

+0

所以基本上我應該移動任何可能導致模式消息框從PostMessage調用運行的任何東西? – manimatters

+0

消息框泵信息,它引入了重新進入你的wndproc的可能性(例如,當你還在另一個消息處理程序中時調用MFC消息處理程序。)PostMessage不是問題的原因:許多消息可能導致在消息期間重新進入框。 –

+0

好的,所以基本上如果有信息抽取,就有風險。 從postmessage調用調用消息框將允許OnCreate消息處理程序在消息箱泵啓動之前完成。 – manimatters