Newsgroup: it.comp.programmare.win32
Titolo: Toolbar, Rebar e.... Maternita'

Salve a tutti ancora,
posto, sperando che qualcuno di voi abbia la soluzione
di un piccolo problema (ma seccante), che ho con una toolbar inserita
in una rebar.
In pratica la toolbar e' disattivata quando e' attiva la finestra
principale e, si attiva quando attivo (clicco su) la rebar.
La toolbar e la rebar sono creati come figli della finestra principale (nel
campo hwndParent di CreateWindowEx inserisco l'handle della finestra
principale);
la toolbar non ha pero' lo stile WS_CHILD, mentre la rebar si.
Aggiungendo lo stile WS_CHILD alla toolbar, rimane correttamente attiva, ma
non si inserisce nella rebar!
Definendo al toolbar figlia della rebar, non cambia nulla.
Cosa devo fare?!?
Ph.
--------------------------------
Inviato via 
http://usenet.libero.it

Definendo al toolbar figlia della rebar, non cambia nulla.
Sia la rebar (hRebar) sia la toolbar (hToolbar) devono essere figlie
della main window (hParent) ma quando crei la banda della rebar
(rbBand) dai 
rbBand.hwndChild=hToolbar;
Credo che questo internamente a Windows equivalga ad uno pseudo
SetParent, anche perche' in seguito se vuoi recuperare l'handle della
toolbar devi passare per la rebar
hRebar=GetDlgItem(hParent,IDC_REBAR);
hToolbar=GetDlgItem(hRebar,IDC_TOOLBAR);
Pero' i vari messaggi WM_COMMAND della toolbar sono spediti
direttamente alla window procedure di hParent (per fortuna)
Per i stili dei controlli io uso:
per la rebar
WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|RBS_FIXEDORDER|WS_BORDER
per la toolbar
WS_CHILD|WS_VISIBLE|TBSTYLE_TOOLTIPS|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|CCS_NORESIZE|CCS_NODIVIDER|TBSTYLE_FLAT
Adattali alle tue esigenze
Ciao
Stefano "HappyMan" (Lago Maggiore - NO)
--
http://www.sgr.info
Email happyman69 (at) 
libero.it

......
Ho provato ad inserire gli stili che mancavano, ma l'apparenza non e'
cambiata ed il problema rimane:
se do WS_CHILD alla toolbar, questa non entra nella Rebar; in caso
contrario, entra
ma e' disattivata quando e' attiva la finestra principale.
Tu che stili hai alla finestra principale? Magari manca qualcosa li' per far
funzionare il ws_child correttamente con la toolbar/rebar..
Grazie ancora.


funzionare il ws_child correttamente con la toolbar/rebar..
per la main window ho
WS_MAXIMIZE|WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN
per la mdichild ho
CreateMDIWindow(...,WS_CHILD|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_VISIBLE
Ti posto il codice di una mia funzione, dalla funzione chiamante
definisci
HWND hRebar,hTool;
REBARBANDINFO rb;
la chiami con 
CreateRebarAndToolbar(hParent,&hRebar,&hTool,&rb);
void CreateRebarAndToolbar(HWND hwnd,HWND *hRebar,HWND
*hTool,REBARBANDINFO *rbBandInfo,int w)
{
	HWND hCtrl,hwndRB;
   REBARINFO rbi;
   REBARBANDINFO rbBand;
  	DWORD dwStyle,dwBtnSize;
   // Creo la rebar
dwStyle=WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|RBS_FIXEDORDER|WS_BORDER;
hwndRB=CreateWindowEx(WS_EX_TOOLWINDOW,REBARCLASSNAME,NULL,dwStyle,0,0,0,0,hwnd,(HMENU)IDC_REBAR,ia.hInst,NULL);
   if(!hwndRB)
      return;
   // Inizializzazione rebar
   rbi.cbSize=sizeof(REBARINFO);
   rbi.fMask=0;
   rbi.himl=(HIMAGELIST)NULL;
   if(!SendMessage(hwndRB,RB_SETBARINFO,0,(LPARAM)&rbi))
      return;
   // Creo la toolbar
dwStyle=WS_CHILD|WS_VISIBLE|TBSTYLE_TOOLTIPS|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|CCS_NORESIZE|CCS_NODIVIDER|TBSTYLE_FLAT;
	hCtrl=
CreateWindowEx(0,TOOLBARCLASSNAME,(LPSTR)NULL,dwStyle,0,0,0,0,hwnd,(HMENU)IDC_TOOLBAR,ia.hInst,NULL);
SendMessage(hCtrl,TB_BUTTONSTRUCTSIZE,(WPARAM)sizeof(TBBUTTON),0);
   // Altezza della toolbar
   dwBtnSize = SendMessage(hCtrl,TB_GETBUTTONSIZE,0,0);
   // Inizializzazione e aggiunta banda per la toolbar
   rbBand.cbSize = sizeof(REBARBANDINFO);
   rbBand.fMask  =
RBBIM_STYLE|RBBIM_CHILD|RBBIM_CHILDSIZE|RBBIM_SIZE|RBBIM_COLORS;
   rbBand.fStyle = RBBS_CHILDEDGE|RBBS_GRIPPERALWAYS;
   rbBand.hwndChild  = hCtrl;
   rbBand.cxMinChild = w;
   rbBand.cyMinChild = HIWORD(dwBtnSize);
   rbBand.cx         = w;
	rbBand.clrFore = GetSysColor(COLOR_BTNTEXT);
	rbBand.clrBack = GetSysColor(COLOR_BTNFACE);
   SendMessage(hwndRB,RB_INSERTBAND,(WPARAM)-1,(LPARAM)&rbBand);
   *hRebar=hwndRB;
   *hTool=hCtrl;
   *rbBandInfo=rbBand;


hwnd,(HMENU)IDC_TOOLBAR,ia.hInst,NULL);
A cosa si riferiscono IDC_REBAR ed IDC_TOOLBAR?
Io ho impostato qui paramentri NULL.


Io ho impostato qui paramentri NULL.
Argh, sono gli identificativi dei controlli !
Ogni controllo child in una finestra deve avere il suo id univoco se
vuoi rintracciarlo dopo con una GetDlgItem.
IDC_REBAR e IDC_TOOLBAR sono due costanti definite nel mio file .rc
(del tipo #define IDC_REBAR 100)
Stefano "HappyMan"
--
Database Gate - The Powerful SQL Editor
HD Checker - The S.M.A.R.T. Hard Disk Reader
Asus Checker - CPU and Asus MB Checker
http://www.sgr.info

 vuoi rintracciarlo dopo con una GetDlgItem.
Ehhehe, il fatto e' che io ho creato tutti i controlli manualmente 
(non dalle risorse) e quindi non ho quegli id...
Cmq ora funziona cosi...
Ph.