Discussione:
Icona con le WinApi32
(troppo vecchio per rispondere)
NERO23
2013-10-26 17:57:53 UTC
Permalink
Su internet ho trovato una piccola guida su come creare una piccola
finestre con le WinApi32 (riporto il codice alla fine del messaggio...).

Per cambiare icona sulla barra della finestra ho trovato questo codice:
wc.hIconSm = LoadImage(NULL, "menu_two.ico", IMAGE_ICON, 16, 16,
LR_LOADFROMFILE);

Il problema è che funziona solo se il file dell'icona è presente nella
stessa cartella dell'eseguibile.

C'è un rimedio per includere l'icona all'interno dell'eseguibile?

nero23

ciao



// Codice in C

#include <windows.h>

const char g_szClassName[] = "myWindowClass";

// Step 4: the Window Procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR
lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;

//Step 1: Registering the Window Class
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

if(!RegisterClassEx(&wc))
{
MessageBox(NULL, "Window Registration Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}

// Step 2: Creating the Window
hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
g_szClassName,
"The title of my window",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
NULL, NULL, hInstance, NULL);

if(hwnd == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}

ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);

// Step 3: The Message Loop
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
acc
2013-10-26 18:25:12 UTC
Permalink
Post by NERO23
C'è un rimedio per includere l'icona all'interno dell'eseguibile?
La puoi dichiarare nel file risorse (.rc) e poi riferirti ad essa
tramite l'ID, es:

IDI_ICON01 ICON DISCARDABLE "icona01.ico"

Vedi qua:
http://msdn.microsoft.com/en-us/library/vstudio/5h5f871a.aspx
NERO23
2013-10-26 19:49:57 UTC
Permalink
IDI_ICON01 ICON DISCARDABLE "icona01.ico"
Fatto e funziona.

Grazie
NERO23
2013-10-27 10:02:31 UTC
Permalink
Post by acc
La puoi dichiarare nel file risorse (.rc) e poi riferirti ad essa
IDI_ICON01 ICON DISCARDABLE "icona01.ico"
Sempre su internet ho trovato un esempio che riporta quanto da te scritto.
In aggiunta al file .rc, nell'esempio c'è anche il file .h con il
seguente testo:

// risorse.h
#define IDI_MYICON 102



e sul file .rc
// file.rc
#include "risorse.h"
IDI_MYICON ICON DISCARDABLE "icona.ico"



perchè si assegna il valore 102 alla variabile IDI_MYICON?


ciao
acc
2013-10-27 16:46:30 UTC
Permalink
Post by NERO23
Sempre su internet ho trovato un esempio che riporta quanto da te scritto.
In aggiunta al file .rc, nell'esempio c'è anche il file .h con il
// risorse.h
#define IDI_MYICON 102
e sul file .rc
// file.rc
#include "risorse.h"
IDI_MYICON ICON DISCARDABLE "icona.ico"
perchè si assegna il valore 102 alla variabile IDI_MYICON?
Ad ogni risorsa (icona, menu, dialog box, ecc) deve essere assegnato un
identificativo univoco (102 e' un valore scelto a caso), l'importante e'
che sia diverso per ciascuna risorsa.
Questi identificativi sono riportati nel file .h, in modo da poter
essere facilmente messi a disposizione a tutti sorgenti che ne fanno uso.

Se utilizzi Visual C++, tutto questo lavoro verra' effettuato
automaticamente dal resource editor, cioe' ad esempio quando crei una
nuova risorsa (ad es. una dialog), le verra' assegnato un ID, il
prossimo disponibile, e verranno aggiornati i file .rc e .h.

In sostanza tutto quello che metti nel file .rc diventa parte
dell'eseguibile. Lo puoi considerare come parte del segmento dati, dove
l'ID e' semplicemente un puntatore al dato.
Bertram
2013-10-27 19:14:51 UTC
Permalink
Questa cosa dell icona, e del file.rc, funziona solo con compilatori
MS? o funziona anche con Mingw, Djgpp? altri compilatori!


Ciao
acc
2013-10-27 20:06:25 UTC
Permalink
Post by Bertram
Questa cosa dell icona, e del file.rc, funziona solo con compilatori
MS? o funziona anche con Mingw, Djgpp? altri compilatori!
http://www.mingw.org/wiki/MS_resource_compiler
Bertram
2013-10-28 19:11:54 UTC
Permalink
Post by acc
Post by Bertram
Questa cosa dell icona, e del file.rc, funziona solo con compilatori
MS? o funziona anche con Mingw, Djgpp? altri compilatori!
http://www.mingw.org/wiki/MS_resource_compiler
Capito poco. Com Mingw/Gnu tools, il file.rc e uguale a quello che si
utilizza con MS?

Ciao
acc
2013-10-28 20:41:44 UTC
Permalink
Post by Bertram
Capito poco. Com Mingw/Gnu tools, il file.rc e uguale a quello che si
utilizza con MS?
Non saprei, non mai ho mai utilizzato mingw, anche se non credo ci siano
grosse differenze. Comunque se da un lato e' vero che a volte capita di
scrivere il file .rc a mano (o di trovarne uno gia' fatto), e' anche
vero che l'uso di questi file ha senso insieme ad un editor di risorse,
che ti permette di "disegnare" e modificare questi componenti in modo
visuale, poi la generazione del file .rc avviene in automatico.
Bertram
2013-10-28 20:46:08 UTC
Permalink
Post by acc
Post by Bertram
Capito poco. Com Mingw/Gnu tools, il file.rc e uguale a quello che si
utilizza con MS?
Non saprei, non mai ho mai utilizzato mingw, anche se non credo ci siano
grosse differenze. Comunque se da un lato e' vero che a volte capita di
scrivere il file .rc a mano (o di trovarne uno gia' fatto), e' anche vero
che l'uso di questi file ha senso insieme ad un editor di risorse, che ti
permette di "disegnare" e modificare questi componenti in modo visuale,
poi la generazione del file .rc avviene in automatico.
Ok, gràzie.

Ciao

Continua a leggere su narkive:
Loading...