Консольный режим и MFC
От: ahaos  
Дата: 25.01.21 16:46
Оценка:
Можно ли как-нибудь реализовать запуск MFC-приложения в оконном или консольном режиме в зависимости от параметра командной строки?
Re: Консольный режим и MFC
От: qaz77  
Дата: 26.01.21 09:09
Оценка:
Здравствуйте, ahaos, Вы писали:
A>Можно ли как-нибудь реализовать запуск MFC-приложения в оконном или консольном режиме в зависимости от параметра командной строки?

Для exe способ запуска задается в параметрах линкера /SUBSYSTEM:WINDOWS или /SUBSYSTEM:CONSOLE.
Соответственно, в рантайме изменить его не получится.

Для настоящих консольных приложений (которые /SUBSYSTEM:CONSOLE) возможно использование одного консольного окна несколькими процессами.
Например, из Far запускаем консольную прогу, она вываливает свой вывод в консоль Far'a.

Если устраивает вариант, когда будет всегда создаваться свое консольное окно, то можно скрестить MFC-шные окошки и консоль.

Вот так можно инициализировать MFC в рантайм:
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR /*lpCmdLine*/,
                     int nCmdShow)
{
   if (AfxWinInit(hInstance, hPrevInstance, ::GetCommandLineW(), nCmdShow))
   {
      // ... здесь можем работать с MFC
      AfxWinTerm();
   }
}


А так создать новое консольное окно:
if (AllocConsole())
{
    SetConsoleCtrlHandler(..., TRUE);
    SetConsoleTitleW(L"My Console");

    freopen("CON", "at", stdout);
    freopen("CON", "at", stderr);
}


Теоретически в WinMain можно делать одно или другое, в зависимости от командной строки.
Отредактировано 26.01.2021 9:10 qaz77 . Предыдущая версия .
Re: Консольный режим и MFC
От: DTB Россия  
Дата: 26.01.21 09:15
Оценка:
Здравствуйте, ahaos, Вы писали:

A>Можно ли как-нибудь реализовать запуск MFC-приложения в оконном или консольном режиме в зависимости от параметра командной строки?


вся беда я так понимаю в Subsystem и сделать оба варианта в одном приложении скорее всего не выйдет.

однако, т.к. дело в консоли, то можно (если соотв. параметр запуска из консоли задан) самому определить, запускается ли приложение из консоли (тогда используем ее, printf, etc.), а если ее нет, то создаем сами и работаем через нее (AllocConsole, WriteConsole, etc.)
Have fun...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.