[MFC] CTabCtrl problème de couleur de fond

CTabCtrl problème de couleur de fond [MFC] - C++ - Programmation

Marsh Posté le 06-03-2009 à 19:53:04    

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 <<<<<<
Reply

Marsh Posté le 06-03-2009 à 19:53:04   

Reply

Marsh Posté le 07-03-2009 à 01:20:25    

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).

Reply

Marsh Posté le 07-03-2009 à 02:57:16    

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 <<<<<<
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed