LoadImage DevC++

guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009 - 30 sept. 2003 à 09:25
guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009 - 2 oct. 2003 à 00:30
Bonjour,

Je cherche a mettre un fond d’écran dans ma form.
Pour cela il faudrait que j’utilise loadimage.
Je pense déjà avoir pas bien avancé (Merci BruNew) mais j’ai encore une erreur.
Voici le detail de mon code :

1/ Edit ressource file :
Image1 BITMAP PRELOAD DISCARDABLE "D:/os1.bmp"

2/ Déclaration de mes variables :
PAINTSTRUCT ps;
RECT rect;
HRSRC hrsrc;
HGLOBAL hgbl;
HDC hdc, hdc2;
BYTE *data;

3/ Lancement de Loadimage: (mon compilateur détecte une erreur sur cette ligne)
ShowWindow(hwnd, nFunsterStil);
hrsrc = LoadImage(hwnd,"Image1", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
UpdateWindow(hwnd);

4/ Création du contexte de périphérique :
case WM_PAINT:
hdc = BeginPaint( hwnd, &ps );
GetClientRect(hwnd,&rect);
hgbl = LoadResource(0, hrsrc);
data = (BYTE*) LockResource(hgbl);
FreeResource(hgbl);
hdc2 = CreateCompatibleDC(hdc);
SelectObject(hdc2, data);
StretchBlt(hdc,0,0,400,400,hdc2,0,0,400,400, SRCCOPY);
DeleteDC(hdc2);
EndPaint(hwnd,&ps);
break;

Voilà, si quelqu’un peut encore m’aider.
Ou m’expliquer comment on charge une image dans un fichier ressource incorporé dans mon exécutable.

PS : J’utilise DevC++

Merci

10 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 sept. 2003 à 10:07
Dans WM_INITDIALOG:
ressorts un HBITMAP de LoadImage(...) avec un cast.

WM_PAINT:
SelectObject(hdc2, hbmp);

Tout ceci est a VIRER:
hgbl = LoadResource(0, hrsrc);
data = (BYTE*) LockResource(hgbl);
FreeResource(hgbl);

BruNews, ciao...
0
guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009
30 sept. 2003 à 19:05
Grace a tes indications voici le nouveau code.
Il n’y a pas d’erreur sur la compilation mais rien ne s’affiche.
Voici le code
[…]
PAINTSTRUCT ps;
RECT rect;
HGLOBAL hgbl;
HDC hdc, hdc2;
[…]
case WM_INITDIALOG:
hgbl=(HBITMAP)LoadImage(0,"MyResource1", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION); // Je pense qu’a la place du 0 il me faut le handle de mon application mais je sais pas comment l’avoir.
break;

case WM_PAINT:
hdc = BeginPaint( hwnd, &ps );
GetClientRect(hwnd,&rect);
hdc2 = CreateCompatibleDC(hdc);
SelectObject(hdc2, hgbl); // La aussi ca doit pas etre hgbl
StretchBlt(hdc,0,0,400,400,hdc2,0,0,400,400, SRCCOPY);
DeleteDC(hdc2);
EndPaint( hwnd, &ps );
break;
[…]

Merci pour ta patience et ton aide BruNew.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 sept. 2003 à 19:13
handle de mon application = 1er param de WinMain.
BruNews, ciao...
0
guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009
30 sept. 2003 à 19:37
OK,
Donc mon handle c’est:
Hwnd //HWND hwnd; /* This is the handle for our window */

Au debut j’ai mis:
hgbl=(HBITMAP)LoadImage(hwnd,"MyResource1", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
Mais j’avais l’erreur:
75 untitled1.cpp type `HINSTANCE__' is not a base type for type `HWND__'

Donc j’ai fais :
hgbl=(HBITMAP)LoadImage((HINSTANCE)hwnd,"MyResource1", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
Et la plus de problème ça compile. Mais toujours rien qui s’affiche.

Je pense que le pb vient de :
SelectObject(hdc2, hgbl); // HGLOBAL hgbl; ne doit pas servir a ca.

Qu’en penses tu ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 sept. 2003 à 19:43
1er param de WinMain !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
et NON de WndProc.
WinMain() est le point d'entree d'un prog win32.
Regarde dans mes sources comment est WinMain.
BruNews, ciao...
0
guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009
30 sept. 2003 à 22:52
Oui au debut j'avais mis:
hgbl=(HBITMAP)LoadImage(hThisInstance,"Image1", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);

Je m'etait repéré par rapport a :
int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)

Mais j'avais des erreurs:
`hThisInstance' undeclared (first use this function)
(Each undeclared identifier is reported only once
for each function it appears in.)

Je comprends pas pourquois il me met ce message
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 sept. 2003 à 23:06
HINSTANCE hinst;
HBITMAP hbmp;

hbmp = =(HBITMAP)LoadImage(hinst, ....);

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE a, LPSTR b, int c)
{
hinst = hinstance;
}

BruNews, ciao...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 sept. 2003 à 23:07
ERREUR DE FRAPPE? RECTIF:
hbmp = (HBITMAP)LoadImage(hinst, ....);
BruNews, ciao...
0
guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009
30 sept. 2003 à 23:30
OK,
J'avais pensé a "hinst" mais dans mon code c'est sous cette forme:
WNDCLASSEX wincl;
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE a, LPSTR b, int c)
{
wincl.hInstance = hThisInstance;
}

Je n'avais pas pensé a:
HBITMAP hbmp;

Pour etre sur j'ai refais en plus une variable avec l'exemple que tu m'as donné.
A la compilation pas d'erreur mais a l'affiche rien ....

J'ai vu dans tes sources que tu chargeais l'image en mémoire.
Je n'ai pas l'impression de faire ca .... a priori il faut faire quelquechose avant le:
SelectObject(.....)

Qu'en penses tu ?
0
guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009
2 oct. 2003 à 00:30
J'AI TROUVE .........................

case WM_PAINT:
hbmp=(HBITMAP)LoadImage(hinst,"Image1", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
hdc = BeginPaint( hwnd, &ps );
GetClientRect(hwnd,&rect);
hdc2 = CreateCompatibleDC(hdc);
SelectObject(hdc2, hbmp);
StretchBlt(hdc,0,0,400,400,hdc2,0,0,400,400, SRCCOPY);
DeleteDC(hdc2);
EndPaint( hwnd, &ps );

Un grand merci a toi BruNews.
Merci surtout de ne pas m'avoir donné la réponse toute faite (Ca ma bien fait reflechir)

GuitouLeFoux :-p
"Le secret du sage est de briller dans l'ombre"
0
Rejoignez-nous