Newsgroup: it.comp.lang.c++
Titolo: Aiuto Toolbar (senza MFC)

allora, ho preso esempi e tutto quello che c'era sull'help del Visual C++,
ho cercato di coadiuvare il tutto nella classe che riporto sotto...beh, la
prima toolbar (quella col CreateWindowEx) non aggiusta le dimensioni dei
tasti alle dimensioni dei bitmap (larghi 21 pixel e alti 20) pur col
messaggio TB_AUTOSIZE, la seconda esce fuori un casino con due tasti
tagliati e sovrapposti più il fatto che occupauno spazio di circa due tre
righe di toolbar...c'è qualche anima
pia, che mi da una mano?
Grazie.
P.S. ovviamente a me interessa solo la corretta creazione della toolbare non
la gestione dei comandi! In realtà mi interesserebbe anche sapere come si
fanno le toolbar coi tasti piatti che si evidenziano quando ci passi sopra e
quelle in bianco e nero con i tasti che si colorano quando ci passi sopra
(ciè in stile Explorer)...ma questo è troppo lo so! Che poi so che ci sono
esempi del genere...ma in MFC, che non mi interessano affatto e poi ce li ho
già
class maxWindowEx: public WNDCLASSEX
{
public:
maxWindowEx(
...un po' di inizializzazioni..bla,bla
  ::RegisterClassEx(this);
  maxHWnd = CreateWindowEx(...bla,bla...);                     // window
creation data
  // mostra finestra
  ::ShowWindow(maxHWnd, cmdShow);
  ::UpdateWindow(maxHWnd);
}
HWND maxToolbar(HWND g_hinst)
{ //c'è pure un po' di roba inutile: sono dei residui vari...
  int MAX_LEN=20, IDM_CUT, IDM_COPY, IDM_PASTE;
  HWND /*g_hinst,*/ hwndParent=maxHWnd;
  HWND hwndTB;
  TBADDBITMAP tbab;
  TBBUTTON tbb[3];
  char szBuf[16];
  int iCut, iCopy, iPaste;
  // Ensure that the common control DLL is loaded.
  InitCommonControls();
  // Create a toolbar that the user can customize and that has a
  // tooltip associated with it.
  hwndTB = CreateWindowEx(0, TOOLBARCLASSNAME, (LPSTR) NULL,
   WS_CHILD | TBSTYLE_TOOLTIPS | CCS_ADJUSTABLE,
   0, 0, 0, 0, hwndParent, (HMENU) ID_TOOLBAR, g_hinst, NULL);
  // Send the TB_BUTTONSTRUCTSIZE message, which is required for
  // backward compatibility.
  SendMessage(hwndTB, TB_BUTTONSTRUCTSIZE,
      (WPARAM) sizeof(TBBUTTON), 0);
  // Add the bitmap containing button images to the toolbar.
  tbab.hInst = g_hinst;
  tbab.nID   = IDB_BUTTONS;
  SendMessage(hwndTB, TB_ADDBITMAP, (WPARAM) 3/*NUM_BUTTON_BITMAPS*/,
   (WPARAM) &tbab);
  // Add the button strings to the toolbar.
  LoadString(g_hinst, IDS_CUT, (LPSTR) &szBuf, MAX_LEN);
  iCut = SendMessage(hwndTB, TB_ADDSTRING, 0, (LPARAM) (LPSTR) szBuf);
  LoadString(g_hinst, IDS_COPY, (LPSTR) &szBuf, MAX_LEN);
  iCopy = SendMessage(hwndTB, TB_ADDSTRING, (WPARAM) 0,
      (LPARAM) (LPSTR) szBuf);
  LoadString(g_hinst, IDS_PASTE, (LPSTR) &szBuf, MAX_LEN);
  iPaste = SendMessage(hwndTB, TB_ADDSTRING, (WPARAM) 0,
      (LPARAM) (LPSTR) szBuf);
  // Fill the TBBUTTON array with button information, and add the
  // buttons to the toolbar.
  tbb[0].iBitmap = 0/*BMP_CUT*/;
  tbb[0].idCommand = IDM_CUT;
  tbb[0].fsState = TBSTATE_ENABLED;
  tbb[0].fsStyle = TBSTYLE_BUTTON;
  tbb[0].dwData = 0;
  tbb[0].iString = iCut;
  tbb[1].iBitmap = 1/*BMP_COPY*/;
  tbb[1].idCommand = IDM_COPY;
  tbb[1].fsState = TBSTATE_ENABLED;
  tbb[1].fsStyle = TBSTYLE_BUTTON;
  tbb[1].dwData = 0;
  tbb[1].iString = iCopy;
  tbb[2].iBitmap = 2/*BMP_PASTE*/;
  tbb[2].idCommand = IDM_PASTE;
  tbb[2].fsState = TBSTATE_ENABLED;
  tbb[2].fsStyle = TBSTYLE_BUTTON;
  tbb[2].dwData = 0;
  tbb[2].iString = iPaste;
  SendMessage(hwndTB, TB_ADDBUTTONS, (WPARAM) 3/*NUM_BUTTONS*/,
   (LPARAM) (LPTBBUTTON) &tbb);
  SendMessage(hwndTB, TB_AUTOSIZE, (WPARAM) 0, (LPARAM) 0);
  ShowWindow(hwndTB, SW_SHOW);
  return hwndTB;
}
HWND maxToolbar2(HWND g_hinst)
{
  HWND hwndTB;
  TBBUTTON tbb[3];
  TBADDBITMAP tbab;
  int MAX_LEN=20, IDM_CUT, IDM_COPY, IDM_PASTE;
  char szBuf[16];
  int iCut, iCopy, iPaste;
  // Ensure that the common control DLL is loaded.
  InitCommonControls();
  hwndTB = CreateToolbarEx(
   maxHWnd,
   WS_CHILD | TBSTYLE_TOOLTIPS | CCS_ADJUSTABLE,
   IDR_TOOLBAR2,
   3,
   g_hinst,
   IDB_BUTTONS,
   tbb,
   3,
   21,
   20,
   21,
   20,
   sizeof(TBBUTTON));
  //SendMessage(hwndTB, TB_SETTOOLTIPS, (WPARAM) (HWND) hwndToolTip,
(LPARAM)
0);//hwndToolTip che diavolo è?
  // Add the bitmap containing button images to the toolbar.
  tbab.hInst = g_hinst;
  tbab.nID   = IDB_BUTTONS;
  SendMessage(hwndTB, TB_ADDBITMAP, (WPARAM) 3/*NUM_BUTTON_BITMAPS*/,
   (WPARAM) &tbab);
  // Add the button strings to the toolbar.
  LoadString(g_hinst, IDS_CUT, (LPSTR) &szBuf, MAX_LEN);
  iCut = SendMessage(hwndTB, TB_ADDSTRING, 0, (LPARAM) (LPSTR) szBuf);
  LoadString(g_hinst, IDS_COPY, (LPSTR) &szBuf, MAX_LEN);
  iCopy = SendMessage(hwndTB, TB_ADDSTRING, (WPARAM) 0,
      (LPARAM) (LPSTR) szBuf);
  LoadString(g_hinst, IDS_PASTE, (LPSTR) &szBuf, MAX_LEN);
  iPaste = SendMessage(hwndTB, TB_ADDSTRING, (WPARAM) 0,
      (LPARAM) (LPSTR) szBuf);
  tbb[0].iBitmap = 0/*BMP_CUT*/;
  tbb[0].idCommand = IDM_CUT;
  tbb[0].fsState = TBSTATE_ENABLED;
  tbb[0].fsStyle = TBSTYLE_BUTTON;
  tbb[0].dwData = 0;
  tbb[0].iString = iCut;
  tbb[1].iBitmap = 1/*BMP_COPY*/;
  tbb[1].idCommand = IDM_COPY;
  tbb[1].fsState = TBSTATE_ENABLED;
  tbb[1].fsStyle = TBSTYLE_GROUP;
  tbb[1].dwData = 0;
  tbb[1].iString = iCopy;
  tbb[2].iBitmap = 2/*BMP_PASTE*/;
  tbb[2].idCommand = IDM_PASTE;
  tbb[2].fsState = TBSTATE_ENABLED;
  tbb[2].fsStyle = TBSTYLE_BUTTON;
  tbb[2].dwData = 0;
  tbb[2].iString = iPaste;
  SendMessage(hwndTB, TB_ADDBUTTONS, (WPARAM) 3/*NUM_BUTTONS*/,
   (LPARAM) (LPTBBUTTON) &tbb);
  SendMessage(hwndTB, TB_AUTOSIZE, (WPARAM) 0, (LPARAM) 0);
  ShowWindow(hwndTB, SW_SHOW);
  return hwndTB;
}
protected:
HWND maxHWnd;
};

già
Lo so' che questo codice è in C e non in C++ però a me' funziona benissimo,
prova a darci un'occhiata forse può esserti utile.
Ciao
Bart...
//
// Variabili Globali
//
TBBUTTON tbButtons[NUMBUTTONS];         // Matrice di strutture che
contengono le
// informasioni sui singoli pulsanti della
// barra degli strumenti.
HWND tbwnd;                                                    // gestore
della barra degli strumenti.
// Fine variabili globali.......................
.
.
// nella parte di programma che inizializza l'istanza della finestra.
// dopo la creazione e prima della visualizzazione della finestra
// Inizializzo la barra degli strumenti.
  InitToolbar();
// Creazione della barra degli srumenti.
  tbwnd = CreateToolbarEx(hWnd,
    WS_VISIBLE | WS_CHILD | WS_BORDER,
    ID_TOOLBAR,
    NUMBUTTONS,
    hThisInst,
    IDTB_BMP,
    tbButtons,
    NUMBUTTONS,
    0, 0, 16, 16,
    sizeof(TBBUTTON));
// FINE INIZIALIZZAZIONE ISTANZA.
.
.
.
.
//
//    FUNZIONE:  InitToolbar()
//
//  SCOPO:  Inizializza la barra degli strumenti.
//
//
//  COMMENTI:
//
//    La barra degli strumenti e formata da due pulsanti.
//
void InitToolbar() {
  // Setto le informazioni relative al primo tasto.
  tbButtons[0].iBitmap = 0;
  tbButtons[0].idCommand = CM_ACQUISIZ;
  tbButtons[0].fsState = TBSTATE_ENABLED;
  tbButtons[0].fsStyle = TBSTYLE_BUTTON;
  tbButtons[0].dwData = 0L;
  tbButtons[0].iString = 0;
  // Setto le informazioni relative al secondo tasto.
  tbButtons[1].iBitmap = 1;
  tbButtons[1].idCommand = CM_VISUALIZZA;
  tbButtons[1].fsState = TBSTATE_ENABLED;
  tbButtons[1].fsStyle = TBSTYLE_BUTTON;
  tbButtons[1].dwData = 0L;
  tbButtons[1].iString = 0;
}

ti ringrazio infinitamente per la risposta, ma purtroppo non risolve i miei
problemi che nascono dal voler avere dei tasti di dimensioni diverse da
quelle predefinite con bitmap e testo; quindi con CreateToolbarEx non riesco
ad inserire il testo nella struttura TBBUTTON, mentre con CreateWindowEx,
non riesco ad ottenere le dimensioni che voglio...in entrambi i casi, non
posso avere tutte e due, come posso fare? Ma la cosa che più mi piacerebbe
sarebbe poter creare una toolbar stile Explorer: in che direzione mi devo
muovere?
Grazie,
Massimiliano