Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 23.04.2015
Сообщений: 12
1

GUI для консольного приложения

26.05.2015, 15:36. Показов 3073. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как можно интегрировать GUI приложение на MFC и консольное приложение C++?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.05.2015, 15:36
Ответы с готовыми решениями:

Особенности CreateProcess консольного приложения
Здравствуйте. Запускаю процесс консольного приложения. В итоге процесс запускается, но как только я...

Считать текст с консольного приложения
Как считать текст с чужой программы которая в консольном формате? С обычных программ я просто...

Управлять событиями окна консольного приложения
Можно ли как-то ловить события окна консольного приложения ? Конкретно нужно отлавливаться отсылку...

Управлять событиями окна консольного приложения
Можно ли как-то ловить события окна консольного приложения ? Конкретно нужно отлавливаться отсылку...

12
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
26.05.2015, 21:54 2
Все зависит от того, что это за приложение и как реализовано.
Если оно поддерживает ключи командной строки, то достаточно будет простого CreateProcess с передачей аргументов.
Если это интерактивное приложение, где предполагается некое взаимодействие (ввод данных с клавиатуры),
то нужно подключатся к нему через AttachConsole, указав PID, а дальше можете посмотреть несколько способов чтения/записи в этом примере.
2
0 / 0 / 0
Регистрация: 23.04.2015
Сообщений: 12
09.06.2015, 15:34  [ТС] 3
Имеется ввиду не создание еще одного процесса, а например в GUI, при нажатии на кнопку, вызывался main консольного приложения, просто это сделать не получается, ибо приложение достаточно громоздкое, которое в свою очередь подключает в себя еще очень много разных плюшек
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
09.06.2015, 17:49 4
Запустить консольное приложение из-под графического, не создавая процесса?
Ну, можно прописать таблицу экспорта в него. Будет EXE-шник двойного назначения- исполняемый и либа (если автор - Вы).
Сработает ли с консольным... Придут эксперты, поправят меня.
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
10.06.2015, 09:30 5
Функция main может быть только одна во всей программе.
Если требуется создать консоль в GUI приложении, т это можно сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <fcntl.h>
 
// ...
 
static void main_console() {
    AllocConsole();
    SetConsoleTitle( "My Console" );
 
    FILE * fp_out = _fdopen( _open_osfhandle( (intptr_t)GetStdHandle( STD_OUTPUT_HANDLE ), _O_TEXT ), "w");
    setvbuf( fp_out, NULL, _IONBF, 1 );
    *stdout = *fp_out;
 
    FILE * fp_in = _fdopen( _open_osfhandle( (intptr_t)GetStdHandle( STD_INPUT_HANDLE ), _O_TEXT ), "r" );
    setvbuf( fp_in, NULL, _IONBF, 128 );
    *stdin = *fp_in;
 
    //
    // теперь можно пользоваться стандартными функциями ввода/вывода: printf, gets и т.п.
    //
 
}
2
0 / 0 / 0
Регистрация: 23.04.2015
Сообщений: 12
10.06.2015, 10:58  [ТС] 6
то что main в приложении может быть только один это понятно, имелось ввиду запихнуть этот main именно в GUIшную функцию, и не нужно создавать консоль, приложение уже есть, консольное оно чисто условно(сервер), не требует никакого общения с пользователем, но требует для себя графической оболочки, причем нужно это сделать, не вызывая консольное приложение как новый процесс
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
10.06.2015, 11:36 7
Я так и не понял что куда необходимо интегрировать.
GUI в консольное или наоборот? Объясни толком.
1
0 / 0 / 0
Регистрация: 23.04.2015
Сообщений: 12
10.06.2015, 12:08  [ТС] 8
есть вот это условно консольное приложение, для него нужно сделать графическую оболочку на mfc
gui в консольное или наоборот, не принципиально
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
10.06.2015, 12:22 9
Ну а в чём проблема? Интегрируй.
Любое консольное приложение может создавать окна.
0
0 / 0 / 0
Регистрация: 23.04.2015
Сообщений: 12
10.06.2015, 12:28  [ТС] 10
можно какой пример или мануал, раньше никогда с этим не работал, а при попытке сделать влоб, вылезет куча ошибок которых быть не должно, просто на ровном месте
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
10.06.2015, 12:46 11
Пример чего? Окно создать не можешь?
Пиши как пробовал посмотрим.

Добавлено через 10 минут
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
#include <windows.h>
 
static LRESULT CALLBACK wnd_proc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) {
    switch ( uMsg ) {
        case WM_DESTROY:
            PostQuitMessage( 0 );
            break;
 
        default:
            return DefWindowProc( hWnd, uMsg, wParam, lParam );
    }
    return 0;
}
 
int main()
{
    WNDCLASS wc;
    ZeroMemory( &wc, sizeof( WNDCLASS ) );
    wc.lpfnWndProc      = wnd_proc;
    wc.hInstance        = GetModuleHandle( NULL );
    wc.lpszClassName    = "test32cls";
    wc.hCursor          = LoadCursor( NULL, IDC_ARROW );
    wc.hbrBackground    = (HBRUSH)(COLOR_BTNFACE + 1);
    RegisterClass( &wc );
 
    CreateWindow( wc.lpszClassName, "Title", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 300, 200, NULL, NULL, wc.hInstance, NULL );
 
    MSG msg;
    while ( GetMessage( &msg, NULL, 0, 0 ) ) {
        TranslateMessage( &msg );
        DispatchMessage( &msg );
    }
    return 0;
}
Пример создания окна.
0
0 / 0 / 0
Регистрация: 23.04.2015
Сообщений: 12
06.07.2015, 15:48  [ТС] 12
Вернулся к проекту, собрал и GUI и сервер(консольное приложение) в один проект, mfc-шная часть работает как надо, а сервер, как будто игнорирует
0
267 / 170 / 40
Регистрация: 25.08.2014
Сообщений: 1,087
Записей в блоге: 1
07.07.2015, 14:53 13
AllocConsole и использовать WriteConsole/ReadConsole, первым параметром используя то, что вернёт GetStdHandle(STD_OUTPUT_HANDLE).
0
07.07.2015, 14:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.07.2015, 14:53
Помогаю со студенческими работами здесь

Редирект stdout,stderr своего же консольного приложения
Возможно ли сделать редирект stdout,stderr своего же консольного приложения? Не порождая дочерних...

Перенос кусок кода из консольного приложения в Windows Forms
DWORD WINAPI InstanceThread(_In_ LPVOID hPipe) { LPWSTR strRequest = new WCHAR;...

Как программно выполнить команду консольного приложения, запущенного CreateProcess?
Посылаю команду консольному приложению, которая выполняется только после закрытия хэндла = закрытия...

Работа с сайтом посредством GUI приложения
Доброго времени суток. Не знаю где разместить тему, но т.к. ипользовать буду С++ и Winapi разместил...

Создание GUI для консольного приложения на C++
Я хотел создать GUI для консольного приложения на C++. Но возникла одна проблема - передавать...

Написать GUI для консольного приложения
Доброго времени суток всем. Имеется консольное приложение, хочу присобачить к нему GUI, но в виде...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru