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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 97, средняя оценка - 4.77
YourLastSong
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
16.03.2012, 17:04     Необходимо изменить размеры окна консоли #1
Приветствую.

Необходимо изменить размеры окна консоли, допустим, на 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.

Что делать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2012, 17:04     Необходимо изменить размеры окна консоли
Посмотрите здесь:

C++ WinAPI размеры окна
C++ Оформление чёрного окна консоли VS C++
C++ Создание окна из - под консоли
C++ Заголовок окна консоли
C++ Расширение окна консоли
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1787
Регистрация: 18.12.2011
Сообщений: 14,197
Завершенные тесты: 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, ширина и высота
    ....
}
YourLastSong
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
16.03.2012, 17:31  [ТС]     Необходимо изменить размеры окна консоли #3
Вы уверены, что это должно работать?

Только что проверил - не помогает.
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1787
Регистрация: 18.12.2011
Сообщений: 14,197
Завершенные тесты: 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();
}
QWAN
56 / 55 / 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;
}
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 - это значения . Ну вы поняли короче =)
AlexVRud
414 / 143 / 36
Регистрация: 04.07.2014
Сообщений: 415
10.07.2014, 10:38     Необходимо изменить размеры окна консоли #7
Цитата Сообщение от YourLastSong Посмотреть сообщение
Размеры окна она действительно изменила, однако полосы прокрутки так и остались, даже несмотря на использование функции SetConsoleScreenBufferSize.
Ты изменял размер буфера окна, а не его размеры.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2014, 11:02     Необходимо изменить размеры окна консоли
Еще ссылки по теме:

Как получить размеры и положение всего окна? C++
Как в C++ задать размеры консольного окна, используя пространство имен System C++
Как изменить размер текста в консоли C++

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

Или воспользуйтесь поиском по форуму:
QWAN
56 / 55 / 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;
}
Yandex
Объявления
10.07.2014, 11:02     Необходимо изменить размеры окна консоли
Ответ Создать тему
Опции темы

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