IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

SetConsoleTextAttribute et WriteConsoleOutputCharacterA


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    54
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 54
    Par d�faut SetConsoleTextAttribute et WriteConsoleOutputCharacterA
    Bonjour,

    J'ai un programme (cod� en Visual C++ 2005) qui affiche des donn�es dans une fen�tre console.

    Pour certaines donn�es, j'aimerais pouvoir changer leur couleur d'affichage pour les mettre en "surbrillance" si on veut...

    Les donn�es sont affich�es caract�re par caract�re, avec la fonction WriteConsoleOutputCharacterA (API Windows)

    Pour changer la couleur du texte, j'utilise la fonction SetConsoleTextAttribute pour d�finir donc une nouvelle couleur, puis ensuite j'�cris le caract�re avec la fonction WriteConsoleOutputCharacterA, cependant cela ne fonctionne pas, la couleur n'est pas chang�e !

    En revanche, si j'ecris mon caract�re avec la fonction WriteConsole, cela fonctionne (la couleur est bien chang�e), mais le probl�me, c'est que j'ai besoin d'�crire les caract�res avec des coordonn�es XY...

    Quelqu'un aurait-il une solution ?

    Voici une partie du code :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //je change la couleur du futur caractère à ecrire...
    bSuccess = SetConsoleTextAttribute(hCon0, FOREGROUND_INTENSITY | FOREGROUND_RED);
    //test pour voir si la fonction SetConsoleTextAttribute c'est bien déroulée
    if (bSuccess == 0)
    {
       printf ("error=10");
       exit(1);
    }
    //écriture du caractère (&a) au coordonnées XY
    WriteConsoleOutputCharacterA (hCon0, &a, 1, XY, &Count);
    Merci d'avance !

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    WriteConsoleOutputAttribute().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    54
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 54
    Par d�faut
    Cela ne fonctionne pas avec WriteConsoleOutputAttribute()...

    Cette fonction dessine le background d'un caract�re dans une certaine couleur...

    Mais j'ai r�ussi a faire comme suit :

    - Utiliser la fonction SetConsoleCursorPosition() pour positionner le curseur � l'endroit ou je veux �crire

    - Utiliser la fonction WriteConsoleA() pour �crire le caract�re � l'endroit du curseur

  4. #4
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    WriteConsoleOutputAttribute change la couleur de ce que tu veux : Caract�re ou son fond (les flags de l'un ou l'autre doivent �tre d�cal�s de 4 bits � gauche).

    WriteConsoleOutput() tout court change � la fois le caract�re et ses attributs.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    54
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 54
    Par d�faut
    Citation Envoy� par M�dinoc Voir le message
    WriteConsoleOutputAttribute change la couleur de ce que tu veux : Caract�re ou son fond (les flags de l'un ou l'autre doivent �tre d�cal�s de 4 bits � gauche).
    Les flags? D�cal�s? C'est � dire?

    J'ai essay� la fonction comme d�crite dans le MSDN :
    http://msdn2.microsoft.com/en-us/library/ms687407.aspx

  6. #6
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,
    Citation Envoy� par zezitinho Voir le message
    Les flags? D�cal�s? C'est � dire?
    En gros, on dispose de 256 couleurs en mode console parce que les valeurs sont stock�es sur un octet (8 bits).

    Les 256 couleurs sont partag�es �quitablement entre le fond d'un cot� et le caract�re de l'autre: 16 couleurs (4 bits) pour les caract�res (g�n�ralement les 4 bits de poids faible) et les autres (4 bits de poids fort) pour le fond.

    Au final, tu obtiens donc bien (16*16 = )256 couleurs potentielles, m�me si, pour certaines, le fond et le caract�re prennent la m�me couleur, et que le caract�re en devient illisible

    Cela signifie que, si fait la repr�sentation binaire des valeurs, on obtient
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    b7 b6 b5 b4 b3 b2 b1 b0
     1  1  1  1  1  1  1  1
     |        |  |        |
       FOND       CARACTERE
    Chaque bit correspond � un flag dans ce qu'� �crit M�dinoc
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo