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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 55, средняя оценка - 4.91
Leonidus
 Аватар для Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
12.04.2010, 08:47     Создание окна из - под консоли #1
Здравствуйте.
Нас тут озадачили в универе надеванием штанов через голову. Суть: программа выполняет там некоторые операции, в результате которых имеет две строки - одна с цифрами, другая с буквами. Но это не самое страшное.. Вот она должна их вывести в двух новых разных окнах, а делается всё это исключительно в консоли. При этом не допускается запуск новых экзешников - это должна быть одна программа. Вот, собственно, и вопрос: подскажите, кто знает, в чём глубинный смысл создания консольного окна, как это делать, и как одно из созданных (ну это уже из интереса) убить.
Заранее спасибо.. =_)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Me11eR
 Аватар для Me11eR
10 / 10 / 0
Регистрация: 08.07.2009
Сообщений: 34
12.04.2010, 08:59     Создание окна из - под консоли #2
интересная штука. тоже хочется знать. пойду ковырятся.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
12.04.2010, 09:47     Создание окна из - под консоли #3
Leonidus, если можно Qt использовать, то в принципе не проблема. Вот незатейливый пример... Опять же если нужно просто результат в окошках вывести, в WinAPI есть функция MessageBox() которую вполне можно из консольной программы вызывать...
Leonidus
 Аватар для Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
12.04.2010, 18:10  [ТС]     Создание окна из - под консоли #4
easybudda, я только делаю первые шаги в программировании. Что такое Qt щас погуглю, а вот как вызвать WinAPI функцию я пока не знаю. Например, тот же MessageBox(). Буду премногоблагодарен, если подскажете..)
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,898
Завершенные тесты: 1
12.04.2010, 19:12     Создание окна из - под консоли #5
Чтобы вызывать функции WinAPI, надо подключить <windows.h>. Чтобы создать новую консоль, надо раскопать справку по функции того же WinAPI под названием AllocConsole и разобраться с тем, как работают с консолями.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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);
}
Leonidus
 Аватар для 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: идентификатор не найден
GAME
 Аватар для GAME
22 / 22 / 3
Регистрация: 31.10.2009
Сообщений: 199
16.04.2010, 10:27     Создание окна из - под консоли #8
Leonidus, если ты пишешь на висуал студии то тебе скорей всего надо в самое начало сунуть
Цитата Сообщение от Leonidus Посмотреть сообщение
"stdafx.h"
Leonidus
 Аватар для 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>
GAME
 Аватар для GAME
22 / 22 / 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);
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
16.04.2010, 11:17     Создание окна из - под консоли #11
Цитата Сообщение от Leonidus Посмотреть сообщение
С боксами вот такая лажа..
Это не с "боксами лажа" это с MSVS не разобрались... Скопируйте и сохраните текст в любом текстовом редакторе в файл с расширением ".c". Откройте консоль студийную ( у меня оно так выглядит: пуск -> Все программы -> Microsoft Visual Studio 2005 -> Visual Studio Tools -> Visual Studio 2005 Command Prompt ), а дальше, как на картинках, путь только к папке с файлом свой укажите...
Создание окна из - под консолиНазвание: laja2.png
Просмотров: 700

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

Размер: 675 байт
Leonidus
 Аватар для 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 неразрешенных внешних элементов
Leonidus
 Аватар для Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
17.04.2010, 10:04  [ТС]     Создание окна из - под консоли #13
Создание окна из - под консоли
Leonidus
 Аватар для 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 - эт что..?)
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
17.04.2010, 13:29     Создание окна из - под консоли #15
Leonidus, Внимательнее читаем! Написал же - путь к папке с файлом свой укажите. Вот так:
Код
e:
cd cpp
cl lab7.c comctl32.lib user32.lib gdi32.lib
и будет Вам счастье.

Не по теме:

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



Добавлено через 4 минуты
Цитата Сообщение от Leonidus Посмотреть сообщение
Что такое NULL (чего там нету или чего там ноль)?
Тут хендл родительского окна должен быть. Если не лень, ищите в MSDN, как хендл консоли получить. Но окошки и так создадутся...
GAME
 Аватар для GAME
22 / 22 / 3
Регистрация: 31.10.2009
Сообщений: 199
17.04.2010, 13:30     Создание окна из - под консоли #16
Цитата Сообщение от Leonidus Посмотреть сообщение
MessageBoxA(NULL, buf, "Message title", MB_OK);
первый параметр - что-то наподобии окна-родителя.
второй - собственно сам текст
третий - заголовок
четвёртый - стиль окна. MB_OK - окно с кнопкой ОК , их много , можешь на мсдн посмотреть.
Leonidus, насчёт ошибок, извини , забыл ещё кое-что :
когда ты посылаешь строки в кавычках надо делать так
C++
1
L"YOUR TEXT"
....вроде ) сейчас , проверю )))
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
17.04.2010, 13:32     Создание окна из - под консоли #17
Цитата Сообщение от Leonidus Посмотреть сообщение
buf, как я понял, это выводимые данные в массиве, так..?
указатель на строку, которую вывести надо.

Цитата Сообщение от Leonidus Посмотреть сообщение
"Message title" - заголовок?
да

Цитата Сообщение от Leonidus Посмотреть сообщение
MB_OK - эт что..?)
а на что похоже? кнопка Ok
Leonidus
 Аватар для Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
18.04.2010, 11:21  [ТС]     Создание окна из - под консоли #18
GAME, ну что..?_)
Блин, ну ничего не выходит.. я уже пытаюсь просто тупо вывести строку и чтобы оно в студии скомпилилось.. хоть бы хны.. =(
GAME
 Аватар для GAME
22 / 22 / 3
Регистрация: 31.10.2009
Сообщений: 199
18.04.2010, 15:05     Создание окна из - под консоли #19
Цитата Сообщение от Leonidus Посмотреть сообщение
GAME, ну что..?_)

а да, всё так) я думал вы уже попробовали это )
Цитата Сообщение от Leonidus Посмотреть сообщение
MessageBox(NULL, (LPCTSTR)buf, L"String value", MB_OK);
MessageBox(NULL, (LPCTSTR)buf, L"Int value", MB_OK);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2010, 17:11     Создание окна из - под консоли
Еще ссылки по теме:

C++ Создание консоли
Socket в консоли под Win на g++ C++
C++ Кодировка ввода вывода консоли под кириллицу и латиницу

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

Или воспользуйтесь поиском по форуму:
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
18.04.2010, 17:11     Создание окна из - под консоли #20
Цитата Сообщение от GAME Посмотреть сообщение
когда ты посылаешь строки в кавычках надо делать так
это зависит от character set
Yandex
Объявления
18.04.2010, 17:11     Создание окна из - под консоли
Ответ Создать тему
Опции темы

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