• codetemp1:


    #include "stdafx.h"

    #ifdef AFX_INIT_SEG
    #pragma code_seg(AFX_INIT_SEG)
    #endif

    #ifdef _DEBUG
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif

    /////////////////////////////////////////////////////////////////////////////

    BOOL AFXAPI AfxWinInit(HINSTANCE hInstance, HINSTANCE hPrevInstance,
     LPTSTR lpCmdLine, int nCmdShow)
    {
     ASSERT(hPrevInstance == NULL);

     // handle critical errors and avoid Windows message boxes
     SetErrorMode(SetErrorMode(0) |
      SEM_FAILCRITICALERRORS|SEM_NOOPENFILEERRORBOX);

     // set resource handles
     AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
     pModuleState->m_hCurrentInstanceHandle = hInstance;
     pModuleState->m_hCurrentResourceHandle = hInstance;

     // fill in the initial state for the application
     CWinApp* pApp = AfxGetApp();
     if (pApp != NULL)
     {
      // Windows specific initialization (not done if no CWinApp)
      pApp->m_hInstance = hInstance;
      pApp->m_hPrevInstance = hPrevInstance;
      pApp->m_lpCmdLine = lpCmdLine;
      pApp->m_nCmdShow = nCmdShow;
      pApp->SetCurrentHandles();
     }

     // initialize thread specific data (for main thread)
     if (!afxContextIsDLL)                   //判断程序类型是:*.DLL还是*.EXE(是*.DLL类型否?)
      AfxInitThread();                         //在thrdcord.cpp文件中,Global functions for thread initialization and thread cleanup

     return TRUE;
    }

    ///////////////////////////////////////////////////////////////////////////
    // CWinApp Initialization

    void CWinApp::SetCurrentHandles()
    {
     ASSERT(this == afxCurrentWinApp);
     ASSERT(afxCurrentAppName == NULL);

     AFX_MODULE_STATE* pModuleState = _AFX_CMDTARGET_GETSTATE();
     pModuleState->m_hCurrentInstanceHandle = m_hInstance;
     pModuleState->m_hCurrentResourceHandle = m_hInstance;

     // Note: there are a number of _tcsdup (aka strdup) calls that are
     // made here for the exe path, help file path, etc.  In previous
     // versions of MFC, this memory was never freed.  In this and future
     // versions this memory is automatically freed during CWinApp's
     // destructor.  If you are freeing the memory yourself, you should
     // either remove the code or set the pointers to NULL after freeing
     // the memory.

     // get path of executable
     TCHAR szBuff[_MAX_PATH];
     VERIFY(::GetModuleFileName(m_hInstance, szBuff, _MAX_PATH));

     LPTSTR lpszExt = _tcsrchr(szBuff, '.');
     ASSERT(lpszExt != NULL);
     ASSERT(*lpszExt == '.');
     *lpszExt = 0;       // no suffix

     TCHAR szExeName[_MAX_PATH];
     TCHAR szTitle[256];
     // get the exe title from the full path name [no extension]
     VERIFY(AfxGetFileName(szBuff, szExeName, _MAX_PATH) == 0);
     if (m_pszExeName == NULL)
     {
      BOOL bEnable = AfxEnableMemoryTracking(FALSE);
      m_pszExeName = _tcsdup(szExeName); // save non-localized name
      AfxEnableMemoryTracking(bEnable);
     }

     // m_pszAppName is the name used to present to the user
     if (m_pszAppName == NULL)
     {
      BOOL bEnable = AfxEnableMemoryTracking(FALSE);
      if (AfxLoadString(AFX_IDS_APP_TITLE, szTitle) != 0)
       m_pszAppName = _tcsdup(szTitle);    // human readable title
      else
       m_pszAppName = _tcsdup(m_pszExeName);   // same as EXE
      AfxEnableMemoryTracking(bEnable);
     }

     pModuleState->m_lpszCurrentAppName = m_pszAppName;
     ASSERT(afxCurrentAppName != NULL);

     // get path of .HLP file
     if (m_pszHelpFilePath == NULL)
     {
      lstrcpy(lpszExt, _T(".HLP"));
      BOOL bEnable = AfxEnableMemoryTracking(FALSE);
      m_pszHelpFilePath = _tcsdup(szBuff);
      AfxEnableMemoryTracking(bEnable);
      *lpszExt = '\0';       // back to no suffix
     }

     if (m_pszProfileName == NULL)
     {
      lstrcat(szExeName, _T(".INI")); // will be enough room in buffer
      BOOL bEnable = AfxEnableMemoryTracking(FALSE);
      m_pszProfileName = _tcsdup(szExeName);
      AfxEnableMemoryTracking(bEnable);
     }
    }

    /////////////////////////////////////////////////////////////////////////////
    // CFile implementation helpers

    #ifdef AfxGetFileName
    #undef AfxGetFileName
    #endif

    UINT AFXAPI AfxGetFileName(LPCTSTR lpszPathName, LPTSTR lpszTitle, UINT nMax)
    {
     ASSERT(lpszTitle == NULL ||
      AfxIsValidAddress(lpszTitle, _MAX_FNAME));
     ASSERT(AfxIsValidString(lpszPathName));

     // always capture the complete file name including extension (if present)
     LPTSTR lpszTemp = (LPTSTR)lpszPathName;
     for (LPCTSTR lpsz = lpszPathName; *lpsz != '\0'; lpsz = _tcsinc(lpsz))
     {
      // remember last directory/drive separator
      if (*lpsz == '\\' || *lpsz == '/' || *lpsz == ':')
       lpszTemp = (LPTSTR)_tcsinc(lpsz);
     }

     // lpszTitle can be NULL which just returns the number of bytes
     if (lpszTitle == NULL)
      return lstrlen(lpszTemp)+1;

     // otherwise copy it into the buffer provided
     lstrcpyn(lpszTitle, lpszTemp, nMax);
     return 0;
    }

    /////////////////////////////////////////////////////////////////////////////
    ========================================================================
    建立1个CONSOLE应用程序的时候(使用MFC支持):
    CWinApp theApp;

    using namespace std;

    int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])         //(1, 程序路径,环境变量==Document And Setting\All User)
    {
     

    //下面是类的对象的代码,从CObject派生出来类有4种能力
    /*

    • Serialization support

    • Run-time class information

    • Object diagnostic output

    • Compatibility with collection classes

    */

     CMyDeviceObject* myobj = new CMyDeviceObject;

     //向导自动添加部分
     int nRetCode = 0;

     // initialize MFC and print and error on failure
     if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))    //看上面该函数定义
     {/*返回 HMODULE   ::GetModuleHandle(NULL)*/(HMODULE == HINSTANCE)
    /*上面函数的参数[in]为NULL时,函数::GetModuleHandle(NULL)返回HINSTANCE基地址*/
      // TODO: change error code to suit your needs
      cerr << _T("Fatal Error: MFC initialization failed") << endl;
      nRetCode = 1;
     }
     else
     {
      // TODO: code your application's behavior here.
      CString strHello;
      strHello.LoadString(IDS_HELLO);    //加载*.rc文件中定义的字符串
      cout << (LPCTSTR)strHello << endl;
     }

     return nRetCode;
    }

    在*.rc文件中:

    // String Table
    //

    STRINGTABLE DISCARDABLE
    BEGIN
        IDS_HELLO               "Hello from MFC!"
    END

    #endif

  • 相关阅读:
    WEB前端:05_scroll滚动(图片/文字滚动)
    WEB前端:04_slider幻灯片(焦点图轮换)
    WEB前端:03_hover切换(显示/隐藏)
    概率统计
    概率统计
    线性代数
    线性代数
    线性代数
    线性代数
    大数据时代,Java通过JFreeChart分析和可视化数据
  • 原文地址:https://www.cnblogs.com/shanzy/p/297475.html
Copyright © 2020-2023  润新知