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

  FORUM HardWare.fr
  Programmation
  C++

  [Win32] Changer la couleur d'une toolbar

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Win32] Changer la couleur d'une toolbar

n°1517230
did-54
Posté le 20-02-2007 à 18:55:01  profilanswer
 

Hello,
 
Je suis entrain de développer une interface graphique en C++/Win32. J'arrive à créer une toolbar, avec les boutons que je veux et les commandes associées, ca marche bien.
 
Le problème, c'est qu'elle est horriblement laide :o  
 
Avant j'avais un problème de boutons en 3d, que j'ai corrigé en ajoutant un flag a CreateWindowEx, mais maintenant le background de la toolbar est blanc, et je n'arrive pas à le changer. Inutile de dire que c'est laid de chez laid :o
 
Voilà le code :
 

Code :
  1. HWND hTool = CreateWindowEx(0, TOOLBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT , 0, 0, 0, 0,
  2.                    _hWnd, (HMENU)IDC_TOOL, GetModuleHandle(NULL), NULL);
  3. SendMessage(hTool, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
  4. TBBUTTON tbb[4];
  5. TBADDBITMAP tbab;
  6. tbab.hInst = hInst;
  7. tbab.nID = IDB_TOOLBAR;
  8. SendMessage(hTool, TB_ADDBITMAP, sizeof(tbb)/sizeof(TBBUTTON), (LPARAM)&tbab);
  9. ZeroMemory(tbb, sizeof(tbb));
  10. tbb[0].iBitmap = 0;
  11. tbb[0].fsState = TBSTATE_ENABLED;
  12. tbb[0].fsStyle = TBSTYLE_BUTTON;
  13. tbb[0].idCommand = CMD_OPEN;
  14. tbb[1].iBitmap = 1;
  15. tbb[1].fsState = TBSTATE_ENABLED;
  16. tbb[1].fsStyle = TBSTYLE_BUTTON;
  17. tbb[1].idCommand = CMD_PLAY;
  18. tbb[2].iBitmap = 2;
  19. tbb[2].fsState = TBSTATE_ENABLED;
  20. tbb[2].fsStyle = TBSTYLE_BUTTON;
  21. tbb[2].idCommand = CMD_PAUSE;
  22. tbb[3].iBitmap = 3;
  23. tbb[3].fsState = TBSTATE_ENABLED;
  24. tbb[3].fsStyle = TBSTYLE_BUTTON;
  25. tbb[3].idCommand = CMD_STOP;
  26. SendMessage(hTool, TB_ADDBUTTONS, sizeof(tbb)/sizeof(TBBUTTON), (LPARAM)&tbb);


 
 
J'ai cherché, rien trouvé, Win32 c'est pas bien, et voilà :D
 
Si quelqu'un à une piste...


Message édité par did-54 le 21-02-2007 à 11:03:36
mood
Publicité
Posté le 20-02-2007 à 18:55:01  profilanswer
 

n°1517718
did-54
Posté le 21-02-2007 à 15:29:54  profilanswer
 

A l'aaaaaide :(

n°1517780
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 21-02-2007 à 16:31:11  profilanswer
 

tu créé ta toolbar avec le style TBSTYLE_CUSTOMERASE ce qui crééra une toolbar qui génerera le message NM_CUSTOMDRAW (généré par le message WM_ERASEBKGND). dans ta boucle de messages, tu traites ensuite ce message NM_CUSTOMDRAW pour récupérer la structure NMTBCUSTOMDRAW contenu dans lParam. et tu modifies cette structure en conséquence.
 
 
http://msdn.microsoft.com/library/ [...] omdraw.asp
http://msdn.microsoft.com/library/ [...] oolbar.asp
http://msdn.microsoft.com/library/ [...] omdraw.asp

n°1517827
did-54
Posté le 21-02-2007 à 17:09:42  profilanswer
 

ouah, y'a pas plus compliqué ? :D  
merci je vais jetter un oeil la dedans.

n°1517833
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 21-02-2007 à 17:13:08  profilanswer
 

did-54 a écrit :

ouah, y'a pas plus compliqué ? :D


c'est du Win32 hein :o

n°1517879
did-54
Posté le 21-02-2007 à 17:46:59  profilanswer
 

bon, je débute en win32, donc pataper :o
 
J'ai réussi à pondre ca, dans ma boucle de traitement des messages.
 

Code :
  1. case WM_NOTIFY:
  2.    cout << "WM_NOTIFY" << endl;
  3.    lpNMCustomDraw = (LPNMCUSTOMDRAW) lParam;
  4.    switch(lpNMCustomDraw->hdr.code)
  5.    {
  6.    case NM_CUSTOMDRAW:
  7. cout << "NM_CUSTOMDRAW" << endl;
  8. lpNMTBCustomDraw = (LPNMTBCUSTOMDRAW) lpNMCustomDraw;
  9. lpNMTBCustomDraw->clrBtnFace = RGB(80,0,0);
  10. cout << lpNMTBCustomDraw->clrBtnFace << endl;
  11. break;
  12.    }
  13. break;


 
Ca m'affiche bien WM_NOTIFY puis NM_CUSTOMDRAW quand je charge l'appli, ou quand je clique sur un bouton par exemple. Le seule problème, c'est que la face du bouton reste grise. (le dernier cout m'affiche aussi 80).
 
J'ai bien mis le flag TBSTYLE_CUSTOMERASE dans la creation de la toolbar.
 
PS: tiens je viens de voir que j'ai traité ca a partir de WM_NOTIFY et non WM_ERASEBKGND ...


Message édité par did-54 le 21-02-2007 à 17:50:55
n°1517981
did-54
Posté le 21-02-2007 à 20:52:54  profilanswer
 

up :(
Pas moyen de changer quoi que ce soit de propriété de cette foutu bar :(

n°1518240
did-54
Posté le 22-02-2007 à 12:15:46  profilanswer
 

Hey mais revenez ! :D
 
 

n°1518852
did-54
Posté le 23-02-2007 à 13:23:23  profilanswer
 

up mal déguisé !

n°1518862
anordem
Posté le 23-02-2007 à 13:33:42  profilanswer
 

Depuis 3 jours, tu n'as pas avancé ? Tu n'as fait aucune recherche, tu ne t'es pas documenté ? T'as fait aucun test ?
Si tu ne te bouges pas le cul, on ne va pas se le bouger pour toi.
Harkonnen t'a filé une piste, à toi d'approfondir. Si quelque chose te parait obscur, pose des questions précises. Mais ça sert à rien de faire des "up" en disant que ça marche pas.
 
Je ne connais pas particulièrement ce controle mais voici peut être une autre piste. Tout élément créé avec CreateWindow(Ex) possède un HWND qui permet de récupérer un HDC. Avec ça, tu peux dessiner ce que tu veux sur l'élément.

mood
Publicité
Posté le 23-02-2007 à 13:33:42  profilanswer
 

n°1518969
did-54
Posté le 23-02-2007 à 15:44:15  profilanswer
 

Je comprends, mais je ne trouve pas d'article très détaillé sur le sujet, aucun cours. Il ya des tutoriaux, mais ils expliquent comment faire sans montrer la finalité de chaque action. Alors je veux bien me bouger le cul, et évidemment que je fais des tests, mais comme je n'ai même pas les bases en Win32, ben c'est la guerre...
 
Je vais regarder du coté de ta piste et je vous tiens au courant.


Message édité par did-54 le 23-02-2007 à 15:44:59
n°1521898
did-54
Posté le 28-02-2007 à 18:03:23  profilanswer
 

Je reviens vers vous, je n'ai rien réussi à faire.
Je sais que je suis dans le bon case du traitement des messages, j'arrive éventuellement à récupérer le HWND puis le HDC de ma toolBar mais je n'arrive pas à dessiner dessus.
 

Code :
  1. case NM_CUSTOMDRAW:
  2.   cout << "NM_CUSTOMDRAW" << endl;
  3.   HWND hTool2 = GetDlgItem(hWnd, IDB_TOOLBAR);
  4.   hdcToolbar = BeginPaint(hTool2,&psToolbar);
  5.   HBRUSH hbr = CreateSolidBrush(RGB(0,0,0));
  6.   RECT rc;
  7.   rc.top = 0;
  8.   rc.left = 0;
  9.   rc.bottom = 20;
  10.   rc.right = 1000;
  11.   FillRect(hdcToolbar,&rc,hbr);
  12.   EndPaint(hTool2,&psToolbar);


 
Je commence à désespérer. Je n'arrive meme pas à trouver d'autres débuts de piste en fait. Donc je suis un peu tout con parceque je sais pas dans quelle direction chercher.
 


Message édité par did-54 le 28-02-2007 à 18:04:45
n°1523182
marctes
Posté le 03-03-2007 à 02:42:22  profilanswer
 

Ca a déjà été répondu x fois sur news://fr.comp.os.ms-windows.programmation
Il suffit de savoir lire...

n°1523207
did-54
Posté le 03-03-2007 à 11:47:25  profilanswer
 

Je ne connais pas les newsgroups...
 


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

  [Win32] Changer la couleur d'une toolbar

 

Sujets relatifs
[WebDev] Changer le tabindexErreur Win32
changer une variable toutes les heureserreurs (de link ?) a la compilation pour créer une fenetre avec win32
Changer l'emplacement de mes documents avec un scriptGnome Art - Couleur transparente
[Win32] Hook global sur CreateWindow ?[.NET 2.0] Récupérer la couleur d'un control côté serveur
PB de couleur JScrollPaneActiver les magic quotes dans un .htaccess - Apache/1.3.33 (Win32)
Plus de sujets relatifs à : [Win32] Changer la couleur d'une toolbar


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