begin process at 2008 09 06 19:17:04
1 237 887 membres
272 nouveaux aujourd'hui
14 314 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

IMAGES SUR DIALOGBOX PAR DLL (WIN32)


Information sur la source

Catégorie :API Niveau : Initié Date de création : 07/06/2003 Date de mise à jour : 07/06/2003 00:09:27 Vu / téléchargé: 2 931 / 358

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note


Description

Les images sur dialogbox changent grace a un timer.
On alterne JPG, GIF et BMP.
Une DLL perso de 4 Ko donne un HBITMAP avec les donnees du fichier.
Ces donnees pourraient etre en ressource aussi bien, serait idem.
#include "bnJpg32.h" suffit pour se servir de la DLL.

Source

  • #include <windows.h>
  • #include "resource.h"
  • #include "bnJpg32.h"
  • HBITMAP hbmp;
  • int cxDib, cyDib, idximg;
  • char *szimages[3] = {"Chat.jpg","Evol.gif","Verdi.bmp"};
  • void __stdcall ImgLoad()
  • {
  • HANDLE hfl;
  • DWORD lenfl, val;
  • HANDLE hheap;
  • BYTE *pmem;
  • BITMAP bmp;
  • if(hbmp) {DeleteObject(hbmp); hbmp = 0;}
  • hfl = CreateFile(szimages[idximg], GENERIC_READ, 0, 0, OPEN_EXISTING,
  • FILE_FLAG_SEQUENTIAL_SCAN, 0);
  • if(hfl == INVALID_HANDLE_VALUE) return;
  • lenfl = GetFileSize(hfl, 0);
  • hheap = GetProcessHeap();
  • pmem = (BYTE*) HeapAlloc(hheap, 0, lenfl);
  • if(pmem) ReadFile(hfl, pmem, lenfl, &val, 0);
  • CloseHandle(hfl);
  • if(!pmem) return;
  • hbmp = bnBmpFromMemory(pmem, lenfl);
  • HeapFree(hheap, 0, pmem);
  • if(hbmp) {
  • if(GetObject(hbmp, sizeof(bmp), &bmp)) {
  • cxDib = bmp.bmWidth; cyDib = bmp.bmHeight;
  • }
  • }
  • }
  • void __stdcall onPaint(HWND hdlg)
  • {
  • PAINTSTRUCT ps;
  • HDC hdc, memdc;
  • RECT rct;
  • hdc = BeginPaint(hdlg, &ps);
  • if(hbmp) {
  • GetClientRect(hdlg, &rct);
  • memdc = CreateCompatibleDC(hdc);
  • SelectObject(memdc, hbmp);
  • StretchBlt(hdc, 0, 0, rct.right, rct.bottom, 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_PAINT:
  • onPaint(hdlg);
  • break;
  • case WM_TIMER:
  • if(++idximg > 2) idximg = 0;
  • ImgLoad();
  • InvalidateRect(hdlg, 0, 0);
  • break;
  • case WM_INITDIALOG:
  • SetClassLong(hdlg, GCL_HICON, (long)LoadIcon(0, IDI_APPLICATION));
  • idximg = 0;
  • ImgLoad();
  • SetTimer(hdlg, 1, 1500, 0);
  • return 1;
  • case WM_COMMAND:
  • if(wParam == IDCANCEL) {KillTimer(hdlg, 1); EndDialog(hdlg, 0);}
  • }
  • return 0;
  • }
  • int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, int)
  • {
  • DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_APP), 0, AppDlgProc, 0);
  • return 0;
  • }
#include <windows.h>
#include "resource.h"
#include "bnJpg32.h"

HBITMAP hbmp;
int cxDib, cyDib, idximg;
char *szimages[3] = {"Chat.jpg","Evol.gif","Verdi.bmp"};

void __stdcall ImgLoad()
{
  HANDLE hfl;
  DWORD lenfl, val;
  HANDLE hheap;
  BYTE *pmem;
  BITMAP bmp;
  if(hbmp) {DeleteObject(hbmp); hbmp = 0;}
  hfl = CreateFile(szimages[idximg], GENERIC_READ, 0, 0, OPEN_EXISTING,
                   FILE_FLAG_SEQUENTIAL_SCAN, 0);
  if(hfl == INVALID_HANDLE_VALUE) return;
  lenfl = GetFileSize(hfl, 0);
  hheap = GetProcessHeap();
  pmem = (BYTE*) HeapAlloc(hheap, 0, lenfl);
  if(pmem) ReadFile(hfl, pmem, lenfl, &val, 0);
  CloseHandle(hfl);
  if(!pmem) return;
  hbmp = bnBmpFromMemory(pmem, lenfl);
  HeapFree(hheap, 0, pmem);
  if(hbmp) {
    if(GetObject(hbmp, sizeof(bmp), &bmp)) {
      cxDib = bmp.bmWidth; cyDib = bmp.bmHeight;
    }
  }
}

void __stdcall onPaint(HWND hdlg)
{
  PAINTSTRUCT ps;
  HDC hdc, memdc;
  RECT rct;
  hdc = BeginPaint(hdlg, &ps);
  if(hbmp) {
    GetClientRect(hdlg, &rct);
    memdc = CreateCompatibleDC(hdc);
    SelectObject(memdc, hbmp);
    StretchBlt(hdc, 0, 0, rct.right, rct.bottom, 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_PAINT:
      onPaint(hdlg);
      break;
    case WM_TIMER:
      if(++idximg > 2) idximg = 0;
      ImgLoad();
      InvalidateRect(hdlg, 0, 0);
      break;
    case WM_INITDIALOG:
      SetClassLong(hdlg, GCL_HICON, (long)LoadIcon(0, IDI_APPLICATION));
      idximg = 0;
      ImgLoad();
      SetTimer(hdlg, 1, 1500, 0);
      return 1;
    case WM_COMMAND:
      if(wParam == IDCANCEL) {KillTimer(hdlg, 1); EndDialog(hdlg, 0);}
  }
  return 0;
}

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

Conclusion

Le zip contient le projet complet au format VS 2003.
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   release
  • bnJpg32.hTélécharger ce fichier [Réservé aux membres club]Voir ce fichier172 octets
  • bnJpg32.libTélécharger ce fichier [Réservé aux membres club]1 748 octets
  • Images.apsTélécharger ce fichier [Réservé aux membres club]18 000 octets
  • Images.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier2 007 octets
  • Images.ncbTélécharger ce fichier [Réservé aux membres club]35 840 octets
  • Images.rcTélécharger ce fichier [Réservé aux membres club]Voir ce fichier2 113 octets
  • Images.slnTélécharger ce fichier [Réservé aux membres club]Voir ce fichier901 octets
  • Images.suoTélécharger ce fichier [Réservé aux membres club]8 704 octets
  • Images.vcprojTélécharger ce fichier [Réservé aux membres club]3 543 octets
  • resource.hTélécharger ce fichier [Réservé aux membres club]Voir ce fichier449 octets

Télécharger le zip

  • signaler à un administrateur
    Commentaire de PepeDeLuxe le 07/06/2004 01:10:11

    salut, J'ai testé l'exe pas de probm ca marche mais par contre qd j veux m' en servir pour une appli... ca ne marche pas!!
    ca me dit : bnJpg32.lib : fatal error LNK1106: invalid file or disk full: cannot seek to 0x3ee105d1
    Ca vient de moi ??

  • signaler à un administrateur
    Commentaire de kamal101 le 14/11/2005 23:18:14

    Étant donné qu'il y a le fichier .lib qui contient deja les symboles, est-ce qu'il y a un moyen de lui dire de ne pas charger la .dll mais plutot la .lib lors de la compilation. Ceci est fait par le mot clé extern, mais comment lui dire d'utiliser la .lib lors de l'édition des liens au lieu de trainer un fichier .dll a coté de l'application.

    Merci

  • signaler à un administrateur
    Commentaire de BruNews le 14/11/2005 23:24:41 administrateur CS

    Un lib d'une dll ne contient pas le code comme celui d'un proj compilé en lib statique, il ne sert qu'à l'édition des liens pour le linker.

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS