如何一次创建一个框架的实例

时间:2017-07-20 20:22:48

标签: c++ wxwidgets

我在我的c ++应用程序中使用wxWidgets。

我有一个wxGrid设置,用户可以在其中双击一个单元格,这将创建一个带有另一个网格的新窗口。

我在使用网格关闭并重新打开新窗口时出现问题。

void FeatureList::mouseDClick(wxGridEvent& event)
{
int n_row, n_col;
n_row = event.GetRow();
n_col = 0;

m_sCellValue = grid->GetCellValue(n_row, n_col); 

if ( frame == NULL ) // If frame is closed
{
    CreateCrackBoxFrame(m_sCellValue);
}
else{
    frame->Raise();  // otherwise bring it to the front.
}
}

void FeatureList::CreateCrackBoxFrame(wxString m_sCellValue)
{
frame = new CrackBoxFrame(m_pvFeatures, m_sCellValue, m_bDisplayInMetric);
frame->Show(true);
}

CrackBoxFrame::CrackBoxFrame(vector<Feature> *pvFeatures, wxString CellValue, 
bool bDisplayInMetric)
: wxFrame(NULL, wxID_ANY, wxT("CrackBoxes"),wxDefaultPosition, wxSize(725, 
400))
{
 }

如果我关闭新窗口,然后点击另一个单元格我的程序崩溃

1 个答案:

答案 0 :(得分:1)

为此你有几个选择:

  1. 保持线条的向量,当点击网格中的线条时,检查是否从向量中单击了相应的线条,并且只有在未单击时才允许该事件发生。

  2. 处理完点击后禁用该行,不要让第二行通过。

  3. 在网格中的每一行添加复选框,并在第一次单击时进行检查。在随后的 - 检查是否未检查该值。

  4. 你选择......

    谢谢。

    编辑:

    void FeatureList::CreateCrackBoxFrame(wxString m_sCellValue)
    {
        frame = new CrackBoxFrame(m_pvFeatures, m_sCellValue, m_bDisplayInMetric);
        frame->Show(true);
        frame->Bind( wxEVT_CLOSE, &FeatureList::OnCrackBoxClose, this );
    }