Hintergrundfarbe der StatusBar ändern



  • also ich rufe die Funktion
    m_wndStatusBar.GetStatusBarCtrl().SetBkColor( xxxx );
    in
    CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    ganz am Ende vor return 0; auf.



  • Wenn das XP Theme in Windows aktiviert ist, dann funktioniert es wohl nicht.



  • Hallo zusammen,

    erst mal danke für die Antworten.
    Kaum befasst man sich mit einem Thema, dann kommt an irgend einer anderen Ecke
    ein anderes, akutes Problem rein...

    Ich rufe die Funktion in OnCreate(), gleich nach SetPaneInfo() auf. Diese funktioniert auch.

    Ich habe aber das mit dem "XP Theme" nicht verstanden.

    Grüsse
    Helmut



  • Ich habe jetzt mal ein MFC-MDI-Projekt
    mit VS 6.0:
    m_wndStatusBar.GetStatusBarCtrl().SetBkColor( RGB(255,0,0) );
    und mit VS 2013:
    m_wndStatusBar.SetPaneBackgroundColor( 0, RGB(255, 0, 0) );
    erstellt.
    Bei VS 2013 wird anstatt CStatusbar jetzt CMFCStatusbar verwendet, deshalb die andere Funktion.
    In beiden Fällen wurde die Statusbar rot!
    Welche Betriebssystem-Version nutzt du? Eventuell ist dort ein Design (Theme) eingestellt, das eine Farbänderung der Statusbar nicht ermöglicht.



  • Ich benutze einfach nur Windows 7, ohne spezielle Themen Einstellungen.
    Und ich entwickle noch mit Visual Studio 2005.



  • Na dann erstell doch einfach ein Testprojekt und füge nur die Zeile mit der Farbe hinzu. Wenns nicht klappt, poste das ganze Projekt als zip.



  • Vielen Dank für die Antworten.
    Ich werde morgen mal ein Testprojekt machen.



  • Hallo zusammen,

    nun habe ich ein Standard SDI-Projekt mit VStudio 2005 erstellt.
    So wie sie im Wizard vorgeschlagen wird, mit Doc- und View-Datei,
    ohne ActiveX Zeug.
    Dann habe ich diese eine Zeile mit der Farbeinstellung für die StatusBar
    reinkopiert.
    Leider passiert immer noch nichts. Keine Farbänderung.

    Hier die OnCreate-Methode mit der einzigen Änderung:

    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
    		return -1;
    
    	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
    		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
    		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
    	{
    		TRACE0("Failed to create toolbar\n");
    		return -1;      // fail to create
    	}
    
    	if (!m_wndStatusBar.Create(this) ||
    		!m_wndStatusBar.SetIndicators(indicators,
    		  sizeof(indicators)/sizeof(UINT)))
    	{
    		TRACE0("Failed to create status bar\n");
    		return -1;      // fail to create
    	}
        m_wndStatusBar.GetStatusBarCtrl().SetBkColor(RGB(255,0,0));
    
    	// TODO: Delete these three lines if you don't want the toolbar to be dockable
    	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    	EnableDocking(CBRS_ALIGN_ANY);
    	DockControlBar(&m_wndToolBar);
    
    	return 0;
    }
    

    Das "SetBkColor" für die StatusBar ist das Einzige, das ich hier geändert habe.

    Grüsse
    Helmut



  • Nun bin ich zu dem Schluss gekommen, dass es eigentlich nicht funktioniert
    und dass Kleinweich hier einfach Scheisse produziert hat.

    Ich habe dieses kleine, über den Wizard erzeugte Programm nun auch auf meinem
    Windows 10 Rechner unter VS2008 und VS2015 übersetzt und laufen lassen.
    Mein Win7 in der Firma ist eine Standard Installation, und mein Win10 zuhause
    ist auch Standard, bis auf die ergänzte XP-Startleiste.

    Die Statusbar zeigt keinerlei Regung!
    Dieses SetBkColor(..) funktioniert also einfach nicht!



  • Hi,

    https://support.microsoft.com/de-de/kb/32685

    Sollte es über OnCrlColor kein callback geben was ich mir vorstellen kann,
    dann verwende die Klasse CJStausBar findest reichlig bei CodeProject.com

    Like that : http://bcbjournal.org/articles/vol1/9710/Owner-drawn_status_bars.htm?PHPSESSID=33888f50ecd77d6ea3de65380b309f04

    Regards
    K.


Anmelden zum Antworten