Come aggiungere un’icona a un’applicazione creata con Eclipse Galileo C e MinGW?

Ho letto molto su come aggiungere un’icona a un’applicazione creata con Visual Studio, ma non ho idea di come farlo con Eclipse Galileo / C / MinGW.

Qualcuno può scrivere una descrizione o darmi un link per una descrizione?

In Windows, le icone e alcuni altri elementi (cursori, bitmap, …) devono essere specificati in un file di risorse, che una volta compilato sarà collegato al programma.

Innanzitutto un esempio su come aggiungere un’icona a un programma Windows che illustrerà il suo utilizzo all’interno di Eclipse. Ecco un semplice programma che crea solo una finestra, guarda il momento in cui riempiamo il WNDCLASSEX, l’icona dell’applicazione viene referenziata qui:

resources.h : questo file può essere utilizzato per assegnare un valore a un identificatore di risorsa, quindi utilizzare il valore:

#define AppIcon 101 

Il file successivo è il file delle risorse, è ansible crearlo manualmente o da Eclipse, per crearlo in Eclipse, fare clic con il pulsante destro del mouse sulla directory che si desidera (in questo caso è src ) e selezionare New -> File . Qui scrivi il nome che vuoi e fai clic su Finish . Per modificarlo da Eclipse, fare clic con il pulsante destro del mouse e selezionare Open with -> Text Editor .

resources.rc – l’icona sarà specificata qui:

 #include "resources.h" // The icon path I used will be needed by Eclipse. // If you want to use back-slashes you have to scape them (\\ instead of \): AppIcon ICON "../src/icon.ico" 

demoicon.c – il file contenente il codice del programma:

 #include  #include "resources.h" const char *ClassName = "DemoIcon"; // Declaration of the window procedure, to be used in the WNDCLASSEX struct: LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmdLine, int nShowCmd) { WNDCLASSEX wc; HWND hWnd; MSG msg; // Filling the structure: wc.cbSize = sizeof(WNDCLASSEX); wc.style = 0; wc.lpfnWndProc = WindowProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; // Remember this just loads 32x32, use LoadImage() instead for other dimensions (16x16, 48x48, ...): wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(AppIcon)); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW); wc.lpszMenuName = NULL; wc.lpszClassName = ClassName; // Here we'll use LoadImage, as we need a 16x16 mini icon: wc.hIconSm = LoadImage(hInstance,MAKEINTRESOURCE(AppIcon),IMAGE_ICON,16,16, LR_DEFAULTCOLOR); // Registering the class: if(!RegisterClassEx(&wc)) { MessageBox(NULL, "Could not register window.", "Error", MB_ICONEXCLAMATION | MB_OK); return -1; } // Create the window using the "MainWindow" class: hWnd = CreateWindowEx(WS_EX_WINDOWEDGE, ClassName, "Demo Icon", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 200, 150, NULL, NULL, hInstance, NULL); // If the window was not created show error and exit: if(hWnd == NULL) { MessageBox(NULL, "Could not create window.", "Error", MB_ICONEXCLAMATION | MB_OK); return -1; } // Set the windows show state, to show it: ShowWindow(hWnd, nShowCmd); // Draw the window: UpdateWindow(hWnd); // Retrieve messages from the message queue: while(GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } // Implementation of the window procedure, will handle the messages: LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_CLOSE: DestroyWindow(hWnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, uMsg, wParam, lParam); } return 0; } 

Ora, nella directory sorgente del progetto Eclipse assicurati di avere tutti i file (nell’esempio i 3 file menzionati prima e il file dell’icona).

Successivamente, vai su Project -> Properties .
Qui, vai a C/C++ Build -> Settings -> Build Steps scheda C/C++ Build -> Settings -> Build Steps .
Lì vedrai i Pre-build steps -> Command . Il comando che compilerai sarà eseguito prima che la compilazione abbia inizio, quindi gli dirai di compilare il file di risorse. Mentre stai usando MinGW il compilatore di risorse è windres :

 windres ../src/resources.rc -o ../Resources/resources.o 

Come puoi vedere inserirò il file di risorse compilato in una directory chiamata Resources , puoi lasciarlo dove vuoi (e quindi il nome del file, non deve essere chiamato resources.rc ).

Ora vai alla scheda Tool Settings .
Lì, vai a MinGW C Linker -> Miscellaneous , e in altri oggetti aggiungi il file object creato prima, in questo caso dovresti aggiungere:

 Resources/resources.o 

Poiché si tratta di un’app di Windows, aggiungere l’opzione -mwindows ai flag del linker nella parte superiore della stessa scheda.

Fatto, quando si costruisce il progetto, Eclipse compilerà prima il file di risorse e quindi collegherà l’object generato come qualsiasi altro file object del progetto.

Spero sia abbastanza chiaro da leggere questo.

Eclipse non è impostato per esaminare i file di risorse. ERRORE. Quindi hanno anche dei passaggi per aggiungerlo all’elaborazione. Ecco i passaggi per giugno. [Http://wiki.eclipse.org/CDT/User/FAQ#How_to_handle_Resource-Script-Files_.27.2A.rc.27_with_CDT.3F][1]

Come gestire Resource-Script-Files ‘* .rc’ con CDT? Attualmente non è ansible gestire windres.exe con CDT. Non è ansible aggiungere il file .rc al progetto per essere compilato e collegato automaticamente. Questo è già stato sollevato come bug in bugzilla.

Un modo è creare un passo di pre-costruzione. Sotto il menu Progetto | Proprietà | C / C ++ – Build | Impostazioni | Costruisci passaggi | Passi di pre-compilazione compilare la riga di comando: windres –use-temp-file -i .. \ MyProject.rc -o .. \ MyProject_rc \ MyProject_rc.o Rendere noto l’object al linker. Sotto il menu Progetto | Proprietà | C / C ++ – Build | Impostazioni Impostazioni strumenti | Linker C ++ MinGW | Varie | Altri oggetti fare clic sull’icona ‘Aggiungi’, compilare la riga: “C: \ MyWorkspace \ MyProject \ MyProject_rc \ MyProject_rc.o” ‘MyWorkspace’ e ‘MyProject’ sostituire con quello che è adatto al tuo scopo.

Devi aggiungere la cartella. \ MyProject_rc prima di build.

Il percorso per windres.exe deve essere noto per eclipse.

Il modo in cui l’ho fatto è stato creando un file

icon.rc

 #define AppIcon 101 AppIcon ICON "../icon.ico" 

Quindi invoca windres tramite prompt dei comandi con

 windres my.rc -O coff -o my.res 

Compilerà diversi file per te – mantieni quello chiamato icon.res e rinominalo come libicon.a . Infine includilo nel tuo programma aggiungendolo sotto una libreria

Progetto -> Proprietà -> Crea -> Impostazioni -> C ++ Linker -> Librerie

(assicurati di dire a Eclipse dove trovare il file usando la sezione dei percorsi della libreria sotto).

Spero che questo ti aiuti!

Applica per prima cosa tutte le icone che voglio utilizzare all’interno del progetto. Quindi rinominare il .zip in un .jar

Crea una cartella di risorse se non ne hai già uno (io uso “lib”) Quindi posiziona il file jar all’interno della cartella delle risorse.

Quindi una semplice aggiunta alle proprietà del progetto:

facendo clic con il pulsante destro del mouse e Configura “Percorso build Java”: selezionare la scheda Librerie . Fare clic sul pulsante Aggiungi JAR e aggiungere icons.jar alle librerie, quindi salvare .

Ora è facile allocare l’icona dell’immagine desiderata all’interno dell’editor di Window Builder, ad esempio poiché il barattolo contenente le icone appare nel selettore della modalità Selezione immagine all’interno dell’elenco delle risorse del percorso di class. Tutto funziona come dovrebbe e va bene.