我尝试(自4天以来)通过ClickOnEvent在菜单项中打开wxDialog(在自己的类中声明)。
我已经设法得到一个空的wxDialog并打开它Nonmodal,所以我可以同时使用MainFrame。
但是当我尝试将面板添加到wxDialog但是出现错误时:
错误:无法直接调用构造函数'SideFrame :: SideFrame'[-fpermissive]
void MainFrame::f_SF2(wxCommandEvent& event)
{
SideFrame::SideFrame("SF2")
: wxDialog(NULL, -1, title, wxDefaultPosition, wxSize(250, 230))
{
sf_p = new wxPanel(this, -1);
wxColour col1;
col1.Set(_T("#000000"));
sf_p->SetBackgroundColour(col1);
sf2->Show();
}
}
当我在下面尝试时,我收到了另一个错误:
对'SideFrame :: SideFrame(wxString const&)'的未定义引用
void MainFrame::f_SF2(wxCommandEvent& event)
{
SideFrame *sf2 = new SideFrame(_T("SF2"));
wxPanel *sf_p = new wxPanel(sf2);
wxColour col1;
col1.Set(_T("#000000"));
sf_p->SetBackgroundColour(col1);
sf2->Show();
}
有人可以帮助我,并说我该怎么做? 我正在使用wxWidgets 2.9.4和g ++ - 编译器
答案 0 :(得分:0)
ctor不能直接在C ++中调用。请改用运算符new
。
检查SideFrame::SideFrame
的签名。
下面是一个可能有用的示例。
#include <wx/wx.h>
class SideFrame : public wxDialog
{
public:
SideFrame(wxString sTitle) : wxDialog(NULL, wxID_ANY, sTitle) {}
protected:
void OnClose(wxCloseEvent &) {
this->Destroy(); // Ask wxWidgets to `delete this;`
}
private:
wxDECLARE_EVENT_TABLE();
};
wxBEGIN_EVENT_TABLE(SideFrame, wxDialog)
EVT_CLOSE(SideFrame::OnClose)
wxEND_EVENT_TABLE()
class CApp : public wxApp
{
public:
bool OnInit() {
wxFrame * frame = new wxFrame(NULL, wxID_ANY, "demo");
// Double click the main frame to create a modeless dialog.
frame->Bind(wxEVT_LEFT_DCLICK, [](wxMouseEvent &)->void{
// Create and display a modeless dialog.
SideFrame * sf2 = new SideFrame("untitled"); // Note, a modeless dialog MUST be dynamically-allocated.
(new wxPanel(sf2))->SetBackgroundColour(wxColour("#000000"));
sf2->Show(true);
});
frame->Show(true);
return this->wxApp::OnInit();
}
};
DECLARE_APP(CApp)
IMPLEMENT_APP(CApp)
请注意如何创建和删除无模式对话框。通常我们将它创建为普通的动态对象,然后以合适的处理方法释放它,我们将this->Destroy();
。