2011-11-25 78 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