2011-11-25 107 views
0

我已經添加了新的對話框和片段到我的wxApp,但現在當我關閉主框架時,主框架被刪除,但它永遠不會到達OnExit函數並被卡住。wxApp在關閉時卡住

當我嘗試 「打破一切」,這讓在此函數調用:

wxIdleWakeUpModule::MsgHookProc

在:

return CallNextHookEx(ms_hMsgHookProc, nCode, wParam, lParam);

你有關於如何解決任何建議, ?

+0

你設置的任何消息鉤子鉤住你的應用程序和不正確的清理? – Pete

+0

你是否在任何地方做任何wxIdleEvent處理?在那裏貼一個斷點,看它是否在不退出時被調用。也許它會導致更多的消息被髮布到事件隊列中,然後導致它再次空閒併發布更多事件,所以n。 – Pete

+0

皮特,我不知道什麼是消息鉤,所以也許我沒有。另外我自己生成的唯一事件是'wxCommandEvent',我不知道它是否也是wxIdleEvent – Arthur

回答

0

因此,在我逐一測試了我添加到我之前工作的程序中的所有代碼之後,我意識到我創建的wxDialog中有一個沒有父代,但這不是本意。

如此,是因爲它不會關閉,因爲在主窗口的一個還活着(即使它未顯示)

感謝所有您的幫助

0

使用關閉對話框時銷燬。這page說明如何在堆上創建對象時,做到這一點:

void AskUser() 
{ 
    MyAskDialog *dlg = new MyAskDialog(...); 
    if (dlg->ShowModal() == wxID_OK) 
     ... 
    //else: dialog was cancelled or some another button pressed 

    dlg->Destroy(); 
} 

當堆棧你不應該做什麼特別的事情上創建對話框。

+0

我不確定這是否會有所幫助,因爲在我的情況下,主框架在關閉時會自行銷燬,並摧毀所有的子框架。 – Arthur

+0

@jules你有沒有試過?在框架上也做這件事。當關閉幀調用'Destroy' – INS

+0

@jules另請參閱http://docs.wxwidgets.org/stable/wx_wxwindow.html#wxwindowdestroy和http://docs.wxwidgets.org/stable/wx_wxcloseevent.html#wxcloseevent – INS