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

  FORUM HardWare.fr
  Programmation
  API Win32

  ToolBar personnalisée (C++, Win32)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

ToolBar personnalisée (C++, Win32)

n°1985090
LopezPhil
Posté le 17-04-2010 à 15:40:19  profilanswer
 

Bonjour !
 
Ce code marche, mais je désire intégrer mes propres images...
Des exemples seraient plus productifs que des critiques ! :jap:  
 
Merci d'avance !

Code :
  1. void InitToolBar(HWND hwndParent) {
  2. #define NOMBRE_BOUTONS 10 // Bouttons et séparations
  3. TBADDBITMAP tbab;
  4. TBBUTTON tbb[NOMBRE_BOUTONS];
  5. HINSTANCE g_hInstance;
  6. ToolBar = CreateWindowEx(
  7.  WS_EX_WINDOWEDGE,
  8.  TOOLBARCLASSNAME,
  9.  NULL,
  10.  WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT| WS_BORDER,
  11.  0, 0, 0, 0,
  12.  hwndParent,
  13.  0,
  14.  g_hInstance,
  15.  NULL);
  16. SendMessage(ToolBar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
  17. tbab.hInst = HINST_COMMCTRL;
  18. tbab.nID = IDB_STD_SMALL_COLOR;
  19. SendMessage(ToolBar, TB_ADDBITMAP, 0, (LPARAM)&tbab);
  20. ZeroMemory(tbb, sizeof(tbb));
  21. tbb[0].iBitmap  = STD_FILENEW;
  22. tbb[0].fsState  = TBSTATE_ENABLED;
  23. tbb[0].fsStyle  = TBSTYLE_BUTTON;
  24. tbb[0].idCommand = M_FILE_NEW;
  25. tbb[1].iBitmap  = STD_FILEOPEN;
  26. tbb[1].fsState  = TBSTATE_ENABLED;
  27. tbb[1].fsStyle  = TBSTYLE_BUTTON;
  28. tbb[1].idCommand = M_FILE_OPEN;
  29. tbb[2].iBitmap  = STD_FILESAVE;
  30. tbb[2].fsState  = TBSTATE_ENABLED;
  31. tbb[2].fsStyle  = TBSTYLE_BUTTON;
  32. tbb[2].idCommand = M_FILE_SAVE;
  33. tbb[3].fsStyle  = TBSTYLE_SEP;
  34. tbb[4].iBitmap  = STD_UNDO;
  35. // tbb[4].fsState  = TBSTATE_ENABLED;
  36. tbb[4].fsStyle  = TBSTYLE_BUTTON;
  37. tbb[4].idCommand = M_EDIT_UNDO;
  38. tbb[5].iBitmap  = STD_REDOW;
  39. // tbb[5].fsState  = TBSTATE_ENABLED;
  40. tbb[5].fsStyle  = TBSTYLE_BUTTON;
  41. tbb[5].idCommand = M_EDIT_UNDO;
  42. tbb[6].fsStyle  = TBSTYLE_SEP;
  43. tbb[7].iBitmap  = STD_CUT;
  44. tbb[7].fsState  = TBSTATE_ENABLED;
  45. tbb[7].fsStyle  = TBSTYLE_BUTTON;
  46. tbb[7].idCommand = M_EDIT_DEL;
  47. tbb[8].iBitmap  = STD_COPY;
  48. tbb[8].fsState  = TBSTATE_ENABLED;
  49. tbb[8].fsStyle  = TBSTYLE_BUTTON;
  50. tbb[8].idCommand = M_EDIT_COPY;
  51. tbb[9].iBitmap  = STD_PASTE;
  52. // tbb[9].fsState  = TBSTATE_ENABLED;
  53. tbb[9].fsStyle  = TBSTYLE_BUTTON;
  54. tbb[9].idCommand = M_EDIT_PASTE;
  55. SendMessage(ToolBar, TB_ADDBUTTONS, NOMBRE_BOUTONS, (LPARAM)&tbb);
  56. }


mood
Publicité
Posté le 17-04-2010 à 15:40:19  profilanswer
 

n°1985105
tpierron
Posté le 17-04-2010 à 16:38:38  profilanswer
 

Arf, tu as créer un nouveau topic. C'est effectivement mieux comme ça. Je te remet la réponse ( http://forum.hardware.fr/hfr/Progr [...] m#t1985101 ), histoire que les générations futures puissent retrouver ce message:
 
Il faut utiliser le message TB_ADDBITMAP pour ajouter un ou plusieurs bitmap custom à ta toolbar. Ce message va te renvoyer l'indice que tu pourras utiliser dans tes structures TBBUTTON. Exemple :
 

Code :
  1. TBADDBITMAP tbab;
  2. TBBUTTON tbb[NOMBRE_BOUTONS];
  3. tbab.hInst = NULL;
  4. tbab.nID = (UINT_PTR) LoadImage(instance, L"help-system.bmp", IMAGE_BITMAP,
  5.     0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE);
  6. int i = SendMessage(ToolBar, TB_ADDBITMAP, 1, (LPARAM) &tbab);
  7. tbb[TON_BUTTON_CUSTOM].iBitmap = i


 
Si tu spécifies plus qu'un bitmap (WPARAM de TB_ADDBITMAP), les bitmaps doivent être placés horizontalement les uns à coté des autres (et le second se trouvera à l'indice i+1; le troisième à i+2, ...). Tu peux utiliser des bmp 32bits pour avoir un canal alpha. J'ai utilisé un fichier externe, mais tu peux aussi charger directement une ressource.
 

n°1985153
LopezPhil
Posté le 17-04-2010 à 20:34:39  profilanswer
 

Merci pour ta réponse tpierron ![:alexmagnus]
 
tpierron «J'ai utilisé un fichier externe, mais tu peux aussi charger directement une RESSOURCE.»
[:alexsilvio]Je suis un maudit tabernacle ! Car, j'aurais du préciser que mon but est une application unique...
Je précise que l'IDE utiliser est DEV-C++
 
Donc ce code est issu d'un de mes tests (hélasse ça ne marche pas !) :
 
Fichier source :

Code :
  1. #define TOOLBAR_ICONS 10000
  2. /..../
  3. UINT ImageOffset;
  4. tbab.hInst = g_hInstance;
  5. tbab.nID = TOOLBAR_ICONS; // Issus d'un BitMap contenus dans le fichier ressource
  6. ImageOffset = SendMessage(ToolBar, TB_ADDBITMAP, NOMBRE_BOUTONS, (LPARAM) &tbab);
  7. tbb[0].iBitmap += ImageOffset;
  8. tbb[1].iBitmap += ImageOffset;
  9. tbb[2].iBitmap += ImageOffset;
  10. /..../


Fichier ressource :

Code :
  1. /...../
  2. TOOLBAR_ICONS BITMAP "Icons.bmp"
  3. /..../

n°1985166
tpierron
Posté le 17-04-2010 à 22:01:57  profilanswer
 


Code :
  1. tbb[0].iBitmap += ImageOffset;
  2. tbb[1].iBitmap += ImageOffset;
  3. tbb[2].iBitmap += ImageOffset;


 
Pouquoi tu fais un += ? Fait une assignation :
 

Code :
  1. tbb[0].iBitmap = ImageOffset;
  2. tbb[1].iBitmap = ImageOffset + 1;
  3. tbb[2].iBitmap = ImageOffset + 2;


n°1985171
LopezPhil
Posté le 17-04-2010 à 22:11:45  profilanswer
 

Cela ne marche pas non plus !


---------------
Des exemples seraient plus productifs que des critiques !
n°1985180
LopezPhil
Posté le 17-04-2010 à 23:06:47  profilanswer
 

Peu-être est-ce du à un #include manquant !
 
Liste de mes includes :

Code :
  1. #define WINVER 0x0500
  2. #define _WIN32_WINNT 0x0500
  3. #include <windows.h>
  4. #include <commctrl.h>
  5. #include <string>



---------------
Des exemples seraient plus productifs que des critiques !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  API Win32

  ToolBar personnalisée (C++, Win32)

 

Sujets relatifs
[C]Convertion Ascii -> hexa[Résolu] Héritage de classe, récupérer attribut de la classe parent
[C#] Service Windows vérification fichiers périodique et alerte mail[Résolu] Arbre "logique" > PDAG & Co.
DEV C++C# Datagridview
Trouver l'adresse d'une méthode C++ en assembleurFaut-il apprendre le C avant le C++ ?
Langage C : concaténation de chaines de caractèresCasse-tête... Class Library C++/CLI vers C#?
Plus de sujets relatifs à : ToolBar personnalisée (C++, Win32)


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