Degradé de couleur

Soyez le premier à donner votre avis sur cette source.

Vue 4 454 fois - Téléchargée 235 fois

Description

Voila un programme qui affiche un degradé de couleur.
Bon l'algorithme est le plus bourrin qu'il soit !

Source / Exemple :


//***********************************************
#include <windows.h>
#include "resource.h"

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
//***********************************************

int WINAPI WinMain(
                  HINSTANCE hInstance,
                  HINSTANCE hPrevInstance,
                  PSTR szCmdLine,
                  int iCmdShow
                  )
{
static char   szAppName[] = "Couleur";
HWND          hwnd;
MSG           msg;
WNDCLASSEX    wndclass;

wndclass.cbSize        = sizeof (wndclass);
wndclass.style         = 0;
wndclass.lpfnWndProc   = WndProc;
wndclass.cbClsExtra    = 0;
wndclass.cbWndExtra    = 0;
wndclass.hInstance     = hInstance;
wndclass.hIcon         = LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName  = NULL;
wndclass.lpszClassName = szAppName;
wndclass.hIconSm       = LoadIcon(NULL,IDI_APPLICATION);

RegisterClassEx(&wndclass);

hwnd = CreateWindow(
                  szAppName,               // nom de la classe
                  szAppName,               // titre de la fenetre
                  WS_OVERLAPPED | WS_SYSMENU,     // style de la fenetre
                  CW_USEDEFAULT,           // position initiale en x
                  CW_USEDEFAULT,           // position initiale en y
                  512,                     // largeur initiale
                  512,                     // hauteur initiale
                  NULL,                    // handle de la fenetre mere
                  NULL,                    // handle du menu de la fenetre
                  hInstance,               // handle de l'instance
                  NULL);                   // parametres de creation

ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);

while(GetMessage(&msg,NULL,0,0))
	{
	TranslateMessage(&msg);
	DispatchMessage(&msg);
	}
return msg.wParam;
}

LRESULT CALLBACK WndProc(
                        HWND hwnd,
                        UINT iMsg,
                        WPARAM wParam,
                        LPARAM lParam
                        )
{

switch (iMsg)
  {
  case WM_CREATE:
    {
	  return 0;
    }
  case WM_PAINT:
    {
    HDC		        hdc;
    PAINTSTRUCT   ps;
    RECT		      rect;
    int           x,y;

	  hdc = BeginPaint(hwnd,&ps);
	  GetClientRect(hwnd,&rect);
// les carres sont disposes comme ci-dessous
//  1 2
//  3 4
// 
    // 1    
    for(x=rect.left;x<256;x++)
      {
      for(y=rect.top;y<256;y++)
        {
        SetPixel(hdc,x,y,RGB(x & 255,0,y & 255));
        }
      }
    // 2
    for(x=max(rect.left,256);x<512;x++)
      {
      for(y=rect.top;y<256;y++)
        {
        SetPixel(hdc,x,y,RGB(~(x & 255),0,y & 255));
        }
      }
    // 3
    for(x=rect.left;x<256;x++)
      {
      for(y=max(rect.top,256);y<512;y++)
        {
        SetPixel(hdc,x,y,RGB(x & 255,0,~(y & 255)));
        }
      }
    // 4
   for(x=max(rect.left,256);x<512;x++)
      {
      for(y=max(rect.top,256);y<512;y++)
        {
        SetPixel(hdc,x,y,RGB(~(x & 255),0,~(y & 255)));
        }
      }

	  EndPaint(hwnd,&ps);
    return 0;
    }
  case WM_COMMAND:
    {
    break;
    }
  case WM_DESTROY:
    {
	  PostQuitMessage (0);
	  return 0;
    }
  }

return DefWindowProc(hwnd,iMsg,wParam,lParam);
}

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
3
c'est pas faux... voire meme vrai ^^
Messages postés
7
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
22 septembre 2008

Certes, mais si ce prog doit servir d'exemple, autant utiliser une méthode de dessin adaptée.
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
3
oui c'est vrai que ce n'est pas adapte, mais de toute facon ce prgm ne sert a rien dans la vraie vie, il sert juste a faie un petit exemple d'utilisation du GDI avec l'api Windows (WM_CREATE PAINT DESTROY...)
Messages postés
7
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
22 septembre 2008

C'est trop beau.

Juste un conseil cependant, tu devrais pas utiliser SetPixel pour dessiner ton dégradé, le redessin est super lent. SetPixel est conçu pour des pixels individuels, pas pour toute une fenêtre. Stocke chaque pixel dans un bitmap (buffer) genre "COLORREF screen_buffer[512 * 512]", puis utilise des fonctions de gestion de bitmaps du GDI pour afficher ton bitmap, genre SetDIBitsToDevice ou StretchDIBits.
Messages postés
3
Date d'inscription
lundi 31 mars 2003
Statut
Membre
Dernière intervention
3 juillet 2003

C plus parce qu'on ne fait pas attention que par manque de connaissance , un exemple quand tu crée ton constructeur pour l'initialisation de tes variables , tu te doit aussi de creer un destructeur pour liberer la memoire , ces deux fonctions ont le meme nom à une différence près le ~ qui est le complement.
le ~ s'utilise beaucoup avec des valeurs binaire en général pour des mask supprésif
Afficher les 11 commentaires

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.