-->

C / C++

Aggiungere XP/Vista/Seven visual style ad applicazioni Visual C++ 6

by gurucoder on Feb.20, 2010, under C / C++

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!

Leave a Comment :, , more...

L’ Operazione XOR in C

by gurucoder on Dec.29, 2009, under C / C++

Oggi vi voglio parlare dell’ operatore XOR e della sua applicazione al linguaggio C…
In linea di principio la tabella di verità relativa a questo operatore logico è:

 Osservando la tabella si può comprendere come in realtà l’operazione logica ritorni sempre risultato VERO per p != q . Un altro aspetto della XOR è che di fatto rappresenta l’operazione di addizione senza effetuare il conteggio del riporto entrante ( carry ) ad esempio:

1110 xor 1001 = 0111

In C , l’ OR esclusivo viene applicato tramite l’operatore ^ che effettua una XOR bit a bit. Quindi avendo una variabile di questo tipo:

int a;
int MASK;
int res;
a = 10011010;
MASK = 11111111;
res = a ^ MASK ;

Il valore di res sarà: 01100101

L’ algoritmo di XOR può essere utilizzato ad esempio per implementare un sistema di criptaggio / decriptaggio delle informazioni: la variabile MASK infatti, fa da chiave sia in fase di codifica sia per la decodifica. Applicando l’operazione di XOR tra il risultato del precedente esempio (res) e la variabile MASK si riottiene di nuovo il valore di a.

Leave a Comment : more...

Come realizzare un MakeFile

by gurucoder on Sep.13, 2009, under C / C++

In generale quando si ha a che fare con progetti software in C o C++ con un gran numero di file, invece di essere costretti a compilare singolarmente e manualmente ogni file, è possibile utilizzare un’ utility chiamata Make.
Di fatto si tratta di un file di testo con una struttura ben definita che serve da input all’ eseguibile make.exe per compilare, linkare e realizzare l’eseguibile finale del progetto. Una peculiarità di questa utility sta nel fatto che va a controllare anche se un file è stato modificato dall’ ultima compilazione effettuata , in tal caso lo ricompila se no lo linka semplicemente. Questo chiaramente comporta una risparmio di tempo non indifferente se il numero complessivo di file del progetto è molto elevato.

C_4
Ma andiamo a osservare la struttura di un MakeFile:

Un MakeFile ha una struttura ben definita del tipo:

target : prerequisiti ...
comandi

dove target è solitamente il nome del file generato da un programma, esempi di target sono i file eseguibili o i file oggetto. Il prerequisito è un file usato come input per creare il target (un target spesso dipende da diversi file). Un comando è una azione da eseguire. Una regola può avere più comandi, ciascuno su una riga diversa.
Un esempio di makefile è il seguente :

test : main.o file.o
cc -o test main.o file.o
main.o : main.c def.h
cc -c main.c
file.o : file.c def.h
cc -c file.c

Si produrrà il file eseguibile test a partire dai file C main.c e file.c e dal file header def.h. Il file target test avrà come prerequisiti i due file main.o e file.o, e il comando, azione da eseguire per ottenere il file target, sarà cc -o test main.o file.o. Analogamente il file target main.o avrà come prerequisiti i due file main.c e def.h. Il comando, azione da eseguire per ottenere il file target, sarà cc -c main.c , eccetera.
Una volta creato il makefile si usa il comando make per compilare il file (o i file) C e produrre l’eseguibile test.exe
E’ importante che il MakeFile sia nella stessa cartella in cui si trovi l’eseguibile make.exe . In caso contrario bisogna inserire anche il path del makefile nella chiamata di make .

Leave a Comment : more...

Cerchi qualcosa?

Usa questo form per cercare argomenti in questo blog:

Non riesci a trovare quello che cerchi? Lascia un commento in un post oppure contattami per risolvere il problema!

Puoi trovarmi su Twitter come @superbre