Aggiungere XP/Vista/Seven visual style ad applicazioni Visual C++ 6
Feb
20100
Sebbene ormai questo IDE di programmazione sia decisamente sorpassato ed abbia fatto strada a tool di sviluppo più avanzati quali Visual Studio 2008 e 2010 ( al momento ancora in versione Release Candidate). Esistono ancora molti progetti che sono stati realizzati in VC 6, ma che si vorrebbe adottassero lo stile “alla XP” per la visualizzazione.
Il primo passo per raggiungere quato obbiettivo è quello di realizzara un file detto Manifest. Si tratta di un file XML che contiene una serie di direttive al Sistema Operativo in modo da venire trattato da quest’ ultimo nel modo migliore. Per convenzione un file manifest per il progetto con nome proj1, viene denominato proj1.exe.manifest e deve avere una struttura come questa:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="Gurucoder.Styles"
type="win32"
/>
<description>Using XP styles</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
Per forzare la nostra applicazione ad utilizzara questo Manifest, bisogna agire sui file resource.h e proj1.RC:
Nel file resource.h bisogna inserire questa riga di definizione:
#define MANIFEST_RESOURCE_ID 1
Nel file proj1.RC invece :
MANIFEST_RESOURCE_ID 24 MOVEABLE PURE "res\\proj1.exe.manifest"
Un ultima operazione è quella di modificare i font di tutte le dialog dell’ applicazione da MS Sans Serif ad un qualunque tipo di carattere TrueType ( Tahoma ad esempio ). In caso contrario, XP non sarà in grado di applicare il manifest lasciando il vecchio stile di visualizzazione.
Per garantire che lo stile venga effettivamente caricato ed utilizzato dal sistema operativo all’ atto del lancio della vostra applicazione, è assolutamente necessario effettuare sia l’ include della libreria comctl32.lib e richiamare all’ interno del main la funzione InitCommonControl(). In caso contrario sarà impossibile per il sistema operativo inizializzare l’ interfaccia “Common Control”, per l’ appunto, e la vostra applicazione non potrà essere visualizzata.
Il gioco è fatto, ricompilate tutto ed eseguite!











Commenti