mohdaef
Messages postés68Date d'inscriptionvendredi 23 novembre 2007StatutMembreDernière intervention14 mars 2012
-
26 avril 2008 à 00:16
mohdaef
Messages postés68Date d'inscriptionvendredi 23 novembre 2007StatutMembreDernière intervention14 mars 2012
-
26 avril 2008 à 19:25
Bonjour.
Pour les besoins de la partie graphique d'un petit jeu, je souhaite afficher une grille, chaque cases formée d'un image différentes, après quelque recherches j'ai trouvé la fonction BitBlt() qui permet d'afficher une image dans un contexte de dessin. Dans une version antérieure j'utilisé la fonction LoadImage() pour charger les bitmap en mémoire à l'ouverture du programme.
Je n'arrive pas à faire le lien entre ces deux fonctions, j'ai trouvé plusieurs codes sur internet mais assez complexe.
Serait-il possible d'avoir un code minimaliste pour réaliser ceci ?
// --- Traiter les messages de la fenêtre
MSG Msg;
while (GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
// ==================================
// Traiter les messages de la fenêtre
// ==================================
LRESULT CALLBACK WinProc
(
HWND hWnd // E:handle de la fenêtre
,UINT uiMsg // E:message à traiter
,WPARAM wParam // E:paramètre WPARAM
,LPARAM lParam // E:paramètre LPARAM
) // S:code retour
{
static HWND hGrille = NULL;
static int iGrilleLargeur;
static int iGrilleHauteur;
// --- Obtenir la taille des images
// --- (elles ont toutes la même taille !)
BITMAP Bitmap;
GetObject(hImage1,sizeof(BITMAP),&Bitmap);
iImageLargeur = Bitmap.bmWidth;
iImageHauteur = Bitmap.bmHeight;
// --- Obtenir la taille de la grille
// --- (nombre d'images entières en largeur et hauteur)
iGrilleLargeur = iImageLargeur * 5;
iGrilleHauteur = iImageHauteur * 4;
// --- Redimensionner la fenêtre
RECT Rect;
GetWindowRect(hWnd,&Rect);
int iBordX = GetSystemMetrics(SM_CXFIXEDFRAME);
int iBordY = GetSystemMetrics(SM_CYFIXEDFRAME);
int iTitre = GetSystemMetrics(SM_CYCAPTION);
int iMarge = 20; // marge autour de la grille
MoveWindow
(
hWnd
,Rect.left,Rect.top // même position sur l'écran
,iGrilleLargeur + (iMarge * 2) + (iBordX * 2) // largeur
,iGrilleHauteur + (iMarge * 2) + (iBordY * 2) + iTitre // hauteur
,TRUE
);
// -----------------
// Peindre la grille
// -----------------
case WM_PAINT :
{
// --- Début du remplissage
PAINTSTRUCT Paint;
HDC hDC = BeginPaint(hGrille,&Paint);
if (hDC == NULL) return 0;
// --- Remplir la grille avec une alternance des 2 images
int iLigne = 0;
for (int iY=0 ; iY
// ---------------------
// Quitter l'application
// ---------------------
case WM_DESTROY:
if (hImage1) DeleteObject((HGDIOBJ)hImage1);
if (hImage2) DeleteObject((HGDIOBJ)hImage2);
if (hdcImage1) DeleteDC(hdcImage1);
if (hdcImage2) DeleteDC(hdcImage2);
PostQuitMessage(0);
return 0;
}
// --- Retour du traitement par défaut
return DefWindowProc(hWnd,uiMsg,wParam,lParam);
}