farben in einem tab ctrl



  • hallo!

    ich hab ein tabctrl bei dem ich bei wechsel des registers jeweils einen dialog in das tabctrl lade und dieses anzeige. das geht auch.
    NUR: unter win xp, wenn luna eingeschaltet ist und das ganze mit vsc++.net kompiliert ist wird das tabcontrol selbst (eben luna style) weißlich nur die darauf geladenen dialoge bleiben grau!
    das sieht natürlich saumäßig aus!
    die xp tab-dialoge (z.b. anzeige-eigenschaften) sind ganz weiß und die von alten anwendungen ganz grau. nur meine sind gemischt-farbig.
    wie kann ich das dilemma nun beheben???

    freue mich über jeden tipp!



  • Ich habe da nur eine API-Lösung. Man möge mir das nachsehen.

    #include <uxtheme.h>
    
    // Hier werden die Dialoge für das TabCtrl vorbereitet.
    typedef HRESULT (WINAPI * ENABLETHEMEDIALOGTEXTURE)(HWND, DWORD);
    
    HRESULT WINAPI MyEnableThemeDialogTexture(HWND hWnd, DWORD dwFlags)
    {
      ENABLETHEMEDIALOGTEXTURE pfnETDT;
      HINSTANCE                hDll;
      HRESULT                  hr;
    
        hr = HRESULT_FROM_WIN32(ERROR_CALL_NOT_IMPLEMENTED);
    
        if(NULL != (hDll = LoadLibrary(TEXT("uxtheme.dll"))))
        {
            if(NULL != (pfnETDT = (ENABLETHEMEDIALOGTEXTURE)GetProcAddress(hDll, "EnableThemeDialogTexture")))
            {
                hr = pfnETDT(hWnd, dwFlags);
            }
            FreeLibrary(hDll);
        }
    
      return(hr);
    }
    

    So, diese Funktion rufst Du nun während der Initialisierung so auf:

    if(SendDlgItemMessage(m_hWnd, IDC_TAB1, CCM_GETVERSION, 0, 0) >= 6)
        MyEnableThemeDialogTexture(hDlg, ETDT_ENABLETAB); // Dialog, der auf dem Tab angezeigt werden soll
    

    [ Dieser Beitrag wurde am 09.01.2003 um 14:01 Uhr von -King- editiert. ]



  • Eine Möglichkeit wäre, die Dialoge einzufärben. Ist aber nicht grad einfach, ich glaube, dass die Tabs nämlich so lustig grau-weiß gepunktet sind.
    Ich such' mal noch ein Code-Bsp. raus, in dem die Dialoge in die Klasse eingebunedn sind. Reden wir eigentlich von CPropertySheet und -Page? 😃

    Happosai



  • Eine Möglichkeit wäre, die Dialoge einzufärben.

    Entschuldigung, aber das ist doch absoluter Schwachfug. Du brauchst lediglich die Funktion EnableThemeDialogTexture() aufzurufen, das ist alles. In einem PropertySheet wird das vom System erledigt. Hättest Du die Frage auch gelesen, wüsstest Du, daß es hier nicht um ein PropertySheet geht. Die Funktion muß also von Hand aufgerufen werden. Und genau das macht mein Code. Ich habe den Weg über LoadLibrary/GetProcAddress gewählt, damit das Programm auch auf Systemen < XP funktioniert.



  • erst mal vielen dank für die antworten!

    ich hab als übergangslösung erst mal das manifest entfernt. nun hab ich gar kein luna design mehr in der anwendung (u.a. auch nicht mehr so eine häßliche grüne progress bar!)

    die oben genannte lösung werde ich aber auch mal testen!!! thx!


Anmelden zum Antworten