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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.93
[NovicheK]
19 / 19 / 2
Регистрация: 09.03.2012
Сообщений: 91
#1

Можно ли создать окно из консольного приложения - C++

13.03.2012, 17:01. Просмотров 7342. Ответов 6
Метки нет (Все метки)

Допустим имеется программа, работающая в консоли, как из этой программы в определенный момент времени(например при желании пользователя) создать окно и что-нибудь вывести в нем.
Помню видел что-то подобное в консольном плеере(mplayer по-моему назвался).
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2012, 17:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Можно ли создать окно из консольного приложения (C++):

Вывести в окно консольного приложения числа в виде таблицы - C++
Вывести в окно консольного приложения числа в виде таблицы. 20 21 22 23 24 19 20 21 22 18 19 20 17 18 16

Можно ли из консольного приложения вызвать еще одну консоль через функцию? - C++
Если да, то в каком заголовке она лежит?

Как создать программу (экзешник) с GUI на основе кода консольного приложения? - C++
Народ как создать программу если есть код С++ ? Хочу создать программу с окнами ! тип (exe) приложение! Есть исходный код в С++ Программа...

Можно ли создать окно? - C++
Можно ли на С++ написать окно? Если да, то как. Киньте, пожалуйста, пример, если можно.

Проект консольного приложения из Windows приложения - C++
привет всем. В чем может быть ошибка? 1>MSVCRTD.lib(crtexew.obj) : error LNK2019: ссылка на неразрешенный внешний символ _WinMain@16 в...

Можно ли создать простое окно с кнопкой и свернуть его в трей? - C++
Подскажите, как реализовать на с++...Большая благодарность, если кинете примерный код.

6
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
13.03.2012, 18:02 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Да можно! Можно создать подобную конструкцию как в одну так и в другую сторону. Т.е. в консоли вызывать окна и наоборот в окнах вызывать консольное приложение.
Если Вы знакомы с программированием под Windows то используйте следующий алгоритм как для примера.
1.Создайте консольное приложение, но не забудьте указать все необходимые библиотеки и для оконного приложения.
2.Далее можно создать например класс "условны класс". И в методах прописать создание окна windows.
Ну например метод
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <iostream>
#include <windows.h>                     //Два файла с определениями, макросами
#include <windowsx.h>                  //и прототипами функций Windows
//глобальные переменные для рисования окна
HINSTANCE hInstance; HINSTANCE hPrevInst; 
LPSTR lpszArgs; int nWinMode;
/*Прототип используемой в программе оконной функции */
LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM); 
/*Произвольный класс*/
class exemple
{
    public: 
        /*Главная функция приложения WinMain*/
        int  WINAPI WinMain(  HINSTANCE hInstance, HINSTANCE hPrevInst, 
        LPSTR lpszArgs, int nWinMode) {
        char szWinName[ ]="MyWindow";      //Произвольное имя класса главного окна
        char szTitle[ ]="Программа";               //Произвольный заголовок окна
        MSG msg;                    //Структура msg типа MSG для получения сообщений Windows
        WNDCLASS wc;                                  //Структура wc типа WNDCLASS для задания 
                                    //характеристик окна
        /*Заполнение структуры wc типа WNDCLASS для описания класса главного окна*/
        ZeroMemory(&wc,sizeof(wc));                             //Обнуление всех членов структуры wc
        wc.hInstance= hInstance;                                       // Дескриптор приложения
        wc.lpszClassName=szWinName;                           // Имя класса окна
        wc.lpfnWndProc=WindowFunc;                           // Определение оконной функции 
        wc.style=0;                                                            // Стиль по умолчанию
        wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);           //Стандартная пиктограмма
        wc.hCursor=LoadCursor(NULL,IDC_ARROW);              //Стандартный курсор мыши
        wc.hbrBackground=GetStockBrush(WHITE_BRUSH);         // Белый фон окна
        wc.lpszMenuName=NULL;                                  // Без меню
        wc.cbClsExtra=0;                                                  // Без дополнительной информации
        wc.cbWndExtra=0;                                                // Без дополнительной информации
        /*Регистрация класса главного окна*/
        if(!RegisterClass (&wc))                                         //Если класс окна не регистрируется
        {                                    // выводим сообщение и заканчиваем выполнение программы
        MessageBox (NULL,"Окно нерегестрируется","Ошибка",MB_OK);
        return 1;}                                                           // возвращаем код ошибки
        /*Создание главного окна и отображение его на мониторе*/
        HWND hwnd = CreateWindow (                           //Вызов функции API для создания ок-на
        szWinName,                                             // имя класса главного окна
                        szTitle,                                                       // заголовок окна
                        WS_OVERLAPPEDWINDOW,               // Стиль окна 
                        100,                                                            // x-координата левого угла окна
                        100,                                                            // y-координата левого угла окна
                        500,                                                            // Ширина окна
                        100,                                                            // Высота окна
                        HWND_DESKTOP,                                  // Без родительского окна
                        NULL,                                                       // Без меню
                        hInstance,                                                  // Дескриптор приложения
                        NULL);                                                     // Без дополнительных аргументов
        ShowWindow (hwnd, SW_SHOWNORMAL);       //  Вызов функции API
                                            // для отображения окна 
        /*Организация цикла обнаружения сообщений*/
        while(GetMessage(&msg,NULL,0,0))               // Если есть сообщение, передать его
                    // нашему приложению
        DispatchMessage(&msg);                               //и вызвать оконную функцию WindowFunc 
        return 0;                                                     //После выхода из цикла вернуться в Windows
        }                                                                    //Конец функции WinMain
        
};
 
/*Оконная функция WindowFunc главного окна, вызываемая Windows и получающая в качестве параметра сообщение из очереди сообщений данного приложения */
LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message,
                                WPARAM wParam, LPARAM lParam)  {
switch(message) {                                      // выбор по значению сообщения (message)
case WM_DESTROY:                           //При завершении приложения пользователем
PostQuitMessage (0);                           //вызвать функцию API завершения приложения
break; 
default:                                    // Все сообщения, не обрабатываемые данной функцией,
                                            // направляются на обработку по умолчанию 
return DefWindowProc (hwnd,message,wParam,lParam);
}                                                           //Конец оператора switch
return 0;
}
//главная функция консольного приложения
int main(void)
{
    
    setlocale(LC_ALL,"Russian_Russia.1251");//изменения кодировки для вывода русского языка 
    SYSTEMCRASH: //точка возврата
    std::cout<<"Введите 1 что бы нарисовать окно, \nдля выхода нажмите клавишу 2 :";
    char ch_chose = '\0';
    std::cin>>ch_chose;
    class exemple val;
    switch(ch_chose)
    {
    case '2':
            exit(0);
            break;
    case '1':
        val.WinMain( hInstance,  hPrevInst, 
         lpszArgs,  nWinMode);
            break;
    default:
        std::cout<<"Недопустимый символ попробуйте ещё! \n";
        goto SYSTEMCRASH;
    }
 
 
}
Надеюсь идея ясна, окно есть ну а дальше кто на что горазд.
Сори за "грязную" работу но нет смысла оптимизировать. Сделал на быструю руку.
Написал на VS 10 если не идет прикрепляю скриншот.
9
Миниатюры
Можно ли создать окно из консольного приложения  
Nameless One
15.03.2012, 12:29
  #3

Не по теме:

Цитата Сообщение от NovicheK Посмотреть сообщение
Помню видел что-то подобное в консольном плеере(mplayer по-моему назвался).
так mplayer сразу в окне запускается

0
[NovicheK]
19 / 19 / 2
Регистрация: 09.03.2012
Сообщений: 91
15.03.2012, 19:51  [ТС] #4
хм, только что погуглил скачал этот плеер. запустил из командной строки. плеер выводит видео в окно, а сообщения выводит в командную строку.
0
Грешник
0 / 0 / 0
Регистрация: 28.09.2012
Сообщений: 15
04.10.2012, 18:08 #5
Скажите пожалуйста, а как можно сделать наоборот то есть в окнах вызывать консольное приложение??? Если можно и примерчик напишите. Заранее спасибо!!!
0
asidorchenko
379 / 205 / 25
Регистрация: 09.04.2012
Сообщений: 635
11.11.2012, 13:08 #6
в окнах вызывать консольное приложение???
C++
1
2
#include <Wincon.h>
AllocConsole();
1
Khludenkov
32 / 26 / 4
Регистрация: 30.04.2014
Сообщений: 421
16.07.2015, 15:02 #7
stawerfar, а есть ли возможность в этом окне нарисовать графику?

Есть консольный проект на С++ с кучей dll и lib. Надо к нему GUI сделать. Пробовал эти либы подключать и в Qt и в C#. Не коннектятся. Решил пока оставить как есть и подключить дополнительное окно.
0
16.07.2015, 15:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2015, 15:02
Привет! Вот еще темы с ответами:

Отладка консольного приложения - C++
в отладчике OllyDbg открыл оконный проект из Делфи, вся информация, код отображаются нормально. Таким же способом открыл обычную консольную...

Из консольного приложения в dll - C++
Доброго времени суток. Есть консольный проект который нужно переделать в dll библиотеку. Вызываться из другой программы будет лишь одна...

Интерфейс консольного приложения - C++
Мне интересно, реально ли это вообще? Поясню на конкретном примере. Пытаюсь писать консольную игру-файтинг. Текстовая ,естественно. ...

Рестарт консольного приложения - C++
Как можно реализовать рестарт консольного приложения (использую VS 2012)? Находил на форуме решения только для Borland.


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

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

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