Sincronizza Indice |
Scarica il progetto |
Testo dell'articolo |
Stampa l'articolo |
Dall'avvento di Windows 95 il numero dei programmi utilizzati contemporaneamente
si è notevolmente innalzato. È infatti possibile avviare
più programmi ed utilizzare quello più utile al momento
con un semplice click sulla barra delle applicazioni.
Vedremo in questo semplice HowTo come porre una finestra in primo piano rendendola quindi sempre presente nonostante vengato attivate altre finestre. Il trucco sta soltanto nell'uso della funzione API SetWindowPos, in grado di modificare le dimensioni e le posizioni X, Y o Z di una finestra. Il progetto sviluppato si compone di un solo form con un singolo controllo CheckButton di nome chkPrimoPiano ed il codice si rivela altrettanto semplice:
Alla riga 3 è dichiarata la funzione SetWindowPos che richiede quali argomenti l'handle della finestra da posizionare, le posizioni Z (hWndInsertAfter), X ed Y, le grandezze larghezza ed altezza ed un valore che specifica il tipo di operazioni da effettuare.
Alle righe 5 e 6 sono dichiarati due valori API che specificano il blocco e lo sblocco della posizione Z: HWND_TOPMOST specifica che la finestra dovrà sempre e comunque stare in primo piano, anche se disattivata, mentre HWND_NOTOPMOST disattiva questo comportamento. Poiché per i nostri fini non è necessario spostare o ridimensionare la finestra ma la funzione SetWindowPos richiede comunque un valore, è possibile utilizzare un valore di flag che specifichi di non utilizzare i valori passati come posizione X ed Y e come dimensioni di larghezza ed altezza. In tal modo la funzione effettuerà soltanto il blocco sull'asse Z. Le costanti API alle righe 7 ed 8 serviranno proprio a questo scopo: non effettuare lo spostamento né il ridimensionamento. Per semplificare la scrittura del codice abbiamo aggiunto anche una terza costante, non definita nell'API, che contenga gli ultimi due valori da passare alla funzione SetWindowPos.
Nel momento in cui l'utente clicca sulla casella di controllosarà effettuato un controllo del suo valore per permettere il blocco o lo sblocco sull'asse Z. Se la casella è selezionata (valore vbChecked - riga 13) sarà richiamata la funzione SetWindowPos con l'impostazione HWND_TOPMOST per bloccare la finestra in primo piano; nel caso inverso (riga 16) sarà richiamata la stessa funzione con il valore HWND_NOTOPMOST per disattivare il blocco precedentemente attivato. La costante lngNoChangePos specifica di non modificare né posizione X ed Y né dimensioni della finestra, ignorando quindi quella serie di 0 passati soltanto perché la funzione richiedeva i parametri. Il funzionamento del progetto è davvero molto semplice:
Nel momento in cui la casella di controllo non è selezionata le
altre finestra (nel nostro caso il programma APIViewer 2001) potranno
posizionarsi di fronte al nostro form come mostrato nella Figura 2.
|
Il progetto è davvero molto molto semplice e si è preferito presentare una scrittura leggermente più lunga ma più esplicativa e non presenta alcun difetto particolare. Soltanto si raccomanda di non abusare di questa funzionalità di Windows perché in molte situazioni può risultare davvero fastidioso trovarsi una finestra non desiderata dinanzi e non poterla nascondere dietro le altre finestre. L'utilizzo ideale è quello di lasciar decidere all'utente se essa dovrà stare in primo piano mediante un pannello di opzioni ed in ogni caso dovrebbe esistere qualche ragione valida per cui essa debba stare sempre in primo piano. Fibia
FBI
|
Torna all'indice degli HowTo |