Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как сделать так, чтобы две разные программы могли работать с одной и той же областью оперативной памяти? https://www.cyberforum.ru/ cpp/ thread232485.html
Собственно даже незнаю куда копать. Пробовал в одной программе вывести указатель на массив, а в другой указателю присвоить это значение чего-то компилятор ругается( Интересует как сделать так...
Задержка между записью/чтением Serial-порта C++
Доброе время суток. Работаю с одним устройством через RS232 порт, точнее через его эмуляцию с помощью PL2303 (USB-to-RS232). Подключаюсь к порту на скорости 38400, 8 бит, без учета четности. Так...
C++ Создание документации
Один из самых больных вопросов для плохо организованных проектов :) Вопрос собственно такой: чем (в чём, в каком редакторе) создавать документацию и в каком формате хранить? Есть мысли-вопрос...
C++ Автоматизация OpenOffice 3.2 Доброго времени суток. Необходимо прикрутить OpenOffice 3.2 API к VS 2008 или Qt Creator(вроде как, правда, Оо не дружит особо с MinGW, но все таки). ОС Win7. Долго читал различные манула, форумы и... https://www.cyberforum.ru/ cpp/ thread231355.html
C++ Как написать функцию, которая бы автоматически определяла типа принимаемых параметров? https://www.cyberforum.ru/ cpp/ thread230993.html
Друзья! На самом деле примеров подобных функций много, я имею ввиду конструкторы объектов классов из библиотеки STL Но там принимаемые параметры различаются явно. А у меня- никак, но тем не менее,...
Подключение TLB-файла C++
Доброе время суток. Попросили написать программу учета для кассового аппарата. Чтобы хозяин пришел глянул что как, подредактировал и ушел. На сайте производителя нашел описание протокола связи...
C++ не могу разобраться с процессом
незнал куда написать необходимо разобраться с процессом прикрепленным ниже а именно принцип работы. При работе с дизасемблером(я еще новичок не разбираюсь) суть не открылась мне если кто разбирается...
C++ Программирование микшера для windows 7 Пишу программу - микшер через win API. На XP все работает без проблем, перенес на windows 7 и оказалось что микшер не работает. Проблему нашел при выполнении команды mixerSetControlDetails, выдавала... https://www.cyberforum.ru/ cpp/ thread229994.html
C++ Тестирование потоками данных программы в C++ https://www.cyberforum.ru/ cpp/ thread229941.html
Как это реализовать? где можно почитать
C++ Софт для спутниковых тюнеров Ребята кто нибудь сталкивался стаким вешами писат прогу. для тюнера как сделать это просто стало интересно? Извините если ошибся разделом я пишу на С++ и Visual C++ основном.. https://www.cyberforum.ru/ cpp/ thread229937.html
62 / 61 / 6
Регистрация: 02.09.2008
Сообщений: 181
0

Экранный буфер консоли, где я ошибаюсь?

24.01.2011, 18:00. Просмотров 3043. Ответов 3
Метки (Все метки)

Вот код:
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include <windows.h>
#include <iostream>
using namespace std;
 
HANDLE hStdin, hStdout,hNewScreenBuffer;//буфер экрана становится активным в конце InitSettings
COORD max_size_buffer;
SMALL_RECT srctWindow;
 
int InitSettings();
int ShowBackBuffer();
 
int main()
{    
    InitSettings();//выполняем инициализацию игровой консоли
    cout<<"------------ end InitSettings--------------"<<endl;
 
    cout<<"hStdout - "<<hStdout<<endl;
    cout<<"hNewScreenBuffer - "<<hNewScreenBuffer<<endl;
    getchar();    
    
    ShowBackBuffer();
    cout<<"----------------  end ferst ShowBackBuffer  --------------"<<endl<<endl;
    cout<<"----------------  To continue, click ENTER  --------- "<<endl;    
    getchar();
    return 0;
}//end main
 
//-----InitSettings----------------------------------------------------------------------------------------------------------------
int InitSettings()
{        
    if(!SetConsoleTitle("ASCII Paint"))    //установить заголовок
    {MessageBox(NULL, "ERROR in SetConsoleTitle", "Console Error", MB_OK); return 0;}
 
    hStdin = GetStdHandle(STD_INPUT_HANDLE);
    if (hStdin == INVALID_HANDLE_VALUE)
    {MessageBox(NULL, "ERROR in GetStdHandle STD_INPUT_HANDLE", "Console Error", MB_OK);  return 0;}
 
    hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
    if (hStdout == INVALID_HANDLE_VALUE)
    {MessageBox(NULL, "ERROR in GetStdHandle STD_OUTPUT_HANDLE", "Console Error", MB_OK); return 0;}    
 
    //новый экранный буфер
    hNewScreenBuffer = CreateConsoleScreenBuffer(  GENERIC_READ |               // доступ к чтению/записи
                                                   GENERIC_WRITE,
                                                   0,                           // совместно не используется
                                                   NULL,                        // атрибутов защиты нет
                                                   CONSOLE_TEXTMODE_BUFFER,       // должен быть TEXTMODE
                                                   NULL);                       // зарезервирован, должен быть NULL 
    if (hStdout == INVALID_HANDLE_VALUE || hNewScreenBuffer == INVALID_HANDLE_VALUE)
    {MessageBox(NULL, "ERROR in hNewScreenBuffer == INVALID_HANDLE_VALUE", "Console Error", MB_OK); return 0;}
    
    max_size_buffer = GetLargestConsoleWindowSize(hStdout);        // Получает размер самого большого возможного консольного окна
    srctWindow.Top = 0;
    srctWindow.Left = 0;
    srctWindow.Right = max_size_buffer.X-1;
    srctWindow.Bottom = max_size_buffer.Y-1;
 
    // изменяем размеры буферов консоли 
    if(!SetConsoleScreenBufferSize(hStdout, max_size_buffer))
        {MessageBox(NULL, "ERROR in SetConsoleScreenBufferSize hStdout", "Console Error", MB_OK); return 0;}
    if(!SetConsoleScreenBufferSize(hNewScreenBuffer, max_size_buffer))
        {MessageBox(NULL, "ERROR in SetConsoleScreenBufferSize hNewScreenBuffer", "Console Error", MB_OK); return 0;}
 
    //Устанавливаем текущий размер и позицию окна экранного буфера консоли
    if (! SetConsoleWindowInfo( hStdout,    // дескриптор экранного буфера
                                TRUE,                // Если TRUE, координаты устанавливают новые левый верхний и нижний правый углы окна. 
                                                    // Если FALSE, координаты являются смещениями текущих координат угла окна
                                &srctWindow))        // зададим новое место
    {MessageBox(NULL, "ERROR in SetConsoleWindowInfo", "Console Error", MB_OK); return 0;}
    //Первый вопрос, почему в этом месте окно еще неизменилось?
 
    cout<<"max_size_buffer.X - "<<max_size_buffer.X<<endl;    
    cout<<"max_size_buffer.Y - "<<max_size_buffer.Y<<endl;
    cout<<"hStdout - "<<hStdout<<endl;
    cout<<"hNewScreenBuffer - "<<hNewScreenBuffer<<endl;
    cout<<endl<<"----------------  To continue, click ENTER  --------- "<<endl;
        
    getchar();    //первая остановка
 
    //Сделаем новый экранный буфер активным экранным буфером.
    if (! SetConsoleActiveScreenBuffer(hNewScreenBuffer) )
    {MessageBox(NULL, "ERROR in SetConsoleActiveScreenBuffer(hNewScreenBuffer)", "Console Error", MB_OK); return 0;}
 
    //Устанавливаем текущий размер и позицию окна экранного буфера консоли
    if (! SetConsoleWindowInfo( hNewScreenBuffer,    // дескриптор экранного буфера
                                TRUE,                // Если TRUE, координаты устанавливают новые левый верхний и нижний правый углы окна. 
                                                    // Если FALSE, координаты являются смещениями текущих координат угла окна
                                &srctWindow))        // зададим новое место
    {MessageBox(NULL, "ERROR in SetConsoleWindowInfo", "Console Error", MB_OK); return 0;}
    
    return 0;
}//END----InitSettings-------------------------------------------------------------------------------------------------------------
 
int ShowBackBuffer()
{
    CHAR_INFO chiBuffer[50000];
    COORD coordBufSize = {max_size_buffer.X, max_size_buffer.Y};
    COORD coordBufCoord = {0,0};    
 
    // Установим прямоугольник источника.
    SMALL_RECT srctReadRect = {0, 0, max_size_buffer.X-100, max_size_buffer.Y-2};
    
    //А если делать так 
    //SMALL_RECT srctReadRect = {0, 0, max_size_buffer.X-1, max_size_buffer.Y-1};
    //то выдает ошибку, почему?
 
    // Скопируем блок из экранного буфера во временный буфер.
    if(!ReadConsoleOutput(
       hStdout,            // экранный буфер, из которого читаем
       chiBuffer,          // буфер, в который копируем
       coordBufSize ,   // размер буфера в сроках колонок
       coordBufCoord,      // верхняя левая ячейка назначения в chiBuffer
       &srctReadRect))     // источниковый прямоугольник экранного буфера
 
       {MessageBox(NULL, "ERROR in ReadConsoleOutput", "Console Error", MB_OK); return 0;}
 
    
    // Установим прямоугольник назначения.
    SMALL_RECT srctWriteRect = {0, 0, max_size_buffer.X-1, max_size_buffer.Y-1};
 
    // Копируем из временного буфера в новый экранный буфер.
    if(!WriteConsoleOutput( 
                            hNewScreenBuffer,     // экранный буфер, в который будем записывать
                            chiBuffer,            // буфер, из которого копируем
                            coordBufSize,   // размер колонки/строки hStdin
                            coordBufCoord,  // верхняя левая ячейка источника в hStdin
                            &srctWriteRect))      // прямоугольник назначения экранного буфера
    {MessageBox(NULL, "ERROR in WriteConsoleOutput", "Console Error", MB_OK); return 0;}
    return 0;
}


Программа работает, но не так как я хочу

Вернуться к обсуждению:
Экранный буфер консоли, где я ошибаюсь?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2011, 18:00
Готовые ответы и решения:

Объясните, где я ошибаюсь?
Прошу извинить, что касаюсь &quot;вечного&quot; двигателя второго рода. Но мне важно понять, в чём моя...

Сессии. Где я ошибаюсь?
Начал разбираться с сессиями, кукисами. Планируется сделать 3 защищённых страницы, получается...

Поправьте где ошибаюсь
Добрый день/вечер! Не могу понять в чем проблема, подскажите как решить using...

Подскажите, где в скрипте регистрационной формы я ошибаюсь!
Значит так. Имеется 3 файла: Это сама форма, которую я соответственно вставила в свою страницу:...

3
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.