Statusbar aktualisieren bringt mal absturz mal nicht
-
Hallo,
ich hab ein komisches Problem und hänge etwas fest bei der Lösung. Hier mein Grundgerüst:
CStatusBar m_wndStatusBar; static UINT BASED_CODE textID[] = { IDS_STATUSBAR_TEXT_0, IDS_STATUSBAR_TEXT_1 }; bool CMyTestProgrammDlg::OnInitDialog() { m_wndStatusBar.Create(this); m_wndStatusBar.SetIndicators(textID,2); // m_wndStatusBar.SetPaneInfo(1,IDS_STATUSBAR_PANE_1,SBPS_STRETCH ,0); m_wndStatusBar.SetPaneText(0,"Init1"); //kleiner test: Das klappt ohne Problem m_wndStatusBar.SetPaneText(1,"Init2"); // ... UpdateListView(); return TRUE; // return TRUE unless you set the focus to a control } void CMyTestProgrammDlg::OnBnClickedButton() { UpdateStatusBar(); } void CMyTestProgrammDlg::UpdateListView(void) //reagiert auf radio & checkboxen und soll setzt entsprechende Items auf // Status "markiert" { ... UpdateStatusBar(); //-> absturz } int CMyTestProgrammDlg::UpdateStatusBar(void) { int iItemCount = m_listFiles.GetItemCount(); if (iItemCount >0) { CString strAll = _T(""); strAll.Format("%d",iItemCount); m_wndStatusBar.SetPaneText(0, (" Es wurden " + strAll + " Dateien ausgewählt") ; }else m_wndStatusBar.SetPaneText(0, ("Keine Dateien vorhanden")); return 0; }
Wenn ich im Programm auf den Button klicke, dann wird die StatusBar ganz korrekt aktualisiert.
Wenn ich aus der UpdateListView() die UpdateStatusBar() aufrufe schmiert mir das Programm ab.Der Debugger führt mich dann in die CStatusBar.cpp
und hängt sich wohl bei der Prüfung des Fensters auf.--------------------------------------------------------------------- BOOL CStatusBar::SetPaneText(int nIndex, LPCTSTR lpszNewText, BOOL bUpdate) { ASSERT_VALID(this); ASSERT(::IsWindow(m_hWnd)); //Hier landet der der Debugger bei der Exception ...
Hat einer eine Idee wie ich der Exception Herr werden kann bzw. voran das liegen könnte?
-
Habs fast gelöst. Mit eine zusätzlichen Prüfung kann ich die Exception verhinden:
int CMyTestProgramDlg::UpdateStatusBar(void) { if ( !(this->IsWindowVisible() )) return -1; ...
ABER: Ich hab gelesen, dass in OnInitDlg() das Fenster noch nicht gezeichnet worden ist, daher ist wohl die UpdateStatusBar() abgestüzt. Gut soweit kann ich folgen doch warum funktioniert die Initialisierung?
bool CMyTestProgrammDlg::OnInitDialog() { m_wndStatusBar.Create(this); m_wndStatusBar.SetIndicators(textID,2); // m_wndStatusBar.SetPaneInfo(1,IDS_STATUSBAR_PANE_1,SBPS_STRETCH ,0); m_wndStatusBar.SetPaneText(0,"Init1"); //kleiner test: Das klappt ohne Problem m_wndStatusBar.SetPaneText(1,"Init2"); // ... return TRUE; // return TRUE unless you set the focus to a control }
Weiß einer Rat?