1

我正在创建自己的 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 子类中有一个 void,我会收到事件调用。这似乎是一个过度的问题,但我不知道问题会是什么。这不是我在 OnInit() 调用中调用的主 GUI——这可能是个问题吗?

4

2 回答 2

0

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

于 2012-12-19T21:27:30.213 回答
0
AddDialog newAddDialog = new AddDialog(...

这能编译吗?真的吗?

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

通常的做法是:

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

或者

AddDialog newAddDialog( ...  
于 2012-12-20T02:32:21.633 回答