728x90

MFC에서 MDI로 처음 생성하면 CCommandLineInfo  클래스 변수를 ParseCommandLine() 하기 전에 


m_nShellCommand 변수가 FileNew로 초기화 되어 있다.



이것은 CCommandLineInfo 클래스를 보면 왜 그런지 알 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class CCommandLineInfo : public CObject { public: // Sets default values CCommandLineInfo(); // plain char* version on UNICODE for source-code backwards compatibility virtual void ParseParam(const TCHAR* pszParam, BOOL bFlag, BOOL bLast); #ifdef _UNICODE virtual void ParseParam(const char* pszParam, BOOL bFlag, BOOL bLast); #endif BOOL m_bShowSplash; BOOL m_bRunEmbedded; BOOL m_bRunAutomated; BOOL m_bRegisterPerUser; enum { FileNew, FileOpen, FilePrint, FilePrintTo, FileDDE, FileDDENoShow, AppRegister, AppUnregister, RestartByRestartManager, FileNothing = -1 } m_nShellCommand; // not valid for FileNew CString m_strFileName; // valid only for FilePrintTo CString m_strPrinterName; CString m_strDriverName; CString m_strPortName; // valid only for RestartByRestartManager CString m_strRestartIdentifier; ~CCommandLineInfo(); // Implementation protected: void ParseParamFlag(const char* pszParam); void ParseParamNotFlag(const TCHAR* pszParam); #ifdef _UNICODE void ParseParamNotFlag(const char* pszParam); #endif void ParseLast(BOOL bLast); };


위에서 m_nShellCommand의 enum을 보면, m_nShellCommand 변수의 0 값이 FileNew이다.

그 때문에 별도의 값을 처리하지 않으면 FileNew로 기본 초기화 되는 것이다.


때문에 App::InitInstance() 에서 다음과 같이 m_nShellCommand 변수의 값을 FileNotthing;으로 변경해주면 된다.


1
2
3
4
5
6
7
8
9
// 표준 셸 명령, DDE, 파일 열기에 대한 명령줄을 구문 분석합니다.
CCommandLineInfo cmdInfo;

// 프로그램 시작 시 빈창을 띄우지 않는다.
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;


ParseCommandLine(cmdInfo);
 



728x90

+ Recent posts