MFC C++ librerie bcg

di il
7 risposte

MFC C++ librerie bcg

Sto facendo il cambio tema, è solo che ho delle dialog che sono CDialog e per motivi interni al porgramma non posso cambiarle, ora vorrei captare il colore del tema per colorare poi le mie dialog, ad esempio se metto il tema black il menù sarà nero, ora però vorrei captare il colore



int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CBCGPFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	CBCGPToolBar::EnableQuickCustomization ();

	COLORREF mainButtonBkColor = globalData.clrWindowFrame;



	// Ottieni i componenti RGB del colore di sfondo
	int r = GetRValue(mainButtonBkColor);
	int g = GetGValue(mainButtonBkColor);
	int b = GetBValue(mainButtonBkColor);
	
	return 0;
	}

facendo così non ottengo il colore corretto

7 Risposte

  • Re: MFC C++ librerie bcg

    Intanto si "captano" le onde radio...

    Se vuoi ricavate il colore e utilizzarlo non capisco cosa hai scritto. Dopo che hai le 3 variabili r g b che ci fai? Attualmente nulla dato che sono locali e il loro valore lo perdita all'uscita della OnCreate

  • Re: MFC C++ librerie bcg

    09/10/2025 - oregon ha scritto:

    Se vuoi ricavate il colore e utilizzarlo non capisco cosa hai scritto. Dopo che hai le 3 variabili r g b che ci fai? Attualmente nulla dato che sono locali e il loro valore lo perdita all'uscita della OnCreate

    lo so che sono variabili locali, stavo solo vedendo il colore che viene salvato, nel caso fosse giusto le metterò come variabili membro, il mio problema è un altro, non so come visualizzare il colore del tema

  • Re: MFC C++ librerie bcg

    Scusa ma il codice che hai proposto cosa dovrebbr fare? Perché lo hai postato?

    Per il colore del tema usi

    https://learn.microsoft.com/en-us/windows/win32/api/uxtheme/nf-uxtheme-getthemecolor

  • Re: MFC C++ librerie bcg

    10/10/2025 - oregon ha scritto:

    Scusa ma il codice che hai proposto cosa dovrebbr fare? Perché lo hai postato?

    Per il colore del tema usi

    https://learn.microsoft.com/en-us/windows/win32/api/uxtheme/nf-uxtheme-getthemecolor

    la mia theApp è una derivata della classe CBCGPWinApp, e quindi non ho il metodo GetThemeColor

    
    CMiaApp::CMiaApp()
    {
    	CBCGPVisualManagerVS2012::m_bAutoGrayscaleImages = FALSE;
    
    	SetApplicationLookMenu(ID_VIEW_APPLOOK, BCGP_THEMES_LIST_OFFICE_2013 | BCGP_THEMES_LIST_OFFICE_2016 | BCGP_THEMES_LIST_OFFICE_2019 | BCGP_THEMES_LIST_OFFICE_2022);
    
    	globalData.CheckAppColorMode();
    	SetVisualTheme(globalData.IsAppDarkMode() ? BCGP_VISUAL_THEME_OFFICE_2022_BLACK : BCGP_VISUAL_THEME_OFFICE_2022_WHITE);
    
    
    
    	m_bDontShowDPIMessage = FALSE;
    
    	toolbarOptions.m_strCustomizeCommandLabel = _T("Customize...");
    
    	SetToolbarOptions(toolbarOptions);
    }
    
  • Re: MFC C++ librerie bcg

    10/10/2025 - oregon ha scritto:

    Scusa ma il codice che hai proposto cosa dovrebbr fare? Perché lo hai postato?

    Per il colore del tema usi

    https://learn.microsoft.com/en-us/windows/win32/api/uxtheme/nf-uxtheme-getthemecolor

    Mi correggo, posso utilizzarlo, ho scritto questo:

    
    CMioApp::CMioApp()
    {
    	CBCGPVisualManagerVS2012::m_bAutoGrayscaleImages = FALSE;
    
    	SetApplicationLookMenu(ID_VIEW_APPLOOK, BCGP_THEMES_LIST_OFFICE_2013 | BCGP_THEMES_LIST_OFFICE_2016 | BCGP_THEMES_LIST_OFFICE_2019 | BCGP_THEMES_LIST_OFFICE_2022);
    
    	globalData.CheckAppColorMode();
    	SetVisualTheme(globalData.IsAppDarkMode() ? BCGP_VISUAL_THEME_OFFICE_2022_BLACK : BCGP_VISUAL_THEME_OFFICE_2022_WHITE);
    
    	COLORREF clrDarkMode = globalData.clrBarWindow;
    
    	COLORREF U = clrDarkMode;
    
    	int u = GetRValue(U);
    	int uu = GetGValue(U);
    	int ut = GetBValue(U);
    
    	CBCGPToolbarOptions toolbarOptions;
    
    	m_bDontShowDPIMessage = FALSE;
    
    	toolbarOptions.m_strCustomizeCommandLabel = _T("Customize...");
    	COLORREF color;
    
    	HWND mio = GetActiveWindow();
    
    	HTHEME hTheme = GetWindowTheme(mio);
    
    	HRESULT result = GetThemeColor(
    		hTheme,
    		WP_CAPTION,
    		CS_ACTIVE,
    		TMT_FILLCOLORHINT,
    		&color);
    
    	int s = GetRValue(color);
    	int t = GetGValue(color);
    	int v = GetBValue(color);
    
    	SetToolbarOptions(toolbarOptions);
    }

    però la variabile mio mi dà nullo quindi sto sbagliando

  • Re: MFC C++ librerie bcg

    Sei all'interno di un costruttore di una classe, non esiste ancora nessuna finestra

  • Re: MFC C++ librerie bcg

    10/10/2025 - oregon ha scritto:

    Sei all'interno di un costruttore di una classe, non esiste ancora nessuna finest

    ok ho messo il codice nella InitInstance, il problema è che il colore è sbagliato, il tema è light gray, mi dà come risultato un grigetto ma le mie dialog hanno un colore bianco sporco, io vorrei conoscere il colore di una mia qualsiasi dialog

    COLORREF color;
    
    	CWnd *mio = GetActiveWindow();
    
    	HWND hWnd = mio->GetSafeHwnd();
    
    	HTHEME hTheme = GetWindowTheme(hWnd);
    
    	HRESULT result = GetThemeColor(
    		hTheme,
    		WP_CAPTION,
    		CS_ACTIVE,
    		TMT_FILLCOLORHINT,
    		&color);
    
    	int s = GetRValue(color);
    	int t = GetGValue(color);
    	int v = GetBValue(color);

    la variabile mio viene valorizzata ma hTheme no, mi dà NULL

Devi accedere o registrarti per scrivere nel forum
7 risposte