begin process at 2010 02 09 18:47:38
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

.Net

 > DEGRADÉ DE COULEUR

DEGRADÉ DE COULEUR


 Information sur la source

Note :
Aucune note
Catégorie :.Net Niveau :Débutant Date de création :29/06/2003 Date de mise à jour :29/06/2003 13:25:19 Vu / téléchargé :2 456 / 165

Auteur : JCDjcd

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note


 Description

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

Source

  • //***********************************************
  • #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);
  • }
//***********************************************
#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);
}


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • Couleur.exeTélécharger ce fichier [Réservé aux membres club]84 992 octets
  • main.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier3 428 octets

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture COLORATION SYNTAXIQUE
Source avec Zip Source avec une capture ORBITES DES SATELLITES GPS
Source avec Zip Source avec une capture DESSIN D'ARBRES
Source avec Zip Source avec une capture PROGRAMMATION LINEAIRE
Source avec Zip EXTENSION DE CORPS (MATH)

 Sources de la même categorie

Source avec Zip Source avec une capture MAP_MAKER_JEU par seekplus
Source avec Zip Source avec une capture Source .NET (Dotnet) EMISSION D'UN OCTET SUR LE PORT SÉRIE - CLASSE SERIALPORT par jmchatelet01
Source avec Zip Source .NET (Dotnet) RESOLV EQU DE DEGRES N par darckangel731
Source avec Zip Source avec une capture Source .NET (Dotnet) INTEROP XCHAT / .NET : CHARGEUR DE PLUGINS MANAGÉS par TeBeCo
Source avec Zip Source avec une capture Source .NET (Dotnet) SCANNER D'ADRESSES MAILS PRÉSENTENT SUR GOOGLE par Zaltez

Commentaires et avis

Commentaire de aardman le 29/06/2003 14:14:26

Salut,
Je voulais juste faire une petite remarque:
Quand tu crée une fenetre, la largeur et la haute de la fenetre passés en arguments a CreateWindow sont la largeur et la hauteur de la fenetre entiere (bords, titre, menu... inclus). Dans ton programe, ton contexte d'affichage fait un truc comme 500*480.
Il faut que tu rajoutes la taille des bords et la taille de la barre de titre pour avoir un vrai DC de 512pixel de coté (avec GetSystemMetrics).

Commentaire de aardman le 29/06/2003 14:39:56

Tant que j'y suis, j'ai une question :)
RGB(~(x & 255),0,~(y & 255));

Je comprend pas les '~' ?
Merci

Commentaire de JCDjcd le 29/06/2003 17:34:29

oui j'ai remarquer ca, mais je ne savais pas comment obtenir toutes les longeurs !
Merci maintenant pour l'astuce, mais 'GetSystemMetrics' on peut tout obtenir avec ???

Commentaire de aardman le 29/06/2003 17:51:30

De tete, je me souviens que GetSystemMetrics(SM_CYCAPTION) retourne la hauteur de la barre de titre. Pour le reste, il faut aller sur msdn.
Tu peux m'expliquer les '~' devant les valeurs RGB de ton programe ?

Commentaire de JCDjcd le 29/06/2003 20:44:49

le '~' est tout simplement le complement, i.e. l'inversion de tous les bits !
EXEMPLE:
~0110001 = 1001110
Et donc j'en avais besoin pour la continuite des couleurs.

Commentaire de aardman le 29/06/2003 20:47:54

merci! je connaissais pas..

Commentaire de MarioDev le 02/07/2003 14:24:06

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

Commentaire de Frozer le 21/09/2008 16:48:15

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.

Commentaire de JCDjcd le 22/09/2008 09:38:30

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

Commentaire de Frozer le 22/09/2008 22:32:13

Certes, mais si ce prog doit servir d'exemple, autant utiliser une méthode de dessin adaptée.

Commentaire de JCDjcd le 23/09/2008 07:45:54

c'est pas faux... voire meme vrai ^^

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,889 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales