Images sur dialogbox par dll (win32)

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 / Exemple :


#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.

Codes Sources

A voir également

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.