Как я обхожу GUI в приложении MFC, если параметры командной строки существуют?

У меня есть существующее простое приложение MFC, что пользователь указывает входной файл, выходной файл и затем кнопку "Process". Я хотел бы просто добавить возможность так, чтобы файлы ввода/вывода были параметрами командной строки. Но, если они существуют, я не хочу, чтобы GUI обнаружился. Я просто хочу, чтобы "Процесс" выполнился. Я вижу, где я могу получить параметры командной строки (m_lpCmdLine), но как я могу обойти отображение GUI? Если я ступаю в приложение, оно переходит непосредственно к winmain.cpp и отображает GUI, не ступая ни в один мой код.

5
задан bsh152s 17 June 2010 в 15:14
поделиться

1 ответ

MFC устанавливает класс, который будет называться C[Имя вашего приложения]App (например, CExampleApp) и храниться в [Имя вашего приложения].h/.cpp (например, Example.h/.cpp) Здесь у вас будет функция под названием "InitInstance" (опять же автоматически генерируемая MFC). Если вы создали приложение, основанное на диалоге, то в функции будет немного кода, который выглядит следующим образом:

CExampleDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
    // TODO: Place code here to handle when the dialog is
    //  dismissed with OK
}
else if (nResponse == IDCANCEL)
{
    // TODO: Place code here to handle when the dialog is
    //  dismissed with Cancel
}

В частности, вызов "dlg.DoModal()" вызовет ваше диалоговое окно. Если вы избежите этого, то GUI никогда не запустится.

Если вы используете MDI-приложение, то у вас будет код, подобный этому:

// create main MDI Frame window
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME))
    return FALSE;
m_pMainWnd = pMainFrame;

pMainFrame->ShowWindow(m_nCmdShow);
pMainFrame->UpdateWindow();

Это создает и показывает ваше главное окно. Избегайте этого, и никакое окно не будет создано. Однако вы ДОЛЖНЫ вернуть FALSE из функции InitInstance, иначе приложение перейдет в режим выгрузки сообщений.

3
ответ дан 15 December 2019 в 06:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: