//------------------------------------------------------------------------
//
//  File:      shell\themes\test\ctlperf\CtlPerf.cpp
//
//  Contents:  Main source file for CtlPerf.exe
//             This file was generated by the WTL app wizard.
//
//  Classes:   None
//
//------------------------------------------------------------------------
#include "stdafx.h"

#include <atlframe.h>

#include "resource.h"

#include "CtlPerfView.h"
#include "aboutdlg.h"
#include "MainFrm.h"

CAppModule _Module;

//------------------------------------------------------------------------
//
//  Function:  Run
//
//  Synopsis:  Create main window and start message loop
//
//------------------------------------------------------------------------
int Run(LPTSTR lpstrCmdLine = NULL, int /*nCmdShow*/ = SW_SHOWDEFAULT)
{
    CMessageLoop theLoop;
    _Module.AddMessageLoop(&theLoop);

    CMainFrame wndMain;

    if(wndMain.CreateEx() == NULL)
    {
        ATLTRACE(_T("Main window creation failed!\n"));
        return 0;
    }

    wndMain.ShowWindow(SW_MAXIMIZE);

    //** Parse command line
    if (lpstrCmdLine)
    {
        ::CharLower(lpstrCmdLine);

        LPTSTR p = _tcsstr(lpstrCmdLine, _T("/l"));
        TCHAR pszLogFileName[_MAX_PATH + 1];

        if(p)   // Copy the log file name
        {
            _tcscpy(pszLogFileName, p + 2);
            p  = pszLogFileName;
            while (*p && *p != _T(' '))
            {
                p++;
            }
            if (*p)
            {
                *p = _T('\0');
            }
        }

        // We communicate by messages with the main frame (the only thing we know from here)
        //   that will forward to the view
        if (_tcsstr(lpstrCmdLine, _T("1pass")))
        {
            wndMain.PostMessage(WM_COMMAND, IDM_BATCH1, p ? (LPARAM) pszLogFileName : 0);
        }
        else if (_tcsstr(lpstrCmdLine, _T("2pass")))
        {
            if(_tcsstr(lpstrCmdLine, _T("/s")))
            {
                wndMain.PostMessage(WM_COMMAND, IDM_BATCH3, p ? (LPARAM) pszLogFileName : 0);
            }
            else
            {
                wndMain.PostMessage(WM_COMMAND, IDM_BATCH2, p ? (LPARAM) pszLogFileName : 0);
            }
        }
    }

    int nRet = theLoop.Run();

    _Module.RemoveMessageLoop();
    return nRet;
}

//------------------------------------------------------------------------
//
//  Function:  _tWinMain
//
//  Synopsis:  Main entry point
//
//------------------------------------------------------------------------
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR lpstrCmdLine, int nCmdShow)
{
    HRESULT hRes = ::CoInitialize(NULL);
// If you are running on NT 4.0 or higher you can use the following call instead to 
// make the EXE free threaded. This means that calls come in on a random RPC thread.
//    HRESULT hRes = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);
    ATLASSERT(SUCCEEDED(hRes));

#if (_WIN32_IE >= 0x0300)
    INITCOMMONCONTROLSEX iccx;
    iccx.dwSize = sizeof(iccx);
    //iccx.dwICC = ICC_COOL_CLASSES | ICC_BAR_CLASSES;
    iccx.dwICC = 0x3FFF;
    BOOL bRet = ::InitCommonControlsEx(&iccx);
    bRet;
    ATLASSERT(bRet);
#else
    ::InitCommonControls();
#endif

    hRes = _Module.Init(NULL, hInstance);
    ATLASSERT(SUCCEEDED(hRes));

    int nRet = Run(lpstrCmdLine, nCmdShow);

    _Module.Term();
    ::CoUninitialize();

    return nRet;
}
