Форум программистов, компьютерный форум CyberForum.ru

Динамическое изменение консольного окна, с избежанием появления полос прокрутки - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ с++ версии выпусков где просмотреть http://www.cyberforum.ru/cpp-beginners/thread632667.html
у меня такое дело - хотел с 2010 студии перейти на с++ 6.0 но она виснет странным образом. есть что то поновее чем с++ 6 но без установки дап нет.
C++ Симулятор собеседника? Ребята, привет. Хочу задать вопрос. Я хочу сделать программу, в которой пишешь например: 1 - программа отвечает 2. Допустим. Вопрос: Как это сделать?. http://www.cyberforum.ru/cpp-beginners/thread632661.html
error C2228: left of '.add' must have class/struct/union type. в чем ошибка? C++
Помогите понять в чем ошибка. Пасиб. #include <iostream.h> class book { private: char name_book; char name_avtor; int number;
C++ Как скрыть из командной строки мигающую черту?
Как скрыть из командной строки мигающую черту?
C++ меню для Telnet http://www.cyberforum.ru/cpp-beginners/thread632611.html
Доброго времени суток! Подскажите пожалуйста с такой вот проблемой: В прошивке написанной на си делаю что-то вроде интерфейса для Telnet. Чтоб при подключении к железке через Telnet ввести "s" а в ответ "Enter a command " вводишь набор символов и они записываются в буфер пока не нажмешь на ентер. Вот как я понял это, но чет нихрена не работает. Помогите пожалуйста //подключился к железке...
C++ Перегрузка new и delete Помогите пожалуйста разобраться! Непонимаю примера из Т.А. Павловская "C/C++ Программирование на языке высокого уровня" для большей ясности цитирую Перегрузка операции выделения памяти применяется для экономии памяти, повышения быстродействия программы или для размещения данных в некоторой конкретной области. Например, пусть описывается класс, содержащий указатель на некоторый объект: ... подробнее

Показать сообщение отдельно
Faerror
0 / 0 / 0
Регистрация: 03.08.2012
Сообщений: 6
04.08.2012, 12:06     Динамическое изменение консольного окна, с избежанием появления полос прокрутки
Здравствуйте, коллеги. Я нуждаюсь в помощи и совете.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <locale>
using namespace std;
 
const int WIDTH = 59;
const int HEIGHT = 37;
 
HANDLE handleConsole = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO cursor00 = {100, true};
COORD curs00 = {0, 0};
COORD coord_buf01 = {59, 50};
COORD coord_buf02 = {100, 50};
COORD coord_buf03 = {-29, 50};
 
void gen_array(char g_array[HEIGHT][WIDTH]); 
void show_array(char sh_array[HEIGHT][WIDTH]);
void curs_array_gotoXY(int x, int y);
 
int main() {
  
  SMALL_RECT coord_rect_buf01 = {0, 0, 49, 58}; 
  SMALL_RECT coord_rect_buf02 = {0, 0, 49, 99};
  //SMALL_RECT coord_rect_buf03 = {0, 0, 49, -29};// test
  
    
  setlocale(LC_ALL, "Russian");
  SetConsoleTitle("**TEST**");
  SetConsoleCursorInfo(handleConsole, &cursor00); 
  
  
  
  system("mode con cols=59 lines=50");
  SetConsoleWindowInfo(handleConsole, true, &coord_rect_buf01);
  SetConsoleScreenBufferSize(handleConsole, coord_buf01);
  
  
  char array[HEIGHT][WIDTH];
  gen_array(array); 
  show_array(array);
   
  
  while(true){
  Sleep(2000);
  system("mode con cols=100 lines=50");  
  SetConsoleWindowInfo(handleConsole, true, &coord_rect_buf02);
  SetConsoleScreenBufferSize(handleConsole, coord_buf02);
  show_array(array);
  
  Sleep(1000);  
  system("mode con cols=59 lines=50");
  SetConsoleWindowInfo(handleConsole, true, &coord_rect_buf01);
  SetConsoleScreenBufferSize(handleConsole, coord_buf01);
  show_array(array);
  }
  
  //SetConsoleWindowInfo(handleConsole, true, &coord_rect_buf03); //test
  //SetConsoleScreenBufferSize(handleConsole, coord_buf03);
  
  
    
  
  cin.get();
  return 0;
}
 
 
void gen_array(char g_array[HEIGHT][WIDTH]) {
 
  int x, y;
  
  for(y = 0; y < HEIGHT; y++) {
    for(x = 0; x < WIDTH; x++) {
      g_array[y][x] = '0';
    }
  }
 
}
 
void show_array(char sh_array[HEIGHT][WIDTH]) {
    
  register int x;
  register int y;
  
  for(y = 0; y < HEIGHT; y++) {
    for(x = 0; x < WIDTH; x++) {
      cout << sh_array[y][x];
    }
    
    curs_array_gotoXY(0, y); 
  }
 
  
  
}
 
void curs_array_gotoXY(int x, int y) {
  COORD curs00 = {x, y};
  SetConsoleCursorPosition(handleConsole, curs00);
}
В данном виде код исправно функционирует, однако, в цикле while{} наблюдается мерцание отображенного массива, из-за того, что его приходится отрисовывать раз за разом. Не малую роль, на мой взгляд, играет функция system(), отвечающая за задание размеров окна.
Проблема в том, что:
1. Если через функцию system() задать большой размер окна, скажем 200х100, то при изменении буфера как в меньшую, так и в большую сторону ведет к возникновению полос прокрутки.
2. Если изначально задать размер окна меньше или равный нужному, при изменении размера буфера наблюдаются те же полосы.
3. Если однажды задать размер окна, а потом изменить с помощью system(), не добавляя функцию отрисовки массива, то после изменения его и не будет.
4. Если же использовать описанный выше код, наблюдается раздражающее мерцание.

Вопрос следующий:
Можно ли в процессе выполнения программы изменять размеры окна, избегая появления полос прокрутки и необходимости раз за разом отрисовывать массив?
И еще, там где установлен комментарий test, можно ли таким образом изменять буфер окна "влево"?

Добавлено через 17 часов 34 минуты
Ну хоть тапками покидайтесь, поругайтесь, что я чушь написал, а то непонятно же куда дальше плясать.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru