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

Определенный размер окна при консольном выводе - C++

Восстановить пароль Регистрация
 
art3330
 Аватар для art3330
9 / 9 / 1
Регистрация: 16.12.2012
Сообщений: 141
19.04.2013, 14:49     Определенный размер окна при консольном выводе #1
Доброго времени суток.
Возникла такая проблема. Пишу я в geany в windows, подключен gnu c++. При выполнении программы вызывается командная строка, в которой: во-первых окно можно делать любых размеров (но это пол беды), а во-вторых справа присутствует scroll bar, наличие которого нежелательно, так как мне надо выводить определенную таблицу, и с помощью клавиш ее скролить. Поэтому было бы великолепно, сли бы можно было сделать как на паскале. Что у нас есть окно определенных размеров, с которым мы работает.
Надеюсь вопрос мой понятен.
Говорю заранее спасибо за помощь =)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2013, 14:49     Определенный размер окна при консольном выводе
Посмотрите здесь:

C++ Изменение цвета текста и фона при консольном выводе
C++ Размер окна
C++ Размер DOS-окна
Размер окна C++
C++ В консольном выводе выделить разными цветами элементы матрицы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
19.04.2013, 15:39     Определенный размер окна при консольном выводе #2
вопрос не совсем понятен,если тебе надо сделать окно определенного размера юзай winapi а в частности функцию MoveWindow . А вот если тебе надо заблокировать скролбар ,то алгоритм следующий - находишь твоё окно FindWindow далее перичесляеш все его дочернии окна ,тем самым ты находиш скролбар ,при помощи функции - EnumChildWindow (могу ошибаться где то в написании последней функции,но смысл такой,найдеш),и последний шаг , так как ты уже получил дескриптор скролбара блокируеш его,и он становится выбитый и юзер не чего с ним не сделает (прошу прошение если где то в названиях функций сделал ошибки,пишу с телефона,очень не удобно).
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11817 / 6796 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
19.04.2013, 15:39     Определенный размер окна при консольном выводе #3
http://www.vsokovikov.narod.ru/New_M...ole/con_fn.htm
art3330
 Аватар для art3330
9 / 9 / 1
Регистрация: 16.12.2012
Сообщений: 141
19.04.2013, 16:09  [ТС]     Определенный размер окна при консольном выводе #4
Спасибо. Буду разбираться )
art3330
 Аватар для art3330
9 / 9 / 1
Регистрация: 16.12.2012
Сообщений: 141
21.04.2013, 01:53  [ТС]     Определенный размер окна при консольном выводе #5
Изменить размер окна оказалось не так уж и сложно. А что-то с отключение скролл-бара разобраться пока не могу. Если у кого-нибудь есть готовое рещение, то будьте добры, поделитесь
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
21.04.2013, 02:00     Определенный размер окна при консольном выводе #6
art3330, размер буфера экрана уменьшите.
art3330
 Аватар для art3330
9 / 9 / 1
Регистрация: 16.12.2012
Сообщений: 141
21.04.2013, 02:09  [ТС]     Определенный размер окна при консольном выводе #7
UnsKneD, ага! То есть у нас появляются скролл бары, лишь потому, что консоль большая (очень грубо говоря), а вызывается в уменьшенном виде. Уменьшая буфер мы избавляемся от этой ерунды. Я правильно понимаю?
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
21.04.2013, 02:12     Определенный размер окна при консольном выводе #8
art3330, скролл бар появляется потому что большой буфер экрана, он статический в консоле.

Добавлено через 27 секунд
грубо говоря, вы правильно понимаете)))
art3330
 Аватар для art3330
9 / 9 / 1
Регистрация: 16.12.2012
Сообщений: 141
21.04.2013, 02:14  [ТС]     Определенный размер окна при консольном выводе #9
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
#include <windows.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <iostream>
#include <fstream>
 
void RedirectIOToConsole() //перенаправление стандартных потоков в нововый консольный буффер
{
    int hConHandle; long lStdHandle; FILE *fp;
 
    // redirect unbuffered STDOUT to the console
    lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
    fp = _fdopen( hConHandle, "w" );
    *stdout = *fp;
    setvbuf( stdout, NULL, _IONBF, 0 );
 
    // redirect unbuffered STDIN to the console
    lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE);
    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
    fp = _fdopen( hConHandle, "r" );
    *stdin = *fp;
    setvbuf( stdin, NULL, _IONBF, 0 );
 
    // redirect unbuffered STDERR to the console
    lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE);
    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
    fp = _fdopen( hConHandle, "w" );
    *stderr = *fp;
    setvbuf( stderr, NULL, _IONBF, 0 );
 
    // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog
    // point to console as well
    std::ios::sync_with_stdio();
}
 
 
int main()
{
    //создаю новый консольный буффер, какой мне нужно
    HANDLE FirstScreenBuffer= CreateConsoleScreenBuffer( GENERIC_READ | GENERIC_WRITE,0,NULL,CONSOLE_TEXTMODE_BUFFER,NULL );
    
    //активирую его. Теперь консолька на него настроилась 
    SetConsoleActiveScreenBuffer(FirstScreenBuffer);
    
    int res= SetStdHandle(  STD_OUTPUT_HANDLE , FirstScreenBuffer);
    
    RedirectIOToConsole(); //перенастраиваю стандартные потоки ввода/вывода
    
    std::cout<< "ля ля ля\n"; //вывод: ля ля ля
}
Нашел вот такой код. При попытке скомпилировать, выдает ошибку, что res неиспользуемая переменная. Добавил строчку std::cin>>res; все работает. А как без этой строчки обойтись. Ибо неудобно.
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
21.04.2013, 02:18     Определенный размер окна при консольном выводе #10
art3330, эм, а вы не потеряли
C++
1
int res = SetStdHandle(  STD_OUTPUT_HANDLE , FirstScreenBuffer);
? Только что скомпилировал( проект пустой, VS2012 ), всё на ура прошло.
art3330
 Аватар для art3330
9 / 9 / 1
Регистрация: 16.12.2012
Сообщений: 141
21.04.2013, 02:23  [ТС]     Определенный размер окна при консольном выводе #11
Это я наверное уже чуть измененный мною код кинул, но у меня не работает. Ошибка в том, что создаем переменную и нигде ее больше не используем. Только добавил cin эта ошибка улетучилась и все заработало. То есть переменная начала использоваться. Может от компилятора зависит?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2013, 02:45     Определенный размер окна при консольном выводе
Еще ссылки по теме:

C++ Получить размер консольного окна
Кирилица отображается нормально при выводе из программы, но иероглифы при вводе в консоль C++
C++ Размер окна в консольном приложении

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

Или воспользуйтесь поиском по форуму:
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
21.04.2013, 02:45     Определенный размер окна при консольном выводе #12
art3330, может быть, попробуй её вообще убери, раз не используется.
Yandex
Объявления
21.04.2013, 02:45     Определенный размер окна при консольном выводе
Ответ Создать тему
Опции темы

Текущее время: 04:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru