Newsgroup: it.comp.programmare.win32
Titolo: Area client

Ciao,
ho disegnato una toolbar sulla window principale della mia
applicazione . Ho notato adesso che le coordinate 0,0 dell'area client
rimangono sotto la toolbar cosicche' quando ingrandisco una finestra
child questa si nasconde con la barra del titolo sotto la toolbar .
Come posso fare per far in modo che le coordinate client 0,0 siano al
di fuori della toolbar ?
grazie

 applicazione .
Cosa intendi con "disegnato"? Il modo giusto per farlo con le API e` usare
il toolbar control, e quindi CreateToolbarEx() e amiche. Con MFC e` ancora
piu` facile, esiste una classe apposita (CToolBarCtrl o CToolBar).
--
Lorenzo

il toolbar control, e quindi CreateToolbarEx() e amiche. 
Esatto .
Ora come risolvo il problema che ho esposto ?
grazie

 Ora come risolvo il problema che ho esposto ?
In teoria non dovresti averlo, la client dovrebbe essere automaticamente
reimpostata (esattamente come succede per la barra del menu). Forse non hai
usato gli stili giusti o non hai specificato la finestra giusta come parent?
Oppure sono io che non ricordo bene; e` da un pezzo che queste cose le
faccio con MFC, puo` darsi che la "magia" sia aggiunta da quest'ultima. Mal
che vada devi ricavare l'altezza della toolbar con GetWindowRect() e agire
di conseguenza sulle operazioni sulla client.
--
Lorenzo

usato gli stili giusti o non hai specificato la finestra giusta come parent?
Anch'io pensavo fosse cosi  . Pero' a quanto pare non sembrerebbe .
Non mi sembra vi sia uno stile che tratti codesto problema e l'handle
alla finestra parent e' corretto per cui in attesa di una soluzione
definitiva non mi rimane che che calcolare la dimensione della barra e
tenerne conto in seguito .
ciao 

 sembrerebbe .
Ho fatto un esperimento al volo e sembra che tu abbia ragione. A questo
punto o calcoli la dimensione della barra, o usi MFC, o guardi il codice
della classe MFC CFrameWnd per scoprire come fa far tutto automagicamente
(ma temo che anche MFC si faccia i calcoli a mano).
--
Lorenzo

(ma temo che anche MFC si faccia i calcoli a mano).
Ma non deve esserci GetEffectiveClientRect o qualcosa di simile?
-- 
                    Marco Barisione (ICQ 84277092)
Se sei interessato alla creazione di it.comp.lang (per i linguaggi di
programmazione senza un gruppo apposito e per i confronti fra i
linguaggi) partecipa alla discussione sul manifesto su it.news.gruppi.

Ma non deve esserci GetEffectiveClientRect o qualcosa di simile?
Ma va' là. I frame se li deve implementare il client, Windows di suo non 
ci mette nulla. MFC lo fa per conto suo. VCL pure. QT anche

ci mette nulla. MFC lo fa per conto suo. VCL pure. QT anche
GetEffectiveClientRect cosa fa allora?


GetEffectiveClientRect cosa fa allora?
Io l'ho provata pero' mi restituisce 0,0 alle coordinate
RECT.top.RECT.left . 
In pratica non tiene conto della toolbar posta sotto al menu.
ciao

GetEffectiveClientRect cosa fa allora?
E' lo schiavo che fa i calcoli, ovviamente. Ma la testa ce la devi 
mettere tu

 simile?
Sembra proprio che tu abbia ragione... pero` non ho mai usato quella
funzione (manco sapevo che esistesse!) e non so quanto bene funzioni.
Una cosa e` certa: se cerchi la stringa "GetEffectiveClientRect" nei
sorgenti di MFC, non viene trovata nessuna corrispondenza. Il che mi fa
pensare che tutt'ora MFC si faccia i calcoli a mano.
--
Lorenzo

funzione (manco sapevo che esistesse!) e non so quanto bene funzioni.
Devo ammettere che l'ho scoperta per caso un anno fa prima che
iniziassi a frequentare questo gruppo ma non sono mai riuscito a farla
funzionare così ho risolto il problema facendo i calcoli a mano con
qualcosa del genere (ho fatto copia/incolla da un vecchio progetto e
non so se funziona):
void MyGetClientRect(HWND hWnd, RECT* rect){
	GetClientRect(hWnd, rect);
	HWND tb_win = GetDlgItem(hWnd, IDC_TOOLBAR);
	RECT tmp_rect;
	GetWindowRect(tb_win, &tmp_rect);
	rect->top = tmp_rect.bottom - tmp_rect.top; /* mi sfugge
           parte del significato di questa riga, perché non l'ho
	   commentata?
	   Può tmp_rect.top essere != 0? */
