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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 97, средняя оценка - 4.77
YourLastSong
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
#1

Необходимо изменить размеры окна консоли - C++

16.03.2012, 17:04. Просмотров 15027. Ответов 7
Метки нет (Все метки)

Приветствую.

Необходимо изменить размеры окна консоли, допустим, на 50 * 50 средствами WinAPI, поэтому вот такой код

C++
1
system ("mode con cols=50 lines=50");
не подходит.

Посмотрел MSDN, нашёл функцию SetConsoleWindowInfo.

Попытался использовать след. образом:

C++
1
2
3
4
COORD crd = {50, 50};
SMALL_RECT src = {0, 0, crd.X, crd.Y};
SetConsoleScreenBufferSize (GetStdHandle (STD_OUTPUT_HANDLE), crd);
SetConsoleWindowInfo (GetStdHandle (STD_OUTPUT_HANDLE), TRUE, &src);
Размеры окна она действительно изменила, однако полосы прокрутки так и остались, даже несмотря на использование функции SetConsoleScreenBufferSize.

Что делать?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2012, 17:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Необходимо изменить размеры окна консоли (C++):

Как получить размеры и положение всего окна? - C++
Не рабочей области, а именно целиком.

Как в C++ задать размеры консольного окна, используя пространство имен System - C++
Здрасти, вашему вниманию предлагается кусочек кода на C# Console.WindowTop = 0; Console.WindowLeft = 0; ...

Расширение окна консоли - C++
Доброго времени суток! Подскажите, пожалуйста, как расширить окно консоли. Не увеличить во весь экран, а именно расширить. Оно у меня вниз...

Оформление чёрного окна консоли VS C++ - C++
Здравствуйте. Как в си ++ в чёрном окне сделатать следующее: Нужно сделать заливку синим цветом и чтоб буквы голубым (Как в FAR'е). ...

Создание окна из - под консоли - C++
Здравствуйте. Нас тут озадачили в универе надеванием штанов через голову. Суть: программа выполняет там некоторые операции, в результате...

Изменение заголовка окна программы в консоли - C++
Здравствуйте. Нужна помощь. Как сделать так, чтобы окно программы в консоли было подписано названием моей программы, а не путём к ней....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6380 / 5945 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
16.03.2012, 17:24 #2
А поробуйте через widows.h
C++
1
2
3
4
5
6
7
8
9
10
11
...
#include <windows.h>
int main()
{
    HWND hwnd;       
    char Title[1024];
    GetConsoleTitle(Title, 1024); // Узнаем имя окна
    hwnd=FindWindow(NULL, Title); // Узнаем hwnd окна
    MoveWindow(hwnd,xnew,ynew,wnew,hnew,TRUE);//xnew,ynew,wnew,hnew -новые положение x,y, ширина и высота
    ....
}
0
YourLastSong
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
16.03.2012, 17:31  [ТС] #3
Вы уверены, что это должно работать?

Только что проверил - не помогает.
0
zss
Модератор
Эксперт С++
6380 / 5945 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
16.03.2012, 18:15 #4
Цитата Сообщение от YourLastSong Посмотреть сообщение
Вы уверены, что это должно работать?

Только что проверил - не помогает.
К сожалению, не могу проверить прямо сейчас.
Но полагал, что если можно получить дескриптор окна hwnd,
то можно и попробовать его изменить через MoveWindow().
Не получается наверное потому, что пока не закончится исполнение main(),
никакие сообщения не обрабатываются.

Добавлено через 2 минуты
Все-таки удалось поробовать.
Получается на ура!!!!
Вот полный код:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <windows.h>
#include <conio.h>
int main()
{
    HWND hwnd;       
    char Title[1024];
    GetConsoleTitle(Title, 1024); // Узнаем имя окна
    hwnd=FindWindow(NULL, Title); // Узнаем hwnd окна
    MoveWindow(hwnd,0,0,200,200,TRUE);//xnew,ynew,wnew,hnew -новые положение x,y, ширина и высота
    _getch();
}
1
QWAN
58 / 57 / 1
Регистрация: 02.09.2008
Сообщений: 181
16.03.2012, 19:20 #5
Код C++
1
Цитата Сообщение от YourLastSong Посмотреть сообщение
COORD crd = {50, 50};
SMALL_RECT src = {0, 0, crd.X, crd.Y};
SetConsoleScreenBufferSize (GetStdHandle (STD_OUTPUT_HANDLE), crd);
SetConsoleWindowInfo (GetStdHandle (STD_OUTPUT_HANDLE), TRUE, &src);

SMALL_RECT src = {0, 0, crd.X-1, crd.Y-1}; // так должно работать без полос прокрутки

Добавлено через 11 минут
Проверил работает. Нужно быо функции местами еще поменять, первая должна выполняться ф-я SetConsoleWindowInfo
C++
1
2
3
4
5
6
7
8
9
10
#include <windows.h>
int main()
{
    HANDLE out_handle = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD crd = {25, 25};
    SMALL_RECT src = {0, 0, crd.X-1, crd.Y-1};
    SetConsoleWindowInfo (out_handle, true, &src);
    SetConsoleScreenBufferSize (out_handle, crd);    
    return 0;
}
1
Nummerok
19 / 19 / 2
Регистрация: 30.05.2014
Сообщений: 431
09.07.2014, 23:34 #6
Но размер консоли не меняется более 300х80. Мне нужно более 80 менять. Подскажите , как тогда буффер консоли юзать?

Добавлено через 4 минуты
нашел решение ограничения размеров консольного окна.
system("mode con lines=X cols=Y"); // X,Y - это значения . Ну вы поняли короче =)
0
AlexVRud
442 / 152 / 38
Регистрация: 04.07.2014
Сообщений: 431
10.07.2014, 10:38 #7
Цитата Сообщение от YourLastSong Посмотреть сообщение
Размеры окна она действительно изменила, однако полосы прокрутки так и остались, даже несмотря на использование функции SetConsoleScreenBufferSize.
Ты изменял размер буфера окна, а не его размеры.
0
QWAN
58 / 57 / 1
Регистрация: 02.09.2008
Сообщений: 181
10.07.2014, 11:02 #8
Используй функцию GetLargestConsoleWindowSize, извлекает размер самого большого возможного консольного окна, основанного на текущем шрифте и размере дисплея.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <windows.h>
using namespace std;
 
int main()
{
    HANDLE out_handle = GetStdHandle(STD_OUTPUT_HANDLE);    
    COORD maxWindow = GetLargestConsoleWindowSize(out_handle); // размер самого большого возможного консольного окна
    SMALL_RECT srctWindow = { 0, 0, maxWindow.X - 1, maxWindow.Y - 1 };    
    SMALL_RECT minWindow = { 0, 0, 0, 0 };
    SetConsoleWindowInfo(out_handle, true, &minWindow);    
    SetConsoleScreenBufferSize(out_handle, maxWindow);
    SetConsoleWindowInfo(out_handle, true, &srctWindow);    
    cout << "maxX = " << maxWindow.X << "; " << "maxY = " << maxWindow.Y <<endl;    
    getchar();
    return 0;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2014, 11:02
Привет! Вот еще темы с ответами:

Изменить цвет текста в консоли - C++
как изменить цвет в консоли? cout&lt;&lt;&quot;Hello&quot;; нужно чтобы стал желтым

Необходимо чтобы каждый поток (не файловый) писал данные в ОТДЕЛЬНОЕ ОКНО КОНСОЛИ - C++
Друзья! Разбираюсь с библиотекой pthread, потоки-читатели выводят данные в одно окно консоли, очень неудобно тестировать. Допустим, два...

Как изменить размер текста в консоли - C++
Как изменить размер текста в консоли (например, какую использовать системную команду, аналог system(&quot;color 00&quot;) для изменения...

Задержать закрытие окна консоли после выполнения программы - C++
Какой командой задержать экран C++ после выполнения программы, а то он сразу исчезает.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.07.2014, 11:02
Ответ Создать тему
Опции темы

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