MFC窗口程序基础

创建一个MFC程序

新建->项目->创建MFC应用程序在这里插入图片描述
如图->对话框->点击

在这里插入图片描述
在这里插入图片描述

资源管理器中可看到项目中的文件

在这里插入图片描述

运行

在这里插入图片描述

MFC中类的关系

打开ReadMe.txt

在这里插入图片描述

MFC执行流程如下

1.创建一个MFC工程,然后在源文件目录会产生一个test.cpp文件。在test.cpp中CtestApp类会产生一个theApp的全局对象
2.在WinMain调用函数AfxWinMain
3.MFC把将WinMain函数的转移交给了MFC程序的入口点函数—AfxWinMain
4. 初始化运行test.cpp中的InitInstance()函数BOOL CtestApp::InitInstance()
INITCOMMONCONTROLSEX InitCtrls; 	InitCtrls.dwSize =sizeof(InitCtrls); 	// 将它设置为包括所有要在应用程序中使用的 	// 公共控件类。 	InitCtrls.dwICC
= ICC_WIN95_CLASSES; 	InitCommonControlsEx(&InitCtrls);

	CWinApp::InitInstance();


	AfxEnableControlContainer();

	// 创建 shell 管理器,以防对话框包含 	// 任何 shell 树视图控件或 shell 列表视图控件。
	CShellManager *pShellManager = new CShellManager;

	// 激活“Windows Native”视觉管理器,以便在 MFC 控件中启用主题
	CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));

	// 标准初始化 	// 如果未使用这些功能并希望减小 	// 最终可执行文件的大小,则应移除下列 	// 不需要的特定初始化例程 	//
更改用于存储设置的注册表项 	// TODO: 应适当修改该字符串, 	// 例如修改为公司或组织名
	SetRegistryKey(_T("应用程序向导生成的本地应用程序"));

	CtestDlg dlg; 	m_pMainWnd = &dlg; 	INT_PTR nResponse = dlg.DoModal();
	if (nResponse == IDOK) 	{ 		// TODO: 在此放置处理何时用 		//  “确定”来关闭对话框的代码 	}
	else if (nResponse == IDCANCEL) 	{ 		// TODO: 在此放置处理何时用 		// 
“取消”来关闭对话框的代码 	} 	else if (nResponse == -1) 	{ 		TRACE(traceAppMsg, 0,
"警告: 对话框创建失败,应用程序将意外终止。\n"); 		TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用
MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n"); 	}

	// 删除上面创建的 shell 管理器。 	if (pShellManager != NULL) 	{ 		delete
pShellManager; 	}

	// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序, 	//  而不是启动应用程序的消息泵。 	return FALSE;
} ```

二、用cl.exe,linker.exe编译链接Windows API程序

1、编译链接Windows API程序
设置环境
在这里插入图片描述
设置INCLUDE环境变量

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\bin\Hostx64\x64
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include
C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\winrt
C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared
C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um
C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt

设置LIB环境变量

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\lib\x64
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\ucrt\x64

用cl编译
在这里插入图片描述
用link链接
在这里插入图片描述

编译链接MFC

代码如下
extern int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,_In_ LPTSTR lpCmdLine, int nCmdShow);
extern "C" int WINAPI
_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
 _In_ LPTSTR lpCmdLine, int nCmdShow)
#pragma warning(suppress: 4985)
{
     // call shared/exported WinMain
     return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
}
int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
 _In_ LPTSTR lpCmdLine, int nCmdShow)
{
     ASSERT(hPrevInstance == NULL);

     int nReturnCode = -1;
     CWinThread* pThread = AfxGetThread();
     CWinApp* pApp = AfxGetApp();

     // AFX internal initialization
     if (!AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nCmdShow))
         goto InitFailure;

     // App global initializations (rare)
     if (pApp != NULL && !pApp->InitApplication())
         goto InitFailure;

     // Perform specific initializations
     if (!pThread->InitInstance())
     {
          if (pThread->m_pMainWnd != NULL)
          {
               TRACE(traceAppMsg, 0, "Warning: Destroying non-NULL m_pMainWnd\n");
               pThread->m_pMainWnd->DestroyWindow();
           }
           nReturnCode = pThread->ExitInstance();
           goto InitFailure;
      }
      nReturnCode = pThread->Run();
InitFailure:
#ifdef _DEBUG
    // Check for missing AfxLockTempMap calls
    if (AfxGetModuleThreadState()->m_nTempMapLock != 0)
    {
        TRACE(traceAppMsg, 0, "Warning: Temp map lock count non-zero (%ld).\n",
            AfxGetModuleThreadState()->m_nTempMapLock);
    }
    AfxLockTempMaps();
    AfxUnlockTempMaps(-1);
#endif

    AfxWinTerm();
    return nReturnCode;
}

连接成功
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值