Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.98/60: Рейтинг темы: голосов - 60, средняя оценка - 4.98
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 84
1

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

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

Здравствуйте.
Нас тут озадачили в универе надеванием штанов через голову. Суть: программа выполняет там некоторые операции, в результате которых имеет две строки - одна с цифрами, другая с буквами. Но это не самое страшное.. Вот она должна их вывести в двух новых разных окнах, а делается всё это исключительно в консоли. При этом не допускается запуск новых экзешников - это должна быть одна программа. Вот, собственно, и вопрос: подскажите, кто знает, в чём глубинный смысл создания консольного окна, как это делать, и как одно из созданных (ну это уже из интереса) убить.
Заранее спасибо.. =_)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.04.2010, 08:47
Ответы с готовыми решениями:

Создание окна в консоли
Как в консоли создать окно и потом выводить текст и считывать уже с этого окна? Чтобы было как на...

Создание дочернего окна в консоли
Интересует вопрос... Посмотрим на картинку, так вот как создать дочернее окно в коносоли? это...

Создание окна консоли из приложения WinForms
Доброго времени суток!!! Есть приложение WinForms, из одной формы по нажатию на кнопку нужно...

Создание тени под TextBlock, которая перемещается при изменении размера окна и масштабирования
Начал изучать UWP, параллельно вспоминая WPF (давно с ним не работал). Возникла проблема с тенью...

19
10 / 10 / 5
Регистрация: 08.07.2009
Сообщений: 34
12.04.2010, 08:59 2
интересная штука. тоже хочется знать. пойду ковырятся.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10875 / 6763 / 1619
Регистрация: 25.07.2009
Сообщений: 12,483
12.04.2010, 09:47 3
Leonidus, если можно Qt использовать, то в принципе не проблема. Вот незатейливый пример... Опять же если нужно просто результат в окошках вывести, в WinAPI есть функция MessageBox() которую вполне можно из консольной программы вызывать...
1
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 84
12.04.2010, 18:10  [ТС] 4
easybudda, я только делаю первые шаги в программировании. Что такое Qt щас погуглю, а вот как вызвать WinAPI функцию я пока не знаю. Например, тот же MessageBox(). Буду премногоблагодарен, если подскажете..)
0
Эксперт С++
1661 / 1033 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
12.04.2010, 19:12 5
Чтобы вызывать функции WinAPI, надо подключить <windows.h>. Чтобы создать новую консоль, надо раскопать справку по функции того же WinAPI под названием AllocConsole и разобраться с тем, как работают с консолями.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10875 / 6763 / 1619
Регистрация: 25.07.2009
Сообщений: 12,483
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
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 84
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
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
16.04.2010, 10:27 8
Leonidus, если ты пишешь на висуал студии то тебе скорей всего надо в самое начало сунуть
Цитата Сообщение от Leonidus Посмотреть сообщение
"stdafx.h"
0
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 84
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
23 / 23 / 5
Регистрация: 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
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10875 / 6763 / 1619
Регистрация: 25.07.2009
Сообщений: 12,483
16.04.2010, 11:17 11
Цитата Сообщение от Leonidus Посмотреть сообщение
С боксами вот такая лажа..
Это не с "боксами лажа" это с MSVS не разобрались... Скопируйте и сохраните текст в любом текстовом редакторе в файл с расширением ".c". Откройте консоль студийную ( у меня оно так выглядит: пуск -> Все программы -> Microsoft Visual Studio 2005 -> Visual Studio Tools -> Visual Studio 2005 Command Prompt ), а дальше, как на картинках, путь только к папке с файлом свой укажите...
Создание окна из - под консоли
Название: laja2.png
Просмотров: 816

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

Размер: 675 байт
0
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 84
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
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 84
17.04.2010, 10:04  [ТС] 13
Создание окна из - под консоли
0
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 84
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
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10875 / 6763 / 1619
Регистрация: 25.07.2009
Сообщений: 12,483
17.04.2010, 13:29 15
Leonidus, Внимательнее читаем! Написал же - путь к папке с файлом свой укажите. Вот так:
Код
e:
cd cpp
cl lab7.c comctl32.lib user32.lib gdi32.lib
и будет Вам счастье.

Не по теме:

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



Добавлено через 4 минуты
Цитата Сообщение от Leonidus Посмотреть сообщение
Что такое NULL (чего там нету или чего там ноль)?
Тут хендл родительского окна должен быть. Если не лень, ищите в MSDN, как хендл консоли получить. Но окошки и так создадутся...
0
23 / 23 / 5
Регистрация: 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"
....вроде ) сейчас , проверю )))
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10875 / 6763 / 1619
Регистрация: 25.07.2009
Сообщений: 12,483
17.04.2010, 13:32 17
Цитата Сообщение от Leonidus Посмотреть сообщение
buf, как я понял, это выводимые данные в массиве, так..?
указатель на строку, которую вывести надо.

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

Цитата Сообщение от Leonidus Посмотреть сообщение
MB_OK - эт что..?)
а на что похоже? кнопка Ok
0
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 84
18.04.2010, 11:21  [ТС] 18
GAME, ну что..?_)
Блин, ну ничего не выходит.. я уже пытаюсь просто тупо вывести строку и чтобы оно в студии скомпилилось.. хоть бы хны.. =(
0
23 / 23 / 5
Регистрация: 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);
0
Эксперт С++
5019 / 2598 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
18.04.2010, 17:11 20
Цитата Сообщение от GAME Посмотреть сообщение
когда ты посылаешь строки в кавычках надо делать так
это зависит от character set
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2010, 17:11

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как избавится от родительского консольного окна при создание WinAPI окна
добрый день. использую DEV-C++, но так понимаю разницы нет, какая у нас IDE. создаём просто...

Создание невидимого окна поверх окна другой программы
Здравствуйте, как сделать невидимое окно поверх окна сторонней программы , например блокнота, и...

Создание модального диалогового окна поверх окна родителя
Не могу не где найти пример как это сделать. Нужно создать модальное окно поверх окна родителя...

Перекодировка из окна консоли
Добрый день, запускаю из-под своей программы консольное приложение (конкретно dsquery.exe), в итоге...


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

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

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