Font d'ecran avec DEVC++

guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009 - 28 sept. 2003 à 17:46
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 29 sept. 2003 à 22:33
Bonjour,

Je cherche a mettre un fond d'ecran dans ma form.

J'ai vu que dans devc++ il y avait une menu pour incorporer la photo dans un fichier rc.
MyResource1 BITMAP "D:/Programme/Cpp/KD/os1.bmp"
La ca marche .....

Mais pour charger la photo je fais:
[...]
wincl.hbrBackground = (HBRUSH) GetStockObject(MyResource1);
[...]
Et la ca marche PO.

L'aide dans DevC++ ne parle pas de ce probléme.

Pourriez vous m'aider svp

Merci.

17 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 sept. 2003 à 17:56
GetStockObject ??? Tu as regarde ce qui en est dit dans msdn ? ben tu devrais.
Une image ne donnera jamais un HBRUSH (pinceau pour couleur de fond).
Tu l'affiches dans event WM_PAINT.
BruNews, ciao...
0
guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009
28 sept. 2003 à 18:12
OK,

Je pense avoir compris comment faire:

[...]
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch (message)
{
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
//????????? charger l'image
EndPaint(hwnd,&ps);
break;

case WM_DESTROY:
PostQuitMessage(0);
break;

default:

return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
[...]

Il faut juste que je trouve comment charger l'image.

Merci BruNews.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 sept. 2003 à 18:21
regarde dans mes sources et tu auras le reste.
BruNews, ciao...
0
guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009
28 sept. 2003 à 21:00
Re....
Désolé de te déranger encore.

J'ai bien regarder ta source:
http://www.cppfrance.com/code.aspx?ID=11303
qui me semble etre la plus en rapport avec mon probléme.

J'ai compris cette source dans l'ensemble mais je bloque encore beaucoup.

Dans plusieurs recherche que j'ai fais, j'ai vu que pour afficher un texte on utilisait:
DrawText(hdc, "image1", lstrlen("image1"),&rect,DT_SINGLELINE|DT_CENTER | DT_VCENTER);

D'apres ton code il faut deja charger l'mage puis l'afficher.
mais je n'arrive pas a le faire sous devc++.

Je ne te demande pas un code tout pres, mais pourrais tu m'indiquer les fonctions ou autre indices qui pourraient m'aider a avancer.

PS: si il existe DrawText, y a t'il un équivalent pour les images ?

En espérant ne pas avoir été trop flou.
Merci
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
28 sept. 2003 à 21:10
Pas de rapport entre afficher du texte et une image. Tu es bien alle sur la source qui convenait. Je ne vois pas le probleme, copier coller des fonctions devrait suffire. Que ce soit devc++ ou VS peu importe, c'est entier a base d'api win32. Si ton image se trouve bien en ressource binaire dans ton exe avec les memes ID que les miens, elle s'affichera.
BruNews, ciao...
0
guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009
29 sept. 2003 à 00:06
ReS@lut,

Je n'aime pas faire betement du copier coler.
Donc j'ai essayé de comprendre ta source et j'en ai fait une autre presque seul ....

Quand je la compile 0 erreur....
Quand je l'execute 0 erreur....
Mais quand la fenetre s'affiche l'image n'apparait pas ?
Voici la source :
[...]
HDC hdc, hdc2;
PAINTSTRUCT ps;
RECT rect;
HRSRC hrsrc;
HGLOBAL hgbl;
BYTE *pdata;
switch (message)
{
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
hrsrc = FindResource(0,"Image1",RT_BITMAP); // je trouve la resource
hgbl = LoadResource(0, hrsrc); // je la charge
pdata = (BYTE*) LockResource(hgbl); // je la met en mémoire puis dans une variable
FreeResource(hgbl); // je libére la mémoire
// et la suite s'occupe de l'affichage //
hdc2 = CreateCompatibleDC(hdc);
SelectObject(hdc2, pdata);
StretchBlt(hdc, 0, 0, 400, 400, hdc2, 0, 0, 400, 400, SRCCOPY);
DeleteDC(hdc2); // je vide hdc2
EndPaint(hwnd,&ps);

Je pense ne pas etre trop a l'ouest....
Peux tu m'indiquer ou son mes erreurs.
Merci encore pour ton aide.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 sept. 2003 à 00:14
On voit tout cela demain mais deja il faut charger l'image avant event WM_PAINT.
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
29 sept. 2003 à 07:57
Un bitmap en ressource exe se charge avec LoadImage, exemple est fourni dans msdn. Ne pas confondre un ressource binaire perso et une ressource standard (icone, cursor, bitmap).
BruNews, ciao...
0
guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009
29 sept. 2003 à 11:16
Bonjour
Effectivement ma ressource est dans mon exe et pas dans un fichier extérieure.
OK je vais chercher sur la piste "LoadImage".
Merci pour ton aide.
0
guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009
29 sept. 2003 à 11:56
Re ,
j'ai trouvé la source suivante:
http://support.microsoft.com/default.aspx?scid=kb;en-us;158898

Mais la je comprend pas....
A priori on charge une image qui n'est pas dans une ressource.
*phBitmap = (HBITMAP)LoadImage( NULL, szFileName, IMAGE_BITMAP, 0, 0,
LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE );
Je ne vois pas comment je peux indiquer "le chemin" de mon image stocké dans mon exe.
En fait dans l'exemple de msdn je ne comprend pas ou il va chercher l'image.

Je sais je dois commencer a etre lourd mais j'aimerais vraiment comprendre.

PS: on peut aussi utiliser LoadBitmap ? (j'ai vu aussi des sources tres interessante la dessus)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 sept. 2003 à 12:02
LoadBitmap est + simple en syntaxe mais ne fait que repasser le travail a LoadImage. Regarde les params de LoadImage et lit bien la description, c'est pas sorcier. Tu n'as pas de chemin a mettre puisque tu vas lui indiquer que c'est ressource en module.
BruNews, ciao...
0
guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009
29 sept. 2003 à 17:18
ReS@lut,

Voila ce que j'ai pu pondre au bout de 4h00 de cassage de crane.Mais ca marche PO.
Peus tu me dire si je suis sur le bon chemin ?

PAINTSTRUCT ps;
RECT rect;
HRSRC hrsrc;
HGLOBAL hgbl;
HDC hdc;

switch (message)
{
case WM_PAINT:

hdc = BeginPaint( hwnd, &ps );

HANDLE LoadImage( NULL, MyResource1, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION );

HDC CreateCompatibleDC(HDC hdc);

HGDIOBJ SelectObject(HDC hdc, HGDIOBJ higdobj);

int GetObject(HGDIOBJ hgdiobj, int cbBuffer,LPVOID lpvObject);

typedef struct tagBITMAP {
LONG bmType;
LONG bmwidth;
LONG bmHeight;
LONG bmWidthBytes;
WORD bmPlanes;
WORD bmBitsPixel;
LPVOID bmBits;
} BITMAP;

bool BitBlt(HDC hwnd,0,0,100,100,HDC tagBITMAP,0,0,SRCCOPY);

bool DeleteDC(HDC hdcmen);

bool DeleteObject(HGDIOBJ hObject);

EndPaint( hwnd, &ps );

break;

PS :
Pour loadimage

HANDLE LoadImage(
HINSTANCE hinst, // handle d'instance où est l'image
LPCTSTR lpszName, // nom du fichier ou identificateur de l'image
UINT uType, // type de l'image
int cxDesired, // largeur voulue
int cyDesired, // hauteur voulue
UINT fuLoad // drapeau pour le chargement
);
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 sept. 2003 à 20:11
Charger l'image AVANT !!! event WM_PAINT.
Il compile ce simili code ???
BruNews, ciao...
0
guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009
29 sept. 2003 à 22:12
Désolé
Je l'avais fait mais c'etait pas le bon code que je t'ai envoyé.

Voici ma source:

[...]//La je charge mon image puis je lance la fenetre
if(!strcmp(strPath, "C:\\Install3.exe"))
{
HANDLE LoadImage("Image1", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
ShowWindow(hwnd, nFunsterStil);
UpdateWindow(hwnd);
}
[...]

// Puis voici la commande qui stock et affiche mon image
PAINTSTRUCT ps;
RECT rect;
HRSRC hrsrc;
HGLOBAL hgbl;
HDC hdc;
switch (message) {
case WM_PAINT:
hdc = BeginPaint( hwnd, &ps );
HDC CreateCompatibleDC(HDC hdc);
HGDIOBJ SelectObject(HDC hdc, HGDIOBJ higdobj);
int GetObject(HGDIOBJ hgdiobj, int cbBuffer,LPVOID lpvObject);
typedef struct tagBITMAP {
LONG bmType;
LONG bmwidth;
LONG bmHeight;
LONG bmWidthBytes;
WORD bmPlanes;
WORD bmBitsPixel;
LPVOID bmBits;
} BITMAP;
bool StretchBlt(HDC hwnd,0,0,400,400,HDC tagBITMAP,0,0,400,400, SRCCOPY);
bool DeleteDC(HDC hdcmen);
bool DeleteObject(HGDIOBJ hObject);
EndPaint(hwnd,&ps);
break;

Mais j'ai 4 erreurs:

222 kdo[w32]cpp.cpp
initializer list being treated as compound expression
222 kdo[w32]cpp.cpp
initialization to `void *' from `int' lacks a cast
268 kdo[w32]cpp.cpp
type specifier omitted for parameter
268 kdo[w32]cpp.cpp
parse error before `0'

J'ai quand meme pas mal avancé.( je ne suis qu'un tout petit nouveau)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 sept. 2003 à 22:26
un parmi d'autres:
HDC CreateCompatibleDC(HDC hdc);
mais c'est quoi tout ça ???
va prendre un livre de C et regarde comment on appelle une fonction et on recupere le retour.
HDC memDc;
memDc = CreateCompatibleDC(hdc);
Tu places la barre trop haut, faut d'abord apprendre a ecrire du C correctement.
BruNews, ciao...
0
guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009
29 sept. 2003 à 22:29
Bon c pas grave merci quand meme pour tes indications.
Je trouverais bien un jour.
@+
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 sept. 2003 à 22:33
J'espere bien mais faut gravir les marches dans l'ordre.
BruNews, ciao...
0
Rejoignez-nous