PDA

Visualizza la versione completa : [c++ api SetWindowLong]


stefanoB
14-02-2008, 18:14
in una mdi application, all'interno dello stesso processo cambio lo stile di un edit con SetWindowLong(GetDlgItem(hwnd,3142),GWL_STYLE,(LON G)0x50010000) ossia lo rendo visibile ma l'edit
non diventa visibile anche se uso ShowWindow, UpdateWindow, ma appare quando passo un'altra mdi chil sopra quella contenete il
controllo o quando clicco su di un altra applicazione nella relativa barra... come si risolve?
:confused:

MItaly
14-02-2008, 21:57
Per rendere visibile una finestra normalmente si usa la ShowWindow... inoltre raro specificare in quel modo un valore da passare alla SetWindowLong, di solito si specificano le costanti di stile che ti interessano (a ben vedere, anzi, di solito si chiama la GetWindowLong per ottenere gli stili correnti, si modificano solo quelli che si vogliono modificare e si chiama la SetWindowLong).
P.S.: a voler essere pignoli le Get/SetWindowLong deprecata, bisognerebbe usare le Get/SetWindowLongPtr.

stefanoB
15-02-2008, 09:35
il valore passato per "intero" alla SetWindowLong era un estremo tentativo per vedere qualche cambiamento visto che
agendo sul singolo bit di stile (il 4 da sinistra) WS_VISIBILE e settarlo a 0 non ottenevo la scomparsa immediata
del bottone, anche se nelle SDK sta scritto che "alcuni bit di stile sono in cache, cos che i cambiamenti fatti
con SetWindowLong non avranno effetto sinch non si chiama la funzione SetWindowPos, bene provata anche questa e nulla
da fare ... e neppure uno ShowWindow, UpdateWindow consecutivo funziona ....

ho invece risolto con un soluzione un p rozza ma almeno dinamica: dopo la SetWindowLong ShowWindow(hwnd,SW_HIDE); ShowWindow(hwnd,SW_SHOW);

se avete di meglio o suggerimenti in merito grazie mille anticipatamente!

MItaly
15-02-2008, 15:18
Teoricamente dovrebbe bastare la ShowWindow da sola... :master:

stefanoB
16-02-2008, 08:08
invece no ... se non uso:

ShowWindow(hwnd,SW_HIDE);
ShowWindow(hwnd,SW_SHOW);

non mi funzica ... :master:

MItaly
16-02-2008, 16:21
Guarda, ti assicuro che per nascondere o mostrare un controllo basta usare la ShowWindow. Lascia stare la SetWindowLong, serve per altre cose.


ShowWindow(GetDlgItem(hwndDlg,ID_DEL_CONTROLLO),SW _HIDE); //Nasconde
ShowWindow(GetDlgItem(hwndDlg,ID_DEL_CONTROLLO),SW _SHOW); //Mostra

stefanoB
18-02-2008, 16:00
non so che dire ... avevo provato con ShowWindow(...) passando l'handle del controllo ma non mi funzionava ... invece ora SI ...

grazie :)

MItaly
18-02-2008, 16:02
Prego; ciao! :ciauz:

Loading