Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
1

Обновление определенной координаты консоли, а не всей в С++

02.03.2019, 14:48. Показов 2743. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, у меня назрел такой вопрос, бегая по просторам интернета, я нашел такую ЗАМЕЧАТЕЛЬНУЮ функцию как cls;
она прекрасна, только вот не подходит, далее нашел что-то на подобии этого:
C++
1
2
3
4
5
6
7
void setcur(int x, int y)
{ 
    COORD coord;
    coord.X = x;
    coord.Y = y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
всё бы хорошо да вот только увы нет, обновляет тоже весь экран но по координатно, пробывал. как не крутил, танцевал с бубном возле холодильника , так эта микроволновка и не завелась, никак не выходит чтоб оно обновляло какую-то часть экрана, от части я понимаю что ничего не понимаю, но в нетике(кривые ручки) не нашли ничего дельного про сию функцию, можете пожалуйста подсказать/написать, алгоритм или код чтоб обновлялась та точка, которая мне нужна, а не вся консоль.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.03.2019, 14:48
Ответы с готовыми решениями:

Мгновенное обновление всей консоли
При обновлении небольшой области консоли очень хорошо помогает SetConsoleCursorPosition, однако,...

Использование всей консоли для вывода
Почему когда печатается последний символ в консоли то курсор переходит на новую строку? ...

Обновление div отдельно от всей страницы
Имеется страница, в ней есть такой кусок кода: <div class="logging"> <?php $f =...

Почему при использовании SetConsoleTextAttribute меняется цвет всей консоли?
Когда использую функцию SetConsoleTextAttribute для того что бы задать цвет текста который печатаю,...

13
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
02.03.2019, 15:23 2
Используйте функцию WriteConsole
0
327 / 218 / 108
Регистрация: 12.02.2019
Сообщений: 1,033
02.03.2019, 15:24 3
Цитата Сообщение от Lepricon228 Посмотреть сообщение
увы нет, обновляет тоже весь экран
каким образом?
0
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
02.03.2019, 19:03  [ТС] 4
каким образом?
Обновляет весь экран но по координатно, в плане в консоли 80 единиц ширины, и 25 высоты, он обновляет с 0 каждый раз всю консоль, это почти не видно но на тексте иногда буковки пропадают на милисекунды, посему не приятно.

Используйте функцию WriteConsole
Спасибо, чуть позже попробую отпишу.

Добавлено через 2 часа 47 минут
Промучавшись около часа я так и не понял как оно работает(дурачек...ой, начинающий), можете написать пример обновления с коментариями?
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
02.03.2019, 19:04 5
Есть ли какие то статьи про графику в DOS?
0
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
02.03.2019, 20:23 6
Lepricon228, можно еще здесь посмотреть: Как работать с WriteConsoleOutput? (последние посты)
0
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
02.03.2019, 22:00  [ТС] 7
Я конечно всё понимаю, но этого я не понимаю,
Цитата Сообщение от DrOffset Посмотреть сообщение
Lepricon228, можно еще здесь посмотреть: Как работать с WriteConsoleOutput? (последние посты)
там код на 100+ строк, я ничего не понял из того что там есть, кроме структуры и инициализации интов,
Цитата Сообщение от Croessmah Посмотреть сообщение
Есть ли какие то статьи про графику в DOS?
ваш код полегче, но увы всё равно сложно и не понятно, я видел у человечка код на 5 строк, с этой функцией WriteConsole он перекидывал в неё x и y и оно работало, и это все выходило максимум ан 5 строк, а тут ничего не понятно + очень много всего, может быть я просто зеленоват для сего добра?
0
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
03.03.2019, 00:50 8
Цитата Сообщение от Lepricon228 Посмотреть сообщение
может быть я просто зеленоват для сего добра?
Собственно там почти готовый класс, для рисования всякого - его можно просто использовать, не вникая.
Но раз так, то в той же теме рекомендовали книгу, возможно вам она лучше поможет.
0
327 / 218 / 108
Регистрация: 12.02.2019
Сообщений: 1,033
03.03.2019, 07:31 9
Лучший ответ Сообщение было отмечено Lepricon228 как решение

Решение

Цитата Сообщение от Lepricon228 Посмотреть сообщение
Обновляет весь экран но по координатно, в плане в консоли 80 единиц ширины, и 25 высоты
и что же заставляет void setcur(int x, int y) 2000 раз заниматься этим?

Добавлено через 54 минуты
гоняет символ по всему полю
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
.........
#include <windows.h>
#include <conio.h>
.........
void main(int argc,char **argv)
{
    HANDLE hnd=GetStdHandle(STD_OUTPUT_HANDLE);
    COORD xy={40,12},oldxy={0,0};
    unsigned char ch=0;
    do
    {
        if(_kbhit())
            if((ch=_getch())==224)
            {
                ch=_getch();
                if(ch=='K' && xy.X-1>-1) xy.X--;
                if(ch=='M' && xy.X+1<80) 
                    if(!(xy.X==78 && xy.Y==24)) xy.X++;
                if(ch=='H' && xy.Y-1>-1) xy.Y--;
                if(ch=='P' && xy.Y+1<25) 
                    if(!(xy.X==79 && xy.Y==23)) xy.Y++;
            }
        if(oldxy.X!=xy.X || oldxy.Y!=xy.Y)
        {
            SetConsoleCursorPosition(hnd,oldxy);
            cout<<' ';
            SetConsoleCursorPosition(hnd,xy);
            cout<<'*';
            oldxy=xy;
        }
        Sleep(50);
    }while(ch!=27);
1
621 / 941 / 150
Регистрация: 10.08.2015
Сообщений: 5,019
03.03.2019, 10:17 10
turbo vision? не, не слышал
0
35 / 28 / 8
Регистрация: 01.03.2019
Сообщений: 135
03.03.2019, 10:29 11
Lepricon228,
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
#include <iostream>
#include <windows.h>
 
void set_char(int c, int x, int y)
{
    HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO info;
    GetConsoleScreenBufferInfo(console, &info);
 
    COORD coord = { x, y };
    SetConsoleCursorPosition(console, coord);
    std::cout << (char)(c);
    SetConsoleCursorPosition(console, info.dwCursorPosition);
}
 
int main()
{
    //Draw rectangle
    int n = 10;
    for (int i = 0; i < n; i++)
    {
        set_char('*', i, 0);
        Sleep(500);
        set_char('*', i, n - 1);
        Sleep(500);
        set_char('*', 0, i);
        Sleep(500);
        set_char('*', n - 1, i);
        Sleep(500);
    }
 
    return 0;
}
0
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
03.03.2019, 17:04  [ТС] 12
ALast Ваш код мне полностью не подходит ((

Цитата Сообщение от CoderPC Посмотреть сообщение
гоняет символ по всему полю
ваш код мне полностью подходит, спасибо за помощь!)
0
35 / 28 / 8
Регистрация: 01.03.2019
Сообщений: 135
03.03.2019, 17:07 13
Цитата Сообщение от Lepricon228 Посмотреть сообщение
ALast Ваш код мне полностью не подходит ((
Почему?
0
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
03.03.2019, 21:54  [ТС] 14
Потому что я во-первых слабоват чтоб его полностью понять, во-вторых, это не совсем то что мне нужно было, конечно можно изменить пару параметров и будет как раз, но мне понравился код Кодера потому что поменяв условия на клавиши это прям то что мне надо было.
0
03.03.2019, 21:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.03.2019, 21:54
Помогаю со студенческими работами здесь

Обновление блока без перезагрузки всей страницы
Здравствуйте! У меня на странице присутствует возможность изменения выбранной записи. Так вот, я...

Обновление не всей программы, а лишь отдельных ее компонентов
Доброго времени суток! Интересует вопрос, возможно ли изменять программу не всю полностью, а...

Обновление графического интерфейса всей программы на Java
У меня есть несколько классов, к примеру MainClass - он отвечает за создание главного JFrame,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru