ncuses obtenir les information de la taill du terminal ? MessagePosté: Ven Juin [Résolu]

Signaler
Messages postés
20
Date d'inscription
vendredi 18 avril 2008
Statut
Membre
Dernière intervention
7 août 2009
-
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
-
hello

Je cherche a obtenir la taille de la Fenetre principal
afin de pouvoir la diviser en 2 a la verticale. un peux comme mignight
commander, mai vraiment 2 fenetre séparée et indépendante.

Note Je decouvre ncuse et également le c++ (bon le c++ depuis 2 ou 3 mois sa commence a rentrer)

je me suis trouver l'unique doc en anglait , rien en français pour le moment
ici: <!-- m -->http://tldp.org/HOWTO/NCURSES-Progra...WTO/index.html<!-- m -->

mai
j'ai rien trouver en ce qui concerne mon probleme car c'est a moi de
fournir les première cordonné aux pif. pour la première (box ?) avec le
code suivant:
la fonction ncurse_affichage(); peux etre remplacée par le main aux besoin (ou si sa bug ..)

#include <ncurses.h>
#include <stdio.h>
#include <string.h>
#include

WINDOW *create_newwin(int height, int width, int starty, int startx);
ncurse_affichage();

void ncurse_affichage()
{

WINDOW *my_win;
int startx, starty, width, height;

initscr();
height = 30; /* c est ici que je fournis les dimention pour la box  ou la windows ? */
width = 100;
starty = (LINES - height) / 2;   /* Calculating for a center placement */
startx = (COLS - width) / 2;   /* of the window      */
my_win = create_newwin(height, width, starty, startx);
}

WINDOW *create_newwin(int height, int width, int starty, int startx)
{   WINDOW *local_win;

   local_win = newwin(height, width, starty, startx);
   box(local_win, 0 , 0);      /* 0, 0 gives default characters
                * for the vertical and horizontal
                * lines         */
   wrefresh(local_win);      /* Show that box       */

   return local_win;
}

Merci d'avance

7 réponses

Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
Ah j'avais mal lu la catégorie
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
BOOL Console_GetSize(HANDLE hConsoleOut, COORD* Size)
{
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    if (!GetConsoleScreenBufferInfo(hConsoleOut,&csbi)) return FALSE;
    memcpy(Size,&csbi.dwSize,sizeof(COORD));
    return TRUE;
}
Messages postés
20
Date d'inscription
vendredi 18 avril 2008
Statut
Membre
Dernière intervention
7 août 2009

Merci pour ta réponse
euh je pense que je me suis mal fait comprendre.
 on dirait que ton code fournis la taille de la console ou du terminal sans passer par ncuse, pourquoi pas ?  mai cepandan il retourn une valeur true ou false, alors qu'il me faut les cordonées je les récupère comment ?
je doit fournire le handle de la console , une piste sur l'api a utiliser ?

Merci encore pour ta réponse
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
Ah, ok j'avais pas documenté :

BOOL Console_GetSize(HANDLE hConsoleOut, COORD* Size)
//Retourne un booléen : ok=TRUE pasOk=FALSE
{
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    if (!GetConsoleScreenBufferInfo(hConsoleOut,&csbi)) return FALSE;
    memcpy(Size,&csbi.dwSize,sizeof(COORD));
    return TRUE;
}

/* Appel de la fonction */

HANDLE hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (hConsoleOut == INVALID_HANDLE_VALUE)
{
  printf("Erreur fatale : impossible de recuperer le handle de la console.\n");
  return 1;
}

COORD consoleSize;
if (Console_GetSize(hConsoleOut,&consoleSize)) printf("X=%d -- Y=%d\n",consoleSize.X,consoleSize.X);
else
{
  printf("Erreur fatale : impossible de determiner la taille de la console.\n");
  return 1;
}

CloseHandle(hConsoleOut);
Messages postés
20
Date d'inscription
vendredi 18 avril 2008
Statut
Membre
Dernière intervention
7 août 2009

Merci pour ta réponse.
sa compile pas , voila les détails.

Je pense que sa doit etre du C , j'utilise le C++ avec comme compilateur g++ (qui devrai supporter aussi le C )

voila comment j'ai tester

#include
#include <string>
BOOL Console_GetSize(HANDLE hConsoleOut, COORD* Size)
//Retourne un booléen : ok=TRUE pasOk=FALSE
{
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    if (!GetConsoleScreenBufferInfo(hConsoleOut,&csbi)) return FALSE;
    memcpy(Size,&csbi.dwSize,sizeof(COORD));
    return TRUE;
}

int main()
{

/* Appel de la fonction */

HANDLE hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (hConsoleOut == INVALID_HANDLE_VALUE)
{
  printf("Erreur fatale : impossible de recuperer le handle de la console.\n");
  return 1;
}

COORD consoleSize;
if (Console_GetSize(hConsoleOut,&consoleSize)) printf("X=%d -- Y=%d\n",consoleSize.X,consoleSize.X);
else
{
  printf("Erreur fatale : impossible de determiner la taille de la console.\n");
  return 1;
}

CloseHandle(hConsoleOut);

}
teste_me.cpp:3: erreur: ‘BOOL’ does not name a type
teste_me.cpp: In function ‘int main()’:
teste_me.cpp:18: erreur: ‘HANDLE’ was not declared in this scope
teste_me.cpp:18: erreur: expected `;' before ‘hConsoleOut’
teste_me.cpp:19: erreur: ‘hConsoleOut’ was not declared in this scope
teste_me.cpp:19: erreur: ‘INVALID_HANDLE_VALUE’ was not declared in this scope
teste_me.cpp:25: erreur: ‘COORD’ was not declared in this scope
teste_me.cpp:25: erreur: expected `;' before ‘consoleSize’
teste_me.cpp:26: erreur: ‘hConsoleOut’ was not declared in this scope
teste_me.cpp:26: erreur: ‘consoleSize’ was not declared in this scope
teste_me.cpp:26: erreur: ‘Console_GetSize’ was not declared in this scope
teste_me.cpp:33: erreur: ‘hConsoleOut’ was not declared in this scope
teste_me.cpp:33: erreur: ‘CloseHandle’ was not declared in this scope

je vois pas pourquoi sa compile pas, peut etre il manque un #include ?
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
T'as oublié d'inclure <windows.h> ...
Messages postés
20
Date d'inscription
vendredi 18 avril 2008
Statut
Membre
Dernière intervention
7 août 2009

alors petite erreur il s'agis de linux ,donc j'ai pas c'est include:

mai le code m'a été donner par Debuger sur irc, merci a lui :)

pour compiler ne pas oublier d'ajouter -lncurses
ensuite voila le code:

#include <ncurses.h>
#include

intmain()
{
initscr();
cbreak();
while(true)
{
std::cout<<LINES<<" "<<COLS<<std::endl;
refresh();
sleep(1);
}
}