Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372

    [c++ api SetWindowLong]

    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?

  2. #2
    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.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    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!

  4. #4
    Teoricamente dovrebbe bastare la ShowWindow da sola... :master:
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    invece no ... se non uso:

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

    non mi funzica ... :master:

  6. #6
    Guarda, ti assicuro che per nascondere o mostrare un controllo basta usare la ShowWindow. Lascia stare la SetWindowLong, serve per altre cose.
    codice:
    ShowWindow(GetDlgItem(hwndDlg,ID_DEL_CONTROLLO),SW_HIDE); //Nasconde
    ShowWindow(GetDlgItem(hwndDlg,ID_DEL_CONTROLLO),SW_SHOW); //Mostra
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    non so che dire ... avevo provato con ShowWindow(...) passando l'handle del controllo ma non mi funzionava ... invece ora SI ...

    grazie

  8. #8
    Prego; ciao!
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.