MFC General: How to process command line arguments in a MFC application?

Q: How to process command line arguments in a MFC application?

A:

  • Derive a class from CCommandLineInfo, say 'CCustomCommandLineInfo'
    class CCustomCommandLineInfo : public CCommandLineInfo
  • Add virtual method 'ParseParam()'
    {
    virtual void ParseParam(const char* pszParam, BOOL bFlag, BOOL bLast);
    }
  • In 'ParseParam()', check the 'pszParam' passed. Note, that 'ParseParam()' will be called as many times as the tokens being used while launching the command line. So, if you call 'Yourapp.exe /e /o /whatever', you will see 3 calls to 'ParseParam()' each with "/e", "/o", "/whatever".
    class CCustomCommandLineInfo : public CCommandLineInfo
    {
    CCustomCommandLineInfo()
    {
    m_bExport
    = m_bOpen = m_bWhatever = FALSE;
    }

    //for convenience maintain 3 variables to indicate the param passed.
    BOOL m_bExport; //for /e
    BOOL m_bOpen; //for /o
    BOOL m_bWhatever; //for /whatever

    //public methods for checking these.
    public:
    BOOL IsExport() {
    return m_bExport; };
    BOOL IsOpen() { return m_bOpen; };
    BOOL IsWhatever() { return m_bWhatever; };

    virtual void
    ParseParam(const char* pszParam, BOOL bFlag, BOOL bLast)
    {
    if(0 == strcmp(pszParam, "/o"))
    {
    m_bOpen
    = TRUE;
    }
    else if(0 == strcmp(pszParam, "/e"))
    {
    m_bExport
    = TRUE;
    }
    else if(0 == strcmp(pszParam, "/whatever"))
    {
    m_bWhatever
    = TRUE;
    }
    }
    }
    ;
  • Instantiate an object of this class in 'InitInstance()' and parse it like below.
    BOOL CYourApp::InitInstance()
    {
    // Do all the stuff you want to do, like registering document tempates etc.

    CCustomCommandLineInfo oInfo;
    ParseCommandLine(&oInfo);
    // ....
    }

Note: Most of the material in this article is taken from codeguru.com


Recommended Reading :





Credit Counseling - Cheap Gas - Loan - Loans