Newsgroup: it.comp.lang.c++
Titolo: Resize di un controllo CStatic in una dialog

Salve a tutti.
Creo una dialog con un controllo di tipo CStatic per visualizzare un
grafico. E fin qui nessun problema.
Devo fare in modo che se faccio il resize della dialog variandone le
dimensioni con il mouse, anche le dimensioni del controllo CStatic
varino in maniera adeguata.
Ma come si fa il resize di un controllo CStatic messo in una dialog?
Ho provato la myStatic.SetWindowPos() e la myStatic.MoveWindow(), ma non
funzionano.
Ovvero, in compilazione tutto bene; ma in esecuzione mi da' un errore
sul controllo ::IsWindow(hWnd), dove hWnd e' l'handle della classe
myStatic.
Ma la myStatic e' un oggetto di tipo CStatic, e come tale deriva dalla
CWnd. Come fa a tornare errore la funzione IsWindow()???
Qualcuno ha una idea di come si possa fare?
Ringrazio tutti fin d'ora per la disponibilita'.
Ciao
Lorenzo

 CWnd. Come fa a tornare errore la funzione IsWindow()???
L'errore che tu segnali in genere viene dato quando l'handle della
finestra 
non e' valido o non ancora costruito.
Dovressi pero' essere piu' chiaro, in quale funzione IsWindow fallisce?
Deduco che sia la ASSERT(::IsWindow(m_hWnd)) posta dentro
SetWindowPos()/MoveWindow().
La static e' correttamente creata? Metti una watch su m_hWnd della
static e vedi se ha un
valore "sensato", se e' diverso da NULL e' gia' qualcosa.
Puoi dare maggiori info su come funziona il tuo prg, cioe'
inizializzazioni et similia?
Attualmente non riesco ad esserti maggiormente utile, comunque controlla
lo
stack delle chiamate, magari vedendolo di viene in mente qualcosa :-(
Ciao
 Davide Ficano
--
Posted from [194.184.159.36]
via Mailgate.ORG Server - 
http://www.mailgate.org

CWnd. Come fa a tornare errore la funzione IsWindow()???
Molto facilmente... un oggetto di classe CWnd ha un membro m_hWnd
di tipo HWND, che non necessariamente e' valido in qualsiasi dato
momento (tipicamente viene azzerato quando non e' valido, ma questo
dipende anche dalle ottimizzazioni che hai abilitate).  Garantire la
validita' di tutte queste handle (via attach, subclass, o quant'altro) e'
tipicamente compito della funzione di "ingresso" di un dialogo modale
(normalmente generata dal Wizard).
Comunque per i tuoi scopi non occorre questa variabile myStatic
(immagino membro della classe-dialogo, non e' chiaro dal nome che
le hai dato); puoi usare una variabile locale e inizializzarla al volo
nel blocco in cui ti serve, se conosci la CWnd del dialogo, diciamo
ad esempio che sia "this" (un metodo della classe-dialogo, cioe`
derivata da CDialog, avra' questa caratteristica), e l'ID del controllo
(Static o altro che sia) che ti interessa, ad es IDC_MYGRAPH...
ad esempio,
void CMyDialog::muovila(const RECT* nuovoRect)
{
    CWnd* pwStatic = GetDlgItem(IDC_MYGRAPH);
    if(!pwStatic) {
        // errore orrendo, segnalalo in qualche modo
        // (msgbox, ecc) poi esci
    }
    pwStatic->MoveWindow(nuovoRect);
}
La CWnd tornata da GetDlgItem e' un temporaneo, che pensera'
poi il framework MFC a riciclare con comodo (e' una delle cose
che fa nell'"idle time processing") in modo da minimizzare il
consumo medio complessivo di risorse da parte del tuo programma.
Alex