wxWidgets - 无模式wxDialog

时间:2012-12-19 21:13:56

标签: c++ user-interface pointers dialog wxwidgets

我正在创建自己的wxDialog子类,当它用作无模式对话框时效果很好:

AddDialog newAddDialog = new AddDialog(this, wxID_ANY, _T("Dialog Title"), wxDefaultPosition, wxDefaultSize, 0);
if (newAddDialog.ShowModal() == wxID_OK)
{
//do something
}

使用ShowModal()时,程序流程将停止,直到按下OK或Cancel。我需要显示对话框,但不要停止GUI的流程,所以我尝试了这个:

AddDialog newAddDialog = new AddDialog(this, wxID_ANY, _T("Dialog Title"), wxDefaultPosition, wxDefaultSize, 0);
if (newAddDialog.Showl() == wxID_OK)
{
//do something
}

使用Show()时,对话框会短暂显示然后消失。我认为这可能是一个范围问题,所以我使用了newAddDialog的指针。然后,出现对话框,当我单击“确定”或“取消”时,对话框将关闭,但即使单击“确定”,if语句代码也不会执行。

有谁知道怎么办?感谢。


进一步澄清:

我的Dialog子类中有虚拟void函数,我在另一个类中覆盖。当我覆盖时,我似乎无法使事件工作,但是,如果我在实际的Dialog子类中有空,我得到事件调用。这似乎是一个全面的问题,但我不知道问题会是什么。这不是我在OnInit()调用中调用的主要GUI - 这可能是个问题吗?

2 个答案:

答案 0 :(得分:0)

ShowModal阻止程序的执行并返回结果(如wxID_OK)。另一方面,Show只显示对话框并立即返回,因此您无法从其返回值检查结果(用户按下按钮的内容)。相反,你必须通过发送一个来自对话框的事件或类似的东西来传达该对话框的结果。

答案 1 :(得分:0)

AddDialog newAddDialog = new AddDialog(...

这会编译吗?真的?

'new'运算符返回一个指向void的指针,因此你发布的代码看起来确实很奇怪。

通常的做法是:

AddDialog * newAddDialog = (AddDialog *) new AddDialog( ...

或者

AddDialog newAddDialog( ...