짧은 Visual Studio C++ MFC 대화 상자 기반 응용 프로그램을 작성하고 ShellExecute()
을 사용하여 이상한 동작이 발생했습니다.Visual C++ ShellExecute() 함수의 이상한 동작
#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;
}
"Config.ini"파일이 있으면 코드가 직접 ShellExecute()로 이동하고 Notepad가 정상적으로 시작됩니다.
"Config.ini"파일이 없으면 코드가 확인 및 취소 만있는 대화 상자를 엽니 다.
확인을 누르면 대화 상자에서 ShellExecute()가 반환되고 실행됩니다. 메모장이 시작되지 않았습니다. 줄 m_pMainWnd = &dlg;
을 주석으로 처리하면 대화 상자가 IDOK와 함께 반환 된 후 메모장이 시작됩니다.
누군가가이 동작을 설명 할 수 있습니까?
m_pMainWnd 란 무엇입니까? –
m_pMainWnd는 기본 창입니다. 이것은 대화 상자 응용 프로그램이므로 대화 상자가 기본 창입니다. 이 줄은 MFC 마법사에 의해 생성됩니다. –