MFC程序启动步骤

原创 2013年12月05日 20:49:57

MFC的库函数的源代码存放路径为:(用户安装路径)\Microsoft Visual Studio\VC98\MFC\SRC


以单文档程序为例,建立TEST工程。

各类视图:


其中,

CMainFrame公共继承于 CFrameWnd,而CFrameWnd公共继承于CWnd(CWnd派生出来的类都是窗口类),这个窗口称为框架窗口。

CTESTApp公共继承于CWinApp,CWinApp公共继承于CWinThread,CWinThread公共继承于CCmdTarget,CCmdTarget 公共继承于 CObject。

CTESTDoc公共继承于CDocument,CDocument公共继承于 CCmdTarget  ,用于数据的存储与加载。

CTESTView公共继承于CView,CView公共继承于CWnd,也是窗口类,用于数据的显示。


程序运行步骤如下(可在调试模式下逐步查看):

1、创建全局对象CTESTApp theApp;(全局对象或全局变量是在WinMain函数调用之前就创建的)

2、调用CTESTApp构造函数CTESTApp::CTESTApp(),从而调用CWinApp类的构造函数。

3、运行extern "C" int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPTSTR lpCmdLine, int nCmdShow)函数。即main函数,此函数在。

4、调用AfxWinMain函数【在SRC文件夹的WINMAIN.CPP中】,在函数中,pApp指针调用了三个函数,这三个函数(AfxWinInit()、InitApplication()、InitInstance())就完成了作为一个应用程序所需要的几个步骤:设计窗口类,注册窗口类,创建窗口,显示窗口,更新窗口,消息循环,消息处理函数。

(Afx*前缀代表这是应用程序框架函数,是一些全局函数,应用程序框架是一套辅助生成应用程序的框架模型,把一些类做一些有机的集成,我们可根据这些类函数来设计自己的应用程序)


5、调用pThread->InitInstance()函数,完成初始化的工作。在这里,查看InitInstance()可知,其为虚函数,所以调用的是继承类的CTESTApp::InitInstance()函数。

6、调用AfxEndDeferRegisterClass(LONG fToRegister)【该函数在SRC文件夹中的WINCORE.CPP】。在函数中调用AfxRegisterClass(),从而调用RegisterClass(),从而完成各类的注册。

7、调用CMainFrame::PreCreateWindow(CREATESTRUCT& cs),从而调用CFrameWnd::PreCreateWindow(CREATESTRUCT& cs)【在SRC文件夹中的WINFRM.CPP中】,调用AfxEndDeferRegisterClass(LONG fToRegister)函数,并调用BOOL CWnd::Create(LPCTSTR lpszClassName,LPCTSTR lpszWindowName, DWORD dwStyle,const RECT& rect,CWnd* pParentWnd, UINT nID,CCreateContext* pContext)【在SRC文件夹中的WINCODE.CPP中】,实现窗口预定义。

8、最后在CTESTApp::InitInstance()中调用m_pMainWnd->ShowWindow(SW_SHOW);与m_pMainWnd->UpdateWindow();,实现窗口显示。

9、pThread->Run()完成了消息循环,在CWinThread::Run()函数中循环执行CWinThread::PumpMessage(),进行消息的转换和投递。

版权声明:本文为博主原创文章,未经博主允许不得转载。

MFC应用开启 xp/vista/win7 可视化风格,只需一行代码

MFC应用在多字节字符集下默认是不开启可视化风格的(visual style),只有将字符集编码切换到UNICODE方式才会自动开启。 多字节字符集下 visual style 的开启: stda...
  • sybifei
  • sybifei
  • 2015年07月30日 13:11
  • 261

基于对话框的MFC程序启动时完全隐藏的简单方法

如果想基于对话框的MFC程序在启动时就完全隐藏,只在托盘显示一个图标,有很多方法可实现,但效果都不理想,总是可以看到对话框一闪而过的痕迹。有没有一个方法彻底的将其隐藏呢,答案是肯定的。这儿有一个简单的...
  • wxfy1977
  • wxfy1977
  • 2009年07月04日 16:29
  • 3373

如何让MFC窗口启动时最大化

起初看的是这篇文章,结果发现这个根本不行:http://blog.csdn.net/ziren235/archive/2006/05/19/745651.aspx在程序运行过程中可明显看到窗口时生成后...
  • zanget
  • zanget
  • 2007年11月21日 20:49
  • 2146

MFC win7/xp界面风格

在res中添加一个文件 命名windows.manifest后缀为:.manifest 用记事本打开 添加以下代码 ...
  • czherui
  • czherui
  • 2015年07月09日 20:53
  • 516

MFC程序启动崩溃

修改静态库的字符集为UNICODE,导致MFC程序启动崩溃,出现问题代码如下: int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevI...
  • pofa0505
  • pofa0505
  • 2016年07月13日 17:44
  • 821

创建MFC绘图步骤

微软基类库MFC(microsoft foundation class library,MFC)是以C++形式封装的Windows API(Application Program Interface)...
  • winycg
  • winycg
  • 2017年03月15日 00:01
  • 863

保证mfc应用程序只被打开一次

在xxx.cpp文件中添加: 1、定义全局变量 : #define UNIQUE_APP "{opencamera_fykj} 2、在BOOL CopencameraApp::InitInstance...
  • think_embed
  • think_embed
  • 2013年12月17日 20:14
  • 1586

MFC程序启动时最小化到托盘

BOOL CMyClockDlg::OnInitDialog() { // ...... 省略前面代码 // 启动时最小化到托盘 PostMessage(WM_SYSCOMMAND, SC_M...
  • u_1_n_2_i_3
  • u_1_n_2_i_3
  • 2015年12月27日 22:16
  • 1620

Symbian UI framework 程序启动步骤

1. E32Main()    ->EikStart::RunApplication(NewApplication)2.NewApplication()        ->return new CMy...
  • pursuer_zhao
  • pursuer_zhao
  • 2008年10月15日 11:09
  • 354

VC++ 提高C++程序运行效率10个简单方法(其他语言程序参考)

程序性能的优化也是一门复杂的学问,需要很多的知识,然而并不是每个程序员都具备这样的知识,而且论述如何优化程序提高程序运行效率的书籍也很少。但是这并不等于我们可以忽略程序的运行效率...
  • Antares_SANTALEN
  • Antares_SANTALEN
  • 2016年09月14日 10:23
  • 1295
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC程序启动步骤
举报原因:
原因补充:

(最多只允许输入30个字)