2011-05-06 42 views
1

與上次相似的問題。我運行代碼,退出它。圖形用戶界面消失,它似乎已經完全退出,但我檢查我的進程列表和代碼仍然存有內存。wxDialog工作正常,但wxFileDialog調用導致程序無法終止

我縮小了對wxFileDialog的調用範圍。我不明白我做錯了什麼,因爲我以類似的方式打電話給我打電話給wxDialog。 wxDialog調用不會導致此問題,但wxFileDialog確實會導致此問題。

正常工作:

// Help Dialog 
void MyFrame::OnHelp(wxCommandEvent& WXUNUSED(event)) 
{ 
    wxBoxSizer *topsizer; 
    wxHtmlWindow *html; 
    wxDialog dlg(this, wxID_ANY, wxString(_("Help"))); 

    topsizer = new wxBoxSizer(wxVERTICAL); 

    html = new wxHtmlWindow(&dlg, wxID_ANY, wxDefaultPosition, 
    wxSize(380, 160), wxHW_SCROLLBAR_NEVER); 
    html->SetBorders(0); 
    html->LoadPage(wxT("data/help.html")); 

    // Fit the HTML window to the size of its contents 
    html->SetSize(html->GetInternalRepresentation()->GetWidth(), 
       html->GetInternalRepresentation()->GetHeight()); 

    topsizer->Add(html, 1, wxALL, 10); 

    wxButton *but = new wxButton(&dlg, wxID_OK, _("OK")); 
    but->SetDefault(); 

    topsizer->Add(but, 0, wxALL | wxALIGN_RIGHT, 15); 

    dlg.SetSizer(topsizer); 
    topsizer->Fit(&dlg); 

    dlg.CentreOnParent(); 
    dlg.ShowModal(); 
} 

原因問題:

void MyFrame::OnVidFile(wxCommandEvent& WXUNUSED(event)) 
{ 
    wxString caption = wxT("Choose a file"); 
    wxString wildcard = wxT("AVI files (*.avi)|*.avi"); 
    wxString defaultDir = wxGetHomeDir(); 
    wxString defaultFilename = wxEmptyString; 

    wxFileDialog dialog(this, caption, defaultDir, defaultFilename, wildcard, wxOPEN | wxFILE_MUST_EXIST); 
    dialog.CentreOnParent(); 

    if(dialog.ShowModal() == wxID_OK)  // problem 
     pathVid = dialog.GetPath().c_str(); 
} 

這將導致程序無法正常終止,即使我扔在一個dialog.Destroy();或dialog.Close();最後。他們看起來像對我來說類似的對話類的調用?

我在這裏錯過了什麼嗎?

回答

0

問題是與OpenCV(特別是HighGUI)的衝突。

爲了避免這個問題和OLE錯誤問題,重寫wxWidgets的初始化基類虛擬如下:

bool MywxApp::Initialize(int& argc, wxChar **argv) 
{ 
    ::CoUninitialize(); 
    return wxApp::Initialize(argc, argv); 
} 
相關問題