Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 15 su 15
  1. #11
    Citazione:
    Originariamente inviato da MRj92
    ma scusa, non dovrei "estrarre" dalla struttura LParam il menbro flags per vedere qual'è l'azione eseguita dalla finestra? cioè se è spostamento, ridimensionamento?
    Sì, certo. Diciamo che dovrebbe essere: "la prima volta che ricevi WM_WINDOWPOSCHANGED con WINDOWPOS.flags che contiene SWP_SHOWWINDOW".


    Io ho provato così: codice:

    ...
    case WM_WINDOWPOSCHANGED:
    if(lParam.flags == SWP_SHOWWINDOW)
    faiqualcosa();
    break;
    ...



    ma:
    In function `LRESULT WndProc(HWND__*, UINT, WPARAM, LPARAM)':
    `flags' has not been declared
    request for member of non-aggregate type before '==' token

    Come si fa??
    Però sai cosa mi viene in mente? non serve esaminare lParam perche in ogni caso Showwindows è la prima azione che viene eseguita sulla finestra!

  2. #12
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da MRj92
    Io ho provato così:
    codice:
    ...
    case WM_WINDOWPOSCHANGED:
               if(lParam.flags == SWP_SHOWWINDOW)           
               faiqualcosa();
    break;
    ...
    ma:
    In function `LRESULT WndProc(HWND__*, UINT, WPARAM, LPARAM)':
    `flags' has not been declared
    request for member of non-aggregate type before '==' token

    Come si fa??
    Chiaramente lParam è un LPARAM, non certo una struttura. Basta fare un cast:

    LPWINDOWPOS lpwp = (LPWINDOWPOS) lParam;

    a quel punto puoi fare lpwp->flags (nota -> non . perché è un puntatore)


    Originariamente inviato da MRj92
    Però sai cosa mi viene in mente? non serve esaminare lParam perche in ogni caso Showwindows è la prima azione che viene eseguita sulla finestra!
    No, non è affatto detto. Prova ad usare il tool Spy++ (se hai il VC++ ce l'hai) per tracciare i messaggi. Vedrai che non è il primo quello con SWP_SHOWWINDOW.
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #13
    Citazione:
    Originariamente inviato da MRj92
    Però sai cosa mi viene in mente? non serve esaminare lParam perche in ogni caso Showwindows è la prima azione che viene eseguita sulla finestra!
    No, non è affatto detto. Prova ad usare il tool Spy++ (se hai il VC++ ce l'hai) per tracciare i messaggi. Vedrai che non è il primo quello con SWP_SHOWWINDOW.
    ma a me funzia lo stesso!!

    Ho provato a confrontare lParam e con
    codice:
    if(lpwp->flags == SWP_SHOWWINDOW)
    no funziona. Ho visto sulla documentazione (da quello che ho capito) che quei valori sono per settare! non per prendere!
    in ogni caso con un po' di lavoro sono arrivito a questo:
    codice:
    if(lpwp->flags == 268441671)

  4. #14
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da MRj92
    Ho provato a confrontare lParam e con
    codice:
    if(lpwp->flags == SWP_SHOWWINDOW)
    no funziona. Ho visto sulla documentazione (da quello che ho capito) che quei valori sono per settare! non per prendere!
    No assolutamente, il campo 'flags' è un "bit field", non devi prenderlo come valore numerico!

    La documentazione dice:
    flags
    Specifies the window position. This member can be one or more of the following values.

    Quando trovi una cosa del genere, vuol dire che ci sono più informazioni memorizzate nel campo sotto forma di singoli bit (in genere come minimo un bit per ogni informazione)

    Quindi è corretto:

    if(lpwp->flags & SWP_SHOWWINDOW)

    mascheri il valore e testi solo quel bit.

    Se vai a vedere negli include, nel file WinUser.h ci trovi:
    codice:
    #define SWP_NOSIZE          0x0001
    #define SWP_NOMOVE          0x0002
    #define SWP_NOZORDER        0x0004
    #define SWP_NOREDRAW        0x0008
    #define SWP_NOACTIVATE      0x0010
    #define SWP_FRAMECHANGED    0x0020
    #define SWP_SHOWWINDOW      0x0040
    #define SWP_HIDEWINDOW      0x0080
    #define SWP_NOCOPYBITS      0x0100
    #define SWP_NOOWNERZORDER   0x0200
    #define SWP_NOSENDCHANGING  0x0400
    ....
    Che noti? Che ogni costante ha un solo bit a 1. E possono quindi essere messi in OR.
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #15
    grazie mille per il tuo aiuto!
    troppo gentile per starmi dietro per tutto questo topic, a presto!

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 © 2026 vBulletin Solutions, Inc. All rights reserved.