ParseCommandLine


转自:http://hi.baidu.com/keeekee/blog/item/50e7ff26dc0d79138b82a120.html 虾虾学步博客

在我们用向导创建MFC应用程序时,在App::InitInstance()中总会出现下面这样的代码到底是什么意思呢,我查了很多资料终于使其漏出庐山真面目。

CCommandLineInfo cmdInfo;//定义命令行
ParseCommandLine(cmdInfo);//解析命令行

// 调度在命令行中指定的命令。如果
// 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。
if (!ProcessShellCommand(cmdInfo)) //程序启动时创建新文档
   return FALSE;
// 唯一的一个窗口已初始化,因此显示它并对其进行更新
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
这几行代码是程序启动时创建新文档的关键代码 .
1: 我们首先来看看让CCommandLineInfo类是个什么东西:( 部分源代码 )
//in afxwin.h
class CCommandLineInfo : public CObject
{
     public:
     // Sets default values
   CCommandLineInfo();
   BOOL m_bShowSplash;
   BOOL m_bRunEmbedded;
   BOOL m_bRunAutomated;
   enum { FileNew, FileOpen, FilePrint, FilePrintTo, FileDDE, AppRegister,
   AppUnregister, FileNothing = -1 } m_nShellCommand;
// not valid for FileNew
CString m_strFileName;
   . . .
   ~CCommandLineInfo();
   . . .
};
  这里要重点注意enum {FileNew, . . . , FileNothing = -1 }m_nShellCommand;
这里联合类型定义的m_nShellCommand 就是外壳程序执行的命令类型 , 如果m_nShellCommand设置为FileNew ,那么程序就会创建新文档 . 如果想在文档开始时不创建新文档 , 就必须将m_nShellCommand设置为FilleNothing .
下面我们再看看CCommandLineInfo的构造函数 .
//in appcore.cpp
CCommandLineInfo::CCommandLineInfo()
{
         m_bShowSplash   = TRUE;
         m_bRunEmbedded   = FALSE;
         m_bRunAutomated = FALSE;
         m_nShellCommand = FileNew;
}
这里很明白的看出 , 构造函数中 , 缺省将 m_nShellCommand设置为 FileNew .
2:再来看看ParseCommandLine(cmdInfo); 函数 .
void CWinApp::ParseCommandLine(CCommandLineInfo& rCmdInfo)
{
     for (int i = 1; i < __argc; i++)   // extern int __argc;          
     {
         LPCTSTR pszParam = __targv[i];   //extern char ** __argv;      
                                                       extern wchar_t ** __wargv;  
                                                       difine __targv   __wargv
         BOOL bFlag = FALSE;
         BOOL bLast = ((i + 1) == __argc);
         if (pszParam[0] == '-' || pszParam[0] == '/')
         {
          

你可能感兴趣的:(C++)