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

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

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

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

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

Допустим имеется программа, работающая в консоли, как из этой программы в определенный момент времени(например при желании пользователя) создать окно и что-нибудь вывести в нем.
Помню видел что-то подобное в консольном плеере(mplayer по-моему назвался).
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2012, 17:01     Можно ли создать окно из консольного приложения
Посмотрите здесь:
Вывести в окно консольного приложения числа в виде таблицы C++
Можно ли из консольного приложения вызвать еще одну консоль через функцию? C++
C++ Как создать программу (экзешник) с GUI на основе кода консольного приложения?
C++ Можно ли создать окно?
Проект консольного приложения из Windows приложения C++
C++ Можно ли создать простое окно с кнопкой и свернуть его в трей?
Мню консольного приложения C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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 если не идет прикрепляю скриншот.
Миниатюры
Можно ли создать окно из консольного приложения  
Nameless One
15.03.2012, 12:29
  #3

Не по теме:

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

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

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

Или воспользуйтесь поиском по форуму:
Khludenkov
31 / 25 / 4
Регистрация: 30.04.2014
Сообщений: 402
16.07.2015, 15:02     Можно ли создать окно из консольного приложения #7
stawerfar, а есть ли возможность в этом окне нарисовать графику?

Есть консольный проект на С++ с кучей dll и lib. Надо к нему GUI сделать. Пробовал эти либы подключать и в Qt и в C#. Не коннектятся. Решил пока оставить как есть и подключить дополнительное окно.
Yandex
Объявления
16.07.2015, 15:02     Можно ли создать окно из консольного приложения
Ответ Создать тему
Опции темы

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