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

консоль во все окно - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
11.04.2010, 01:00     консоль во все окно #1
Здрасти, можно ли как нибудь программно сделать чтобы при запуске консоль автоматически делалась на весь экран?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2010, 01:00     консоль во все окно
Посмотрите здесь:

C++ как програмно развернуть окно программы(консоль)
C++ xCode консоль показывает не все элементы
C++ Написать программу, которая выводит в консоль все числа, кратные 3 в диапазоне от 0 до 100
Написать программу, которая предлагает пользователю ввести число и выводит в консоль все числа, на которые введенное делится без остатка C++
Заполнить все окно вывода прямоугольными треугольниками C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
11.04.2010, 01:22     консоль во все окно #2
Если не ошибаюсь, последний параметр в WinMain() как-раз про это...
kirjushyk
60 / 22 / 2
Регистрация: 13.03.2010
Сообщений: 65
11.04.2010, 01:24     консоль во все окно #3
Консольные приложения разрабатывают для универсального ввода и вывода.

Добавлено через 36 секунд
А о внешнем виде заботятся не разработчики консольного приложения...
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
11.04.2010, 01:28  [ТС]     консоль во все окно #4
kirjushyk, ну мне надо чтобы во весь экран

Добавлено через 3 минуты
easybudda, а что за WinMain()?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
11.04.2010, 01:42     консоль во все окно #5
PointsEqual, http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspxХотя там нет какого-нибудь SW_FULLSCREEN
в винде можно ярлык к программе сделать и в его свойствах указать, чтоб во всё окно запускалось...
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
11.04.2010, 01:57     консоль во все окно #6
PointsEqual, easybudda прав, консольное приложение можно максимизировать путем правки ярлыка приложения.
Хотя в принципе никто не мешает (если я конечно не ошибаюсь) при запуске послать окну консоли сообщение для его максимизации.
***GIN***
 Аватар для ***GIN***
27 / 27 / 1
Регистрация: 09.04.2010
Сообщений: 60
11.04.2010, 03:13     консоль во все окно #7
Как и всегда - все гениальное просто Держи пример:
C++
1
2
3
4
5
6
7
8
9
10
#include <windows.h>
#include <iostream>
 
int main( void )
{
  COORD dummy;
  bool ret = SetConsoleDisplayMode(GetStdHandle( STD_OUTPUT_HANDLE ), 1, &dummy);
  std::cin.get();
  return 0;
}
Честно говоря я сам немного "озадачился" пока думал ) А вообще лучше сам еще почитай MSDN про функцию

C++
1
2
3
4
5
BOOL WINAPI SetConsoleDisplayMode(
  __in          HANDLE hConsoleOutput,
  __in          DWORD dwFlags,
  PCOORD lpNewScreenBufferDimensions
);

и вот еще интересный пример, но писал не я, каюсь...

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
#include <windows.h>
#include <iostream>
 
 
BOOL NT_SetConsoleDisplayMode(HANDLE hOutputHandle, DWORD dwNewMode)
{
    typedef BOOL (WINAPI *SCDMProc_t) (HANDLE, DWORD, LPDWORD);
    SCDMProc_t SetConsoleDisplayMode;
    HMODULE hKernel32;
    BOOL bFreeLib = FALSE, ret;
    const char KERNEL32_NAME[] = "kernel32.dll";
 
    hKernel32 = GetModuleHandleA(KERNEL32_NAME);
    if (hKernel32 == NULL)
    {
        hKernel32 = LoadLibraryA(KERNEL32_NAME);
        if (hKernel32 == NULL)
            return FALSE;
 
        bFreeLib = true;
    }//if
 
    SetConsoleDisplayMode = 
        (SCDMProc_t)GetProcAddress(hKernel32, "SetConsoleDisplayMode");
    if (SetConsoleDisplayMode == NULL)
    {
        SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
        ret = FALSE;
    }//if
    else
    {
        DWORD dummy;
        ret = SetConsoleDisplayMode(hOutputHandle, dwNewMode, &dummy);
    }//else
 
    if (bFreeLib)
        FreeLibrary(hKernel32);
 
    return ret;
}//NT_SetConsoleDisplayMode
 
int main( void )
{
  NT_SetConsoleDisplayMode( GetStdHandle( STD_OUTPUT_HANDLE ), 1 );
  std::cin.get();
  return 0;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
11.04.2010, 12:56     консоль во все окно #8
Цитата Сообщение от ***GIN*** Посмотреть сообщение
BOOL WINAPI SetConsoleDisplayMode( __in HANDLE hConsoleOutput, __in DWORD dwFlags, PCOORD lpNewScreenBufferDimensions );
Что-то у меня это счастье так и не заработало. В том wincon.h который к MSVS 2005 прилагается, такой функции вообще нет (хотя в MSDN опять же 2005 она описана). А в варианте wincon.h из gcc значится:
C
1
2
3
#if (_WIN32_WINNT >= 0x0501)
BOOL WINAPI SetConsoleDisplayMode(HANDLE,DWORD,PCOORD);
#endif
и тоже ни за какие коврижки не компилируется... Даже вот так пробовал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <windows.h>
#include <iostream>
 
#ifdef _WIN32_WINNT
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0502
#endif
 
int main( void )
{
  COORD dummy;
  SetConsoleDisplayMode(GetStdHandle( STD_OUTPUT_HANDLE ), 1, &dummy);
  std::cout << "Hello, World!" << std::endl;
  std::cin.get();
  return 0;
}
всё равно не работает...
Код
C:\cpp\system>g++ -o full_screen.exe full_screen.cpp
full_screen.cpp: In function `int main()':
full_screen.cpp:12: error: `SetConsoleDisplayMode' was not declared in this scope
Код
C:\cpp\system>cl full_screen.cpp
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

full_screen.cpp
...
full_screen.cpp(12) : error C3861: 'SetConsoleDisplayMode': identifier not found
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
11.04.2010, 14:11     консоль во все окно #9
Цитата Сообщение от ***GIN*** Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
#include <windows.h>
#include <iostream>
 
int main( void )
{
  COORD dummy;
  bool ret = SetConsoleDisplayMode(GetStdHandle( STD_OUTPUT_HANDLE ), 1, &dummy);
  std::cin.get();
  return 0;
}
Чуть переделал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <windows.h>
#include <iostream>
 
int main() {
  COORD dummy;
  
  BOOL bSuccess = SetConsoleDisplayMode(GetStdHandle(STD_OUTPUT_HANDLE), CONSOLE_FULLSCREEN_MODE, &dummy);
 
  if (!bSuccess) {
    DWORD dwError = GetLastError();
    std::cerr << dwError << std::endl;
    return 1;
  }
 
  std::cin.get();
 
  return 0;
}
SetConsoleDisplayMode возвращает FALSE, а GetLastError ERROR_CALL_NOT_IMPLEMENTED. MSVS 2008, Windows 7 Ultimate.
Попробуйте проверить у себя.
***GIN***
 Аватар для ***GIN***
27 / 27 / 1
Регистрация: 09.04.2010
Сообщений: 60
11.04.2010, 17:41     консоль во все окно #10
На самом деле странно... Попробуй действительно вызвать SetConsoleDisplayMode из библиотеки kernel32.dll как это сделано в "моем" втором примере, предварительно загрузи ее и вызывай эту функцию как там показано. Мне почему то кажется у тебя к проекту как раз kernel32.dll не подгружена... Проверь ее наличие в разделе Project/Properties/Linker/Command Line. Посмотри на мое содержимое данного раздела и сравни со своим:

/OUT:"D:\Visual Studio 2008\test\Debug\test.exe" /INCREMENTAL /NOLOGO /MANIFEST /MANIFESTFILE:"Debug\test.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"d:\Visual Studio 2008\test\Debug\test.pdb" /SUBSYSTEM:CONSOLE /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
11.04.2010, 18:09     консоль во все окно #11
***GIN***, если бы kernel32.lib не была подключена, линкер не смог бы связать с ней вызов SetConsoleDisplayMode, так что дело не в этом.
***GIN***
 Аватар для ***GIN***
27 / 27 / 1
Регистрация: 09.04.2010
Сообщений: 60
18.04.2010, 01:27     консоль во все окно #12
Я тут подумал немного, и пришел к одной мысли. У тебя случайно не Windows Vista или 7 ???
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
18.04.2010, 01:32     консоль во все окно #13
Цитата Сообщение от ***GIN*** Посмотреть сообщение
У тебя случайно не Windows Vista или 7
Именно Windows 7, но далеко не случайно.
***GIN***
 Аватар для ***GIN***
27 / 27 / 1
Регистрация: 09.04.2010
Сообщений: 60
18.04.2010, 01:41     консоль во все окно #14
На сколько я знаю, там нет поддержки полноэкранного режима консоли как это было скажем в XP. По крайней мере я знаю точно, что в Windows Vista у меня воспользоваться такой фичей не получалось...

Добавлено через 4 минуты
Почитай скажем здесь:

http://social.technet.microsoft.com/...-f7afdccdc0c2/

Добавлено через 47 секунд
В 7 я думаю такая же проблема-фича
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
18.04.2010, 01:49     консоль во все окно #15
***GIN***, так и есть. Я писал в посте #9 что функция SetConsoleDisplayMode в Windows 7 возвращает ошибку, означающую, что данная функция не реализована (ERROR_CALL_NOT_IMPLEMENTED).
***GIN***
 Аватар для ***GIN***
27 / 27 / 1
Регистрация: 09.04.2010
Сообщений: 60
18.04.2010, 02:00     консоль во все окно #16
В общем зря в Microsoft отказались от использования данной функции, а я хотел верить в обратное) К сожалению только сейчас вспомнил, что когда то, года полтора назад встречался с данной проблемой. И куда катиться Microsoft... остается верить в то что все это к лучшему)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2010, 02:06     консоль во все окно
Еще ссылки по теме:

C++ Консоль как главное окно!
C++ Вывести на консоль все элементы столбца двумерного массива
Как развернуть таблицу на все окно? C++

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

Или воспользуйтесь поиском по форуму:
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
18.04.2010, 02:06     консоль во все окно #17
Цитата Сообщение от ***GIN*** Посмотреть сообщение
И куда катиться Microsoft.
В правильном направлении. Консольное окно во весь экран - бред, ибо не красиво, не удобно и не нужно.
Yandex
Объявления
18.04.2010, 02:06     консоль во все окно
Ответ Создать тему
Опции темы

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