Console en couleur sans caractères

Description

Bonjour,

Voici une adaptation (ou simplification) du code de l'article "Console: dimension et fonte".
Elle me servira pour le prochain article sur le triangle de Pascal.

En l'observant, on remarque qu'on n'écrit aucun caractère dans la console !
On définit seulement l'attribut des "cellules" réservées aux caractères.

La définition de la fonte (avec ConsoleFont) sert uniquement à définir la taille de ces cellules (ici 4x4):
#include <windows.h>
bool ConsoleSize(HANDLE hOut,short nCol,short nLin) { // nCol >= 80
  if (SetConsoleScreenBufferSize(hOut,{nCol,nLin})==0) return 0;
  SMALL_RECT r={0,0,nCol-1,nLin-1};
  return SetConsoleWindowInfo(hOut,1,&r);
}
bool ConsoleFont(HANDLE hOut,char *facename,short w,short h) {
  CONSOLE_FONT_INFOEX fid={sizeof(CONSOLE_FONT_INFOEX)};
  if (GetCurrentConsoleFontEx(hOut,FALSE,&fid)==0) return 0;
  fid.FontFamily=FF_DONTCARE;
  size_t n;
  mbstowcs_s(&n,fid.FaceName,facename,32);
  fid.dwFontSize={w,h};
  return SetCurrentConsoleFontEx(hOut,0,&fid);
}
void main() {
  unsigned short col=120,lin=150; // col >= 80, max col,lin selon screen
  HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
  SetConsoleTitle("Une console windows en animation");
  if (ConsoleFont(hOut,"Consolas",4,4)==0) MessageBox(0,"Font","Error",0);
  if (ConsoleSize(hOut,col,lin)==0) MessageBox(0,"Size: to big","Error",0);
  while (1) {unsigned long n;
    unsigned short att=0XF0&rand(); // bits 4 à 7
    WriteConsoleOutputAttribute(hOut,&att,1,{rand()%col,rand()%lin},&n);
  }
}
Dans l'attribut att, les 4 premiers bits définissent la couleur du texte, et les 4 suivants celle du fond (► CouleurFond.jpg).

Le code Console.cpp donne une animation de couleurs dans la console, dont une image instantanée se trouve dans Console.jpg.

Bonne lecture ...
 
 

Liens

CodeS-SoureS: Console: dimension et fonte
MSDN: Console Functions

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.