Affiche jpg contenu dans exe (win32)

Soyez le premier à donner votre avis sur cette source.

Vue 7 092 fois - Téléchargée 586 fois

Description

sur demande du forum.
JPG est contenu dans exe en tant que ressource binaire.
Demo FindResource, LoadResource, LockResource, SizeofResource.
Affichage sur zone client de la dialogbox.
Pas de quoi fouetter un chat (le jpg).

Source / Exemple :


#include <windows.h>
#include "resource.h"
#include "bnJpg32.h"

HBITMAP hbmp = 0;
int cxdib, cydib, cxcli, cycli;

void __stdcall LoadBinJpg(HWND hdlg)
{
  HGLOBAL hgbl;
  BYTE *pdata;
  RECT rct;
  HRSRC hrsrc;
  BITMAP bmp;
  GetClientRect(hdlg, &rct);
  cxcli = rct.right; cycli = rct.bottom;
  hrsrc = FindResource(0, (LPCTSTR)IDR_BINJPG1, "BINJPG");
  hgbl = LoadResource(0, hrsrc);
  if(hgbl) {
    pdata = (BYTE*) LockResource(hgbl);
    if(pdata) {
      hbmp = bnBmpFromMemory(pdata, SizeofResource(0, hrsrc));
      if(hbmp) {
        if(GetObject(hbmp, sizeof(bmp), &bmp)) {
          cxdib = bmp.bmWidth; cydib = bmp.bmHeight;
        }
      }
    }
    FreeResource(hgbl);
  }
}

void __stdcall onPaint(HWND hdlg)
{
  PAINTSTRUCT ps;
  HDC hdc, memdc;
  hdc = BeginPaint(hdlg, &ps);
  if(hbmp) {
    memdc = CreateCompatibleDC(hdc);
    SelectObject(memdc, hbmp);
    StretchBlt(hdc, 0, 0, cxcli, cycli, memdc, 0, 0, cxdib, cydib, SRCCOPY);
    DeleteDC(memdc);
  }
  EndPaint(hdlg, &ps);
}

BOOL CALLBACK AppDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
{
  switch(mssg) {
    case WM_INITDIALOG:
      SetClassLong(hdlg, GCL_HICON, (long)LoadIcon(0, IDI_APPLICATION));
      LoadBinJpg(hdlg);
      return 1;
    case WM_PAINT:
      onPaint(hdlg);
      return 0;
    case WM_COMMAND:
      switch(wParam) {
        case IDOK:
          
          return 0;
        case IDCANCEL: EndDialog(hdlg, 0);
      }
  }
  return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, int)
{
  DialogBoxParam(hInstance, (LPCTSTR)IDD_APP, 0, AppDlgProc, 0);
  return 0;
}

Conclusion :


zip contient projet complet format VS 2003.
Utilisation libre dans vos progs de la dll jointe a condition de mentionner l'auteur.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

victorcoasne
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
3 -
Merci mais avec Dev on fait simplement une ressource comme tu dis sans la compiler en l'ajoutant simplement au projet puis on compile nickel

Merci qd même mais depuis le temps j'ai trouvé
cs_Nebula
Messages postés
790
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1 -
Pour DevCpp ou autre compilo basé sur MinGW/GCC : créer ou compléter le fichier resource.rc (ou autre nom, le principal est que ce soit le fichier de ressources du programme - format texte ASCII simple) ainsi :

NOMDELIMAGE BITMAP "mon image.bmp"

Ensuite, compiler la ressource :

windres -i resource.rc -o resource.o

Et l'inclure dans l'exe lors de la liaison finale :

gcc -s main.o mon_module.o resource.o -o mon_prog.exe

Il suffira d'utiliser LoadBitmap pour avoir un handle sur la ressource (je crois, me rappelle plus à ce niveau de toute façon le plus dur est fait). Voilà, si je n'ai pas été assez clair, envoie moi un message !
victorcoasne
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
3 -
Comment fait tu alors qd tu met en ressource bitmap

Merci pour le code inséré dans la ressource (parceque la meneuvre ne m'intéresse pas vu que je suis sous dev)
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16 -
Non desole, j'installerai bientot VS 2005 mais nenni outil rustique.
victorcoasne
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
3 -
Pourrais tu télécharger gratos Dev-C++ l'installer et me dire comment on fais avec STP ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.