Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2476 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [MFC] CTabCtrl problème de couleur de fond

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MFC] CTabCtrl problème de couleur de fond

n°1858630
AsTro
Posté le 06-03-2009 à 19:53:04  profilanswer
 

Salut,
 
Je galère avec le CTabCtrl.
Comment faire pour que les controles intégrés dans un CTabCtrl ai la meme couleur de fond que le CTabCtrl?
Dès que je charge une fenetre fille ou tout simplement un texte static dans le CTabCtrl, le fond du control créé n'est pas le même que celui du TabCtrl.
Voilà ce que j'obtiens  :??:  
 
http://webfotos.free.fr/photos/autres/tab.jpg
 


---------------
>>>>>> WebFotos <<<<<<
mood
Publicité
Posté le 06-03-2009 à 19:53:04  profilanswer
 

n°1858684
tpierron
Posté le 07-03-2009 à 01:20:25  profilanswer
 

Ouais, c'est assez classique comme problème, et la seule solution que je connaisse m'a toujours parue overkill. M'enfin le truc c'est d'intercepter l'évènement WM_CTLCOLORSTATIC.
 
Dans wParam tu auras le HDC du control, sur lequel tu pourras activer le mode TRANSPARENT et faudra aussi retourner une brosse NULL (GetStockObject(HOLLOW_BRUSH)).
 
Bref un code du genre :

Code :
  1. case WM_CTLCOLORSTATIC:
  2.     SetBkMode((HDC) wParam, TRANSPARENT);
  3.     return (LRESULT) GetStockBrush(HOLLOW_BRUSH);


Note: tu transposeras ça en MFC (que je ne connais pas trop).

n°1858689
AsTro
Posté le 07-03-2009 à 02:57:16  profilanswer
 

Merci, mais j'ai trouvé une autre soluce.
Ce que tu proposes fonctionne pour les static mais pas pour les champ editables, ils vont se retrouver noirs.
En fait, le problème est dû au thème. Il suffit d'appliquer le texturing de type TAB sur la fenetre fille.
 
http://webfotos.free.fr/photos/autres/tab_theme.jpg
 
Voilà le code pour ceux que ça intéresse: (en espérant qu'il fonctionne aussi sous vista, j'ai pas pu encore tester)
 

Code :
  1. void EnableThemeDialogTexture(HWND hwndTabControl)
  2. {
  3.        HINSTANCE hDll = LoadLibrary(L"uxtheme.dll" );
  4.        if(hDll == NULL)
  5.        {
  6.               // the DLL won't be available on anything except Windows XP
  7.               //_ASSERT(0);
  8.               return;
  9.        }
  10.        ULONG (PASCAL *lpfnEnableTheme)(HWND, DWORD);
  11.        (FARPROC& )lpfnEnableTheme = GetProcAddress(hDll, "EnableThemeDialogTexture" );
  12.        if(lpfnEnableTheme == NULL)
  13.        {
  14.               _ASSERT(0);
  15.               return;
  16.        }
  17.        // ETDT_ENABLETAB = 6
  18.        lpfnEnableTheme(hwndTabControl, 6);
  19.        FreeLibrary(hDll);
  20. }
  21. BOOL CChild::OnInitDialog()
  22. {
  23.       CDialog::OnInitDialog();
  24.       EnableThemeDialogTexture(GetSafeHwnd());
  25.       return TRUE// return TRUE unless you set the focus to a control
  26.       // EXCEPTION : les pages de propriétés OCX devraient retourner FALSE
  27. }


Message édité par AsTro le 07-03-2009 à 03:05:17

---------------
>>>>>> WebFotos <<<<<<

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [MFC] CTabCtrl problème de couleur de fond

 

Sujets relatifs
Problème de structure de base de donnée[Résolu] Problème de CSS sur un tri ajax d'un tableau
Reéxecuter des scripts JS - Probleme avec eval()probleme connexion avec serveur SMTP via une servlet
[resolu]probleme concatenation chaine en javascript[CS4] Lancement en boucle {résolu}
Problème avec lightboxAdaGide: syntaxe couleur et caractères
Question : quelles technologies utiliser pour mon problème ?Affichage conditionnel - Problème d'affichage
Plus de sujets relatifs à : [MFC] CTabCtrl problème de couleur de fond


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR