VS2010应用程序工程总文件的组成

应用程序头文件和源文件

应用程序向导会根据应用程序的类型(单文档、多文档或基于对话框的程序)自动生成一些头文件和源文件,这些文件是工程的主体部分,用于实现主框架、文档、视图等。

下面分别简单介绍下各个文件:

       HelloWorld.h:

                             应用程序的主头文件。主要包含由CWinAppEx类派生的CHelloWorldApp类的声明,以及CHelloWorldApp类的全局对象theApp的声明。

       HelloWorld.cpp:

                             应用程序的主源文件。主要包含CHelloWorldApp类的实现,CHelloWorldApp类的全局对象theApp的定义等。

       MainFrm.h和MainFrm.cpp:

                             通过这两个文件从CFrameWndEx类派生出CMainFrame类,用于创建主框架、菜单栏、工具栏和状态栏等。

       HelloWorldDoc.h和HelloWorldDoc.cpp:

                             这两个文件从CDocument类派生出文档类CHelloWorldDoc,包含一些用来初始化文档、串行化(保存和装入)文档和调试的成员函数。

       HelloWorldView.h和HelloWorldView.cpp:

                             它们从CView类派生出名为CHelloWorldView的视图类,用来显示和打印文档数据,包含了一些绘图和用于调试的成员函数。

       ClassView.h和ClassView.cpp

                             由CDockablePane类派生出CClassView类,用于实现应用程序界面左侧面板上的Class View。

       FileView.h和FileView.cpp:

                             由CDockablePane类派生出CFileView类,用于实现应用程序界面左侧面板上的File View。

       OutputWnd.h和OutputWnd.cpp:

                             由CDockablePane类派生出COutputWnd类,用于实现应用程序界面下侧面板Output。

       PropertiesWnd.h和PropertiesWnd.cpp:

                             由CDockablePane类派生出CPropertiesWnd类,用于实现应用程序界面右侧面板Properties。

       ViewTree.h和ViewTree.cpp:

                            由CTreeCtrl类派生出CViewTree类,用于实现出现在ClassView和FileView等中的树视图。

资源文件

       一般我们使用MFC生成窗口程序都会有对话框、图标、菜单等资源,应用程序向导会生成资源相关文件:res目录、HelloWorld.rc文件和Resource.h文件。

       res目录:工程文件夹下的res目录中含有应用程序默认图标、工具栏使用图标等图标文件。

       HelloWorld.rc:包含默认菜单定义、字符串表和加速键表,指定了默认的About对话框和应用程序默认图标文件等。

       Resource.h:含有各种资源的ID定义。

预编译头文件

几乎所有的MFC程序的文件都要包含afxwin.h等文件,如果每次都编译一次则会大大减慢编译速度。所以把常用的MFC头文件都放到了stdafx.h文件中,然后由stdafx.cpp包含stdafx.h文件,编译器对stdafx.cpp只编译一次,并生成编译之后的预编译头HelloWorld.pch,大大提高了编译效率。

 

编译链接生成文件

       如果是Debug方式编译,则会在解决方案文件夹和工程文件夹下都生成Debug子文件夹,而如果是Release方式编译则生成Release子文件夹。

       工程文件夹下的Debug或Release子文件夹中包含了编译链接时产生的中间文件,解决方案文件夹下的Debug或Release子文件夹中主要包含有应用程序的可执行文件。

实际上在前面自动生成的框架中比较重要的类包括以下几个:CHelloWorldApp、CMainFrame、CHelloWorldDoc和CHelloWorldView

四个主要类的关系简单讲下:

CHelloWorldApp类处理消息,将收到的消息分发给相应的对象。

CMainFrame是视图CHelloWorldView的父窗口,视图CHelloWorldView就显示在CMainFrame的客户区中。

视图类CHelloWorldView用来显示文档类CHelloWorldDoc中的数据,并根据对视图类的操作修改文档类的数据。一个视图类只能跟一个文档类相联系,而一个文档类可以跟多个视图类相联系。

 

程序运行都要有入口函数,在之前的C++教程中都是main函数,而Windows应用程序的入口函数是WinMain函数,MFC程序也是从WinMain函数开始的

 

MFC消息映射机制概述

添加消息处理函数

右键点击CMainFrame,选择类向导,然后选择消息中的WM_LBUTTONDOWN,添加,然后选择编辑代码

 

 

 

右键点击CDrawView,选择类向导,然后选择消息中的WM_LBUTTONDOWN,添加,然后选择编辑代码

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    MessageBox("view clicked");
    CView::OnLButtonDown(nFlags, point);
}

注意:编译过程中,出现不能将参数 1 从“const char [11]”转换为“LPCWSTR”的编译错误

解决方法:

选中项目,然后点击属性——>配置属性——>常规——>项目默认值——>字符集,选为“使用多字节字符集"

 

结果是框架类编写的程序不出现,View类编写的类,点击出现结果

View类在框架类窗口之上,鼠标移动、点击只能由view类窗口进行捕获

 

Tip:在VS2010环境中,在MFC中删掉一个响应函数

 

posted @ 2019-01-08 16:33  洛水卿卿  阅读(512)  评论(0编辑  收藏  举报