2010-06-17 13 views
5

Tengo una aplicación MFC simple existente que el usuario especifica el archivo de entrada, el archivo de salida y luego el botón "Proceso". Me gustaría simplemente agregar la capacidad para que los archivos de entrada/salida sean parámetros de línea de comando. Pero, si existen, no quiero que aparezca la GUI. Solo quiero que se ejecute el "Proceso". Veo dónde puedo obtener los parámetros de línea de comandos (m_lpCmdLine), pero ¿cómo puedo omitir la visualización de la GUI? Si entro en la aplicación, va directamente a winmain.cpp y muestra la GUI sin entrar en ninguno de mis códigos.¿Cómo omito la GUI en la aplicación MFC si existen opciones de línea de comandos?

Respuesta

3

MFC configura una clase que se llamará la aplicación C [Nombre de su aplicación] (por ejemplo, CExampleApp) en [Su nombre de aplicación] .h/.cpp (por ejemplo, Ejemplo.h/.cpp) Aquí tendrá una función llamada "InitInstance" (otra vez auto generada por MFC). Si ha creado una aplicación basada en diálogo entonces tendrá un poco de código que se parece a esto en la función:

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 
} 

En concreto, el "dlg.DoModal()" llamada llamará a su ventana de diálogo. Si evita eso, entonces la GUI nunca comenzará.

Si está utilizando una aplicación MDI, entonces tendrá algo de código como este:

// 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(); 

Esto crea y muestra su ventana principal. Evita esto y no se creará ninguna ventana. Sin embargo, DEBE devolver FALSO desde la función InitInstance o ingresará a la bomba de mensajes de la aplicación.

+0

En mi caso, necesitaba el 'LoadFrame()', pero aunque no estaba llamando a 'ShowWindow()', el fotograma parpadearía. Descubrí que al llamar a 'CWinAppEx :: m_bLoadWindowPlacement = false;' justo antes de 'LoadFrame()' no se obtiene ventana ni parpadeo. – mateuscb

Cuestiones relacionadas