Barre del titolo personalizzate / chrome in un’app WinForms

Sono quasi certo di conoscere la risposta a questa domanda, ma spero che ci sia qualcosa che ho trascurato.

Alcune applicazioni sembrano avere l’aspetto e l’aspetto di Vista Aero per le loro barre e pulsanti di didascalia anche quando si esegue su Windows XP. (Google Chrome e Windows Live Photo Gallery mi vengono in mente come esempi). So che un modo per ottenere questo risultato da WinForms consiste nel creare un modulo senza bordi e disegnare la barra di titolo / i pulsanti da soli, quindi eseguire l’override di WndProc per assicurarti di spostare e ridimensionare e i clic sui pulsanti fanno ciò che dovrebbero fare (non sono chiaro sullo specifico ma probabilmente lo posso estrarre dato un giorno per leggere la documentazione). Sono curioso di sapere se c’è un modo diverso e più semplice di essere si affaccia. Forse alcune chiamate API o stili di windows che ho trascurato?

Credo che Google abbia risposto per me utilizzando l’approccio roll-your-own-window con Chrome. Lascerò la domanda aperta per un altro giorno nel caso qualcuno abbia nuove informazioni, ma credo di aver risposto io stesso alla domanda.

Ecco un articolo con esempio di codice completo su come utilizzare il proprio “chrome” personalizzato per un’applicazione:

http://geekswithblogs.net/kobush/articles/CustomBorderForms3.aspx

Questo sembra davvero roba buona. Ci sono un totale di 3 articoli nella sua serie, e funziona alla grande, e anche su Vista!

Google Chrome non utilizza Vista SDK per ottenere questo risultato su XP. Se sbirci in src\chrome\browser\views\frame ci sono diversi file per definire il frame del browser in base alle capacità del sistema. Su XP, sembra che OpaqueFrame sia usato; la riga 19 dice questo:

 // OpaqueFrame // // OpaqueFrame is a CustomFrameWindow subclass that in conjunction with // OpaqueNonClientView provides the window frame on Windows XP and on Windows // Vista when DWM desktop compositing is disabled. The window title and // borders are provided with bitmaps. 

Sembra che stia utilizzando le risorse in src\chrome\app\theme per disegnare i pulsanti del frame.

Quindi sembra che le mie speranze siano che ci sia un modo economico per abilitare i temi Vista su XP. L’unico modo per farlo è disegnare manualmente l’area non client della tua finestra. Credo che una cosa del genere sia probabilmente la traccia giusta, dal momento che consente a Windows di gestire le cose non client come lo spostamento e il ridimensionamento della finestra.

A meno che qualcuno non trovi un metodo per abilitare magicamente il tema di Vista su XP, questa è la risposta alla domanda, ma ovviamente non posso contrassegnare il mio post come risposta.

Owen, sto usando Chrome su XP e non vedo il tema del vetro “Vista Aero” sulla finestra di Chrome. Lo vedo come blu solido.

Se è il tema personalizzato dei controlli e delle barre del titolo di Windows che desideri, è ansible farlo. C’è un eccellente toolkit UI gratuito per WinForms che fa esattamente questo: KryptonToolkit

@ Jonathan Holland: è qualcosa che può essere fatto da .NET?

Sì, usando DllImport. Ecco un buon post sul blog

Google Chrome utilizza l’SDK di Windows Vista per ottenere l’aspetto di vetro su XP. Potete scaricarlo qui:

http://www.microsoft.com/downloads/details.aspx?FamilyID=4377f86d-c913-4b5c-b87e-ef72e5b4e065&displaylang=en

Usando questo, è necessario abilitare il caricamento in ritardo delle seguenti DLL per ottenere Glass Effect in XP:

  • uxtheme.dll
  • dwmapi.dl

No, temo, non c’è altro modo semplice per farlo.

Sei sulla strada giusta. Sarà necessario creare un Winform personalizzato e quindi procedere come illustrato in questo esempio .