Как обойти графический интерфейс в приложении MFC, если существуют параметры командной строки? - PullRequest
5 голосов
/ 17 июня 2010

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

1 Ответ

3 голосов
/ 18 июня 2010

MFC устанавливает класс, который будет называться C [Ваше имя приложения] Хранилище приложений (например, 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 () вызовет ваше диалоговое окно.Если этого избежать, графический интерфейс никогда не запустится.

Если вы используете приложение 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, либо она попадет в насос сообщений приложения.

...