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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 55, средняя оценка - 4.91
Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
#1

Создание окна из - под консоли - C++

12.04.2010, 08:47. Просмотров 7440. Ответов 19
Метки нет (Все метки)

Здравствуйте.
Нас тут озадачили в универе надеванием штанов через голову. Суть: программа выполняет там некоторые операции, в результате которых имеет две строки - одна с цифрами, другая с буквами. Но это не самое страшное.. Вот она должна их вывести в двух новых разных окнах, а делается всё это исключительно в консоли. При этом не допускается запуск новых экзешников - это должна быть одна программа. Вот, собственно, и вопрос: подскажите, кто знает, в чём глубинный смысл создания консольного окна, как это делать, и как одно из созданных (ну это уже из интереса) убить.
Заранее спасибо.. =_)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2010, 08:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание окна из - под консоли (C++):

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

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

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

Необходимо изменить размеры окна консоли - C++
Приветствую. Необходимо изменить размеры окна консоли, допустим, на 50 * 50 средствами WinAPI, поэтому вот такой код system...

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

Socket в консоли под Win на g++ - C++
Помогите новичку начать.... Хочу в консоли написать сервер. Передавать клиентам строки/буферы/файлы... Нашел простейшие примеры,...

19
Me11eR
10 / 10 / 0
Регистрация: 08.07.2009
Сообщений: 34
12.04.2010, 08:59 #2
интересная штука. тоже хочется знать. пойду ковырятся.
0
easybudda
Модератор
Эксперт CЭксперт С++
9717 / 5668 / 971
Регистрация: 25.07.2009
Сообщений: 10,911
12.04.2010, 09:47 #3
Leonidus, если можно Qt использовать, то в принципе не проблема. Вот незатейливый пример... Опять же если нужно просто результат в окошках вывести, в WinAPI есть функция MessageBox() которую вполне можно из консольной программы вызывать...
1
Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
12.04.2010, 18:10  [ТС] #4
easybudda, я только делаю первые шаги в программировании. Что такое Qt щас погуглю, а вот как вызвать WinAPI функцию я пока не знаю. Например, тот же MessageBox(). Буду премногоблагодарен, если подскажете..)
0
Nick Alte
Эксперт С++
1643 / 1015 / 120
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
12.04.2010, 19:12 #5
Чтобы вызывать функции WinAPI, надо подключить <windows.h>. Чтобы создать новую консоль, надо раскопать справку по функции того же WinAPI под названием AllocConsole и разобраться с тем, как работают с консолями.
0
easybudda
Модератор
Эксперт CЭксперт С++
9717 / 5668 / 971
Регистрация: 25.07.2009
Сообщений: 10,911
12.04.2010, 20:16 #6
Leonidus, программа по сути бестолковая, но показывает, как можно MessageBox() использовать
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
 
#define STR_LEN 128
    
int main(void){
    char buf[STR_LEN];
    int num;
    
    printf("String: ");
    if ( !fgets(buf, STR_LEN, stdin) )
        exit(1);
    printf("Number: ");
    if ( scanf("%d", &num) != 1 )
        exit(1);
    
    MessageBox(NULL, buf, "String value", MB_OK);
    sprintf(buf, "%d", num);
    MessageBox(NULL, buf, "Int value", MB_OK);
    
    exit(0);
}
0
Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
16.04.2010, 09:54  [ТС] #7
С боксами вот такая лажа..(((


1>.\Lab_7.cpp(1) : warning C4627: #include <stdio.h>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
1>.\Lab_7.cpp(2) : warning C4627: #include <stdlib.h>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
1>.\Lab_7.cpp(3) : warning C4627: #include <windows.h>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
1>.\Lab_7.cpp(13) : error C3861: printf: идентификатор не найден
1>.\Lab_7.cpp(14) : error C2065: stdin: необъявленный идентификатор
1>.\Lab_7.cpp(14) : error C3861: fgets: идентификатор не найден
1>.\Lab_7.cpp(15) : error C3861: exit: идентификатор не найден
1>.\Lab_7.cpp(16) : error C3861: printf: идентификатор не найден
1>.\Lab_7.cpp(17) : error C3861: scanf: идентификатор не найден
1>.\Lab_7.cpp(18) : error C3861: exit: идентификатор не найден
1>.\Lab_7.cpp(20) : error C2065: NULL: необъявленный идентификатор
1>.\Lab_7.cpp(20) : error C2065: MB_OK: необъявленный идентификатор
1>.\Lab_7.cpp(20) : error C3861: MessageBox: идентификатор не найден
1>.\Lab_7.cpp(21) : error C3861: sprintf: идентификатор не найден
1>.\Lab_7.cpp(22) : error C2065: NULL: необъявленный идентификатор
1>.\Lab_7.cpp(22) : error C2065: MB_OK: необъявленный идентификатор
1>.\Lab_7.cpp(22) : error C3861: MessageBox: идентификатор не найден
1>.\Lab_7.cpp(24) : error C3861: exit: идентификатор не найден
0
GAME
23 / 23 / 3
Регистрация: 31.10.2009
Сообщений: 199
16.04.2010, 10:27 #8
Leonidus, если ты пишешь на висуал студии то тебе скорей всего надо в самое начало сунуть
Цитата Сообщение от Leonidus Посмотреть сообщение
"stdafx.h"
0
Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
16.04.2010, 10:32  [ТС] #9
Сунул.. Это с ним вместе..

Добавлено через 16 секунд
GAME, а у тебя компилируется нормально?

Добавлено через 1 минуту
Ололо..
Сунул его в сааамое начало:

1>------ Построение начато: проект: Lab_7, Конфигурация: Debug Win32 ------
1>Компиляция...
1>Lab_7.cpp
1>.\Lab_7.cpp(19) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(306): см. объявление 'scanf'
1>.\Lab_7.cpp(22) : error C2664: MessageBox: невозможно преобразовать параметр 2 из 'char [128]' в 'LPCTSTR'
1> Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>.\Lab_7.cpp(24) : error C2664: MessageBox: невозможно преобразовать параметр 2 из 'char [128]' в 'LPCTSTR'
1> Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции

Добавлено через 14 секунд
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
0
GAME
23 / 23 / 3
Регистрация: 31.10.2009
Сообщений: 199
16.04.2010, 10:38 #10
Ну это ошибки из за разных кодировок.
Тут есть 2 варианта.
1й.
Зайти в обозреватель решений,тыркнуть правой кнопкой по твоему проэкту (скорей всего 2я сверху строка ) и поменять набор знаков на многодайтовый.
2й.
Просто поставь в тех местах , где ошибки
C++
1
(LPCTSTR)
перед именем массива(явное приведение типов)

пример
C++
1
 MessageBox(NULL, (LPCTSTR)buf, "String value", MB_OK);
0
easybudda
Модератор
Эксперт CЭксперт С++
9717 / 5668 / 971
Регистрация: 25.07.2009
Сообщений: 10,911
16.04.2010, 11:17 #11
Цитата Сообщение от Leonidus Посмотреть сообщение
С боксами вот такая лажа..
Это не с "боксами лажа" это с MSVS не разобрались... Скопируйте и сохраните текст в любом текстовом редакторе в файл с расширением ".c". Откройте консоль студийную ( у меня оно так выглядит: пуск -> Все программы -> Microsoft Visual Studio 2005 -> Visual Studio Tools -> Visual Studio 2005 Command Prompt ), а дальше, как на картинках, путь только к папке с файлом свой укажите...
Создание окна из - под консолиНазвание: laja2.png
Просмотров: 736

Размер: 697 байтНазвание: laja3.png
Просмотров: 737

Размер: 675 байт
0
Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
17.04.2010, 09:40  [ТС] #12
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
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
 
 
 
#define STR_LEN 128
 
        
int main(void){
        char buf[STR_LEN];
        int num;
        
        printf("String: ");
        if ( !fgets(buf, STR_LEN, stdin) )
                exit(1);
        printf("Number: ");
        if ( scanf("%d", &num) != 1 )
                exit(1);
        
        MessageBox(NULL, (LPCTSTR)buf, "String value", MB_OK);
        sprintf(buf, "%d", num);
        MessageBox(NULL, (LPCTSTR)buf, "Int value", MB_OK);
        
        exit(0);
}
Результат:
1>Компиляция...
1>Lab_7.cpp
1>.\Lab_7.cpp(19) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(306): см. объявление 'scanf'
1>.\Lab_7.cpp(22) : error C2664: MessageBox: невозможно преобразовать параметр 3 из 'const char [13]' в 'LPCTSTR'
1> Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>.\Lab_7.cpp(24) : error C2664: MessageBox: невозможно преобразовать параметр 3 из 'const char [10]' в 'LPCTSTR'
1> Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции

Оно надо мной издевается..(

Через изменение на многобайтовую кодировку:

1>Компиляция...
1>stdafx.cpp
1>Компиляция...
1>Lab_7.cpp
1>.\Lab_7.cpp(19) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(306): см. объявление 'scanf'
1>.\Lab_7.cpp(23) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): см. объявление 'sprintf'
1>AssemblyInfo.cpp
1>Создание кода...
1>Компиляция ресурсов...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>Компоновка...
1>Lab_7.obj : error LNK2028: ссылка на неразрешенную лексему (0A000020) "extern "C" int __stdcall MessageBoxA(struct HWND__ *,char const *,char const *,unsigned int)" (?MessageBoxA@@$$J216YGHPAUHWND__@@PBD1I@Z) в функции "extern "C" int __cdecl MessageBox(struct HWND__ *,char const *,char const *,unsigned int)" (?MessageBox@@$$J0YAHPAUHWND__@@PBD1I@Z)
1>Lab_7.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" int __stdcall MessageBoxA(struct HWND__ *,char const *,char const *,unsigned int)" (?MessageBoxA@@$$J216YGHPAUHWND__@@PBD1I@Z) в функции "extern "C" int __cdecl MessageBox(struct HWND__ *,char const *,char const *,unsigned int)" (?MessageBox@@$$J0YAHPAUHWND__@@PBD1I@Z)
1>E:\Visual c++\Lab_7\Debug\Lab_7.exe : fatal error LNK1120: 2 неразрешенных внешних элементов
0
Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
17.04.2010, 10:04  [ТС] #13
Создание окна из - под консоли
0
Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
17.04.2010, 11:40  [ТС] #14
Ладно.. Помогите тогда вывести простое предложение в одном месс боксе, пожалуйста..)
Точнее как оно строиться.. Нашёл вот такой вариант:
MessageBoxA(NULL, buf, "Message title", MB_OK);
Что такое NULL (чего там нету или чего там ноль)?
buf, как я понял, это выводимые данные в массиве, так..?
"Message title" - заголовок?
MB_OK - эт что..?)

Добавлено через 54 минуты
Ладно.. Помогите тогда вывести простое предложение в одном месс боксе, пожалуйста..)
Точнее как оно строиться.. Нашёл вот такой вариант:
MessageBoxA(NULL, buf, "Message title", MB_OK);
Что такое NULL (чего там нету или чего там ноль)?
buf, как я понял, это выводимые данные в массиве, так..?
"Message title" - заголовок?
MB_OK - эт что..?)
0
easybudda
Модератор
Эксперт CЭксперт С++
9717 / 5668 / 971
Регистрация: 25.07.2009
Сообщений: 10,911
17.04.2010, 13:29 #15
Leonidus, Внимательнее читаем! Написал же - путь к папке с файлом свой укажите. Вот так:
Код
e:
cd cpp
cl lab7.c comctl32.lib user32.lib gdi32.lib
и будет Вам счастье.

Не по теме:

Вот, блин, молодёжь... Консоли, как чёрт ладана, боятся...



Добавлено через 4 минуты
Цитата Сообщение от Leonidus Посмотреть сообщение
Что такое NULL (чего там нету или чего там ноль)?
Тут хендл родительского окна должен быть. Если не лень, ищите в MSDN, как хендл консоли получить. Но окошки и так создадутся...
0
17.04.2010, 13:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2010, 13:29
Привет! Вот еще темы с ответами:

Кодировка ввода вывода консоли под кириллицу и латиницу - C++
Возникла необходимость одновременной работы кириллицы и латиницы в консоле.(ввод-обработка-вывод) setlocale(LC_CTYPE, &quot;rus&quot;); ...

Создание консоли - C++
Хочу сделать командную строку на основе стандартной, вот код, но никак не пойму как заставить работать команду cd. int main() { ...

Создание консоли - C++
подскажите код: менюшка: 1. вывести на экран 2. сделать тото. 3. выйти вопрос - как это реализуется в коде? чтоб меню...

Как в консоли под Windows выкинуть исключение диалоговым окном? - C++
Привет! Как можно выкинуть окошко виндусовское с красным крестиком, мол, хана! исключение там то ! в консоле самому? throw же работает в...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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