ToolBar personnalisée (C++, Win32)

ToolBar personnalisée (C++, Win32) - API Win32 - Programmation

Marsh Posté le 17-04-2010 à 15:40:19    

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


Reply

Marsh Posté le 17-04-2010 à 15:40:19   

Reply

Marsh Posté le 17-04-2010 à 16:38:38    

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.
 

Reply

Marsh Posté le 17-04-2010 à 20:34:39    

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

Reply

Marsh Posté le 17-04-2010 à 22:01:57    


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;


Reply

Marsh Posté le 17-04-2010 à 22:11:45    

Cela ne marche pas non plus !


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

Marsh Posté le 17-04-2010 à 23:06:47    

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

Sujets relatifs:

Leave a Replay

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