J'ai essayé d'écrire une courte application de base de données Visual Studio C++ MFC et de rencontrer un comportement étrange en utilisant ShellExecute()
.Comportement étrange dans Visual C++ ShellExecute() fonction
#include "stdafx.h"
#include <iphlpapi.h>
#include "Shlwapi.h"
#include "TestShellExecute.h"
#include "TestShellExecuteDlg.h"
// CTestShellExecuteApp
BEGIN_MESSAGE_MAP(CTestShellExecuteApp, CWinApp)
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()
// The one and only CTestShellExecuteApp object
CTestShellExecuteApp theApp;
// CTestShellExecuteApp initialization
BOOL CTestShellExecuteApp::InitInstance()
{
CWinApp::InitInstance();
INT_PTR nResponse;
if (PathFileExists(TEXT("Config.ini")))
nResponse = IDOK;
else
{
CTestShellExecuteDlg dlg;
m_pMainWnd = &dlg;
nResponse = dlg.DoModal();
}
if (nResponse == IDOK)
ExecuteApp();
return FALSE;
}
void CTestShellExecuteApp::ExecuteApp(void)
{
ShellExecute(NULL, TEXT("open"), TEXT("notepad"),
TEXT("test.txt"), NULL, SW_SHOWNORMAL);
return;
}
Si le fichier "config.ini" existe, le code passe directement à ShellExecute() et Bloc-notes démarre bien.
Lorsque le fichier "Config.ini" n'existe pas, le code ouvre une boîte de dialogue avec uniquement OK et Annuler.
Après avoir appuyé sur OK, la boîte de dialogue renvoie et exécute ShellExecute(). Le bloc-notes n'a pas démarré. Si je commente la ligne m_pMainWnd = &dlg;
, puis après le retour de la boîte de dialogue avec IDOK, le Bloc-notes démarre.
Quelqu'un peut-il expliquer ce comportement?
Qu'est-ce que m_pMainWnd? –
m_pMainWnd est la fenêtre principale. Comme il s'agit d'une application de boîte de dialogue, la boîte de dialogue est la fenêtre principale. Cette ligne est générée par l'assistant MFC. –