Disattivare la chiusura di una finestra

martedì 12 agosto 2008 - 10.53

Gio83 Profilo | Newbie

Slave a tutti,
qualcuno sa se c'è un modo per disattivare la chiusura di una finestra (creata con WPF), in altre parole vorrei che venisse disattivata la "x" in alto a destra
Una volta eliminato l'impossibile, quello che resta, per improbabile che sia, deve essere la verità (S.Holmes)

aiedail92 Profilo | Expert

Ciao

Se hai bisogno di fare in modo che la finestra non venga chiusa quando clicki sul pulsante, puoi semplicemente gestire l'evento Closing e impostare la proprietà e.Cancel a true.

Se invece cerchi anche un valore "estetico" devi impostare lo stile della classe a cui appartiene la finestra (Window class, che non ha niente a che fare con le classi dell'OOP)

Per farlo devi prima ottenere l'handle della finestra, per il compito ho trovato la classe WindowInteropHelper che serve a facilitare l'interoperabilità fra WPF e Win32. Una volta ottenuto l'handle hai bisogno dello stile corrente della classe, che ottieni con l'API GetWindowLong, e quindi dell'API SetWindowLong per impostare il nuovo stile. Il codice completo (che puoi aggiungere all'evento Loaded della Window) è questo:

[DllImport("user32.dll")] private static extern int GetClassLongW(IntPtr hwnd, int index); [DllImport("user32.dll")] private static extern int SetClassLongW(IntPtr hwnd, int index, int newLong); const int GCL_STYLE = -26; const int CS_NOCLOSE = 0x0200; { //Questo oggetto facilita l'interoperabilità fra WPF e Win32, //ci serve per ottenere l'handle della finestra corrente System.Windows.Interop.WindowInteropHelper hp = new WindowInteropHelper(this); //Questo è l'handle della finestra IntPtr wnd = hp.Handle; //Con questa chiamata si ottiene lo stile corrente della classe int curStyle = GetClassLongW(wnd, GCL_STYLE); //Così aggiungo il flag per lo stile "NOCLOSE" che disabilita il tasto di chiusura curStyle |= CS_NOCLOSE; //Ora imposta il nuovo stile SetClassLongW(wnd, GCL_STYLE, curStyle); }

Luca

Gio83 Profilo | Newbie

Grazie!!! ho utilizzato la soluzione che mi hai indicato per disabilitare visivamente la casellina per uscire. L'effetto è quello che desideravo!
Una volta eliminato l'impossibile, quello che resta, per improbabile che sia, deve essere la verità (S.Holmes)
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5