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? 😕


Log in to reply