欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    Visual++MFC.docx

    • 资源ID:25761576       资源大小:37.23KB        全文页数:44页
    • 资源格式: DOCX        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Visual++MFC.docx

    1、Visual+MFCVisual C+ MFC 简明教程原著:Marshall Brain 编译:张圣华Windows词汇在 Windows 用户界面和软件开发中所要用到的词汇都是基本和唯一的。对于新接触该环境的用户,下面复习几个定义以便使我们的讨论更加容易。 Windows应用程序使用几个标准的控制:静态文本标签 按钮 列表框 组合框(一种更高级的列表框) 单选按钮 检查按钮 编辑框(单行和多行) 滚动条/hello.cpp#includeclass CHelloApp : public CWinApppublic: virtual bool InitInstance();/建立应用程序类的

    2、实例CHelloApp HelloApp;/说明主窗口类class CHelloWindow : public CframeWnd CStatic* cs;public: CHelloWindow();/每当应用程序首次执行时都要调用的初始化函数bool CHelloApp:InitInstance() m_pMainWnd=new CHelloWindow(); m_pMainWnd-ShowWindow(m_nCmdShow); m_pMainWnd-UpdateWindow(); return TRUE;/ 窗口类的构造函数CHelloWindow:CHelloWindow() /建立窗

    3、口本身 Create(NULL,hello world, WS_OVERLAPPEDWINDOW,CRect(0,0,200,200); /建立静态标签 cs=new CStatic(); cs-Create(hello world, WS_CHILD|WS_VISIBLE|SS_CENTER,CRect(50,80,150,150), this); -第二部分:一个简单的MFC程序在本将中,我们将一段一段地来研究上一将中提到的 MFC 应用程序,以便能理解它的结构和概念框架。我们将先介绍 MFC,然后在介绍如何用 MFC 来建立应用程序。MFC简介MFC 是一个很大的、扩展了的 C+ 类层次

    4、结构,它能使开发 Windows 应用程序变得更加容易。MFC 是在整个 Windows 家族中都是兼容的,也就是说,无论是 Windows3.x、Windows95 还是 Windows NT,所使用的 MFC 是兼容的。每当新的 Windows 版本出现时,MFC 也会得到修改以便使旧的编译器和代码能在新的系统中工作。MFC 也回得到扩展,添加新的特性、变得更加容易建立应用程序。与传统上使用 C 语言直接访问 Windows API相反,使用 MFC 和 C+ 的优点是 MFC 已经包含和压缩了所有标准的“样板文件”代码,这些代码是所有用 C 编写的 Windows 程序所必需的。因此用

    5、MFC 编写的程序要比用C语言编写的程序小得多。另外,MFC 所编写的程序的性能也毫无损失。必要时,你也可以直接调用标准 C 函数,因为 MFC 不修改也不隐藏 Windows 程序的基本结构。使用 MFC 的最大优点是它为你做了所有最难做的事。MFC 中包含了上成千上万行正确、优化和功能强大的 Windows 代码。你所调用的很多成员函数完成了你自己可能很难完成的工作。从这点上将,MFC 极大地加快了你的程序开发速度。MFC 是很庞大的。例如,版本4.0中包含了大约200个不同的类。万幸的是,你在典型的程序中不需要使用所有的函数。事实上,你可能只需要使用其中的十多个 MFC 中的不同类就可以

    6、建立一个非常漂亮的程序。该层次结构大约可分为几种不同的类型的类:应用程序框架 图形绘制的绘制对象 文件服务 异常处理 结构 - List、Array 和 Map Internet 服务 OLE 2 数据库 通用类 在本教程中,我们将集中讨论可视对象。下面的列表给出了部分类:CObject CCmdTarget CWinThread CWinApp CWnd CFrameWnd CDialog CView CStatic CButton CListBox CComboBox CEdit CscrollBar 在上面的列表中,有几点需要注意。第一,MFC 中的大部分类都是从基类 CObject 中

    7、继承下来的。该类包含有大部分MFC类所通用的数据成员和成员函数。第二,是该列表的简单性。CWinApp 类是在你建立应用程序是要用到的,并且任何程序中都只用一次。CWnd 类汇集了 Windows 中的所有通用特性、对话框和控制。CFrameWnd 类是从 CWnd 继承来的,并实现了标准的框架应用程序。CDialog 可分别处理无模式和有模式两种类型的对话框。CView 是用于让用户通过窗口来访问文档。最后,Windows 支持六种控制类型: 静态文本框、可编辑文本框、按钮、滚动条、列表框和组合框(一种扩展的列表框)。一旦你理解了这些,你也就能更好的理解 MFC 了。MFC 中的其它类实现了

    8、其它特性,如内存管理、文档控制等。为了建立一个MFC应用程序,你既要会直接使用这些类,而通常你需要从这些类中继承新的类。在继承的类中,你可以建立新的成员函数,这能更适用你自己的需要。你在第一讲中的简单例子中已经看到了这种继承过程,下面会详细介绍。CHelloApp 和 CHelloWindow 都是从已有的 MFC 类中继承的。设计一个程序在讨论代码本身之前,我们需要花些工夫来简单介绍以下 MFC 中程序设计的过程。例如,假如你要编一个程序来向用户显示“Hello World”信息。这当然是很简单的,但仍需要一些考虑。“hello world”应用程序首先需要在屏幕上建立一个窗口来显示“hel

    9、lo world”。然后需要实际把“hello world”放到窗口上。我们需要但个对象来完成这项任务:一个应用程序对象,用来初始化应用程序并把它挂到 Windows 上。该应用程序对象处理所有的低级事件。 一个窗口对象来作为主窗口。 一个静态文本对象,用来显示“hello world”。 你用 MFC 所建立的每个程序都会包含头两个对象。第三个对象是针对该应用程序的。每个应用程序都会定义它自己的一组用户界面对象,以显示应用程序的输出和收集应用的输入信息。一旦你完成了界面的设计,并决定实现该界面所需要的控制,你就需要编写代码来在屏幕上建立这些控制。你还会编写代码来处理用户操作这些控制所产生的信

    10、息。在“hello world”应用程序中,只有一个控制。它用来输出“hello world”。复杂的程序可能在其主窗口和对话框中需要上百个控制。应该注意,在应用程序中有两种不同的方法来建立用户控制。这里所介绍的是用 C+ 代码方式来建立控制。但是,在比较大的应用程序中,这种方法是不可行的。因此,在通常情况下要使用资源文件的图形编辑器来建立控制。这种方法要方便得多。理解“hello world”的代码下面列出了你在上一讲中已经输入、编译和运行的“hello world”程序的代码。添加行号是为了讨论方便。我们来一行行地研究它,你会更好的理解 MFC 建立应用程序的方式。如果你还没有编译和运行该

    11、代码,应该按上一讲的方法去做。1 /hello.cpp2 #include 3 / Declare the application class4 class CHelloApp : public CWinApp5 6 public:7 virtual BOOL InitInstance();8 ;9 / Create an instance of the application class10 CHelloApp HelloApp;11 / Declare the main window class12 class CHelloWindow : public CFrameWnd13 14 CS

    12、tatic* cs;15 public:16 CHelloWindow();17 ;18 / The InitInstance function is called each19 / time the application first executes.20 BOOL CHelloApp:InitInstance()21 22 m_pMainWnd = new CHelloWindow();23 m_pMainWnd-ShowWindow(m_nCmdShow);24 m_pMainWnd-UpdateWindow();25 return TRUE;26 27 / The construct

    13、or for the window class28 CHelloWindow:CHelloWindow()29 30 / Create the window itself31 Create(NULL, 32 Hello World!, 33 WS_OVERLAPPEDWINDOW,34 CRect(0,0,200,200); 35 / Create a static label36 cs = new CStatic();37 cs-Create(hello world,38 WS_CHILD|WS_VISIBLE|SS_CENTER,39 CRect(50,80,150,150),40 thi

    14、s);41 你把上面的代码看一遍,以得到一整体印象。该程序由六小部分组成,每一部分都起到很重要的作用。首先,该程序包含了头文件 afxwin.h (第 2 行)。该头文件包含有 MFC 中所使用的所有的类型、类、函数和变量。它也包含了其它头文件,如 Windows API 库等。第 3 至 8 行从 MFC 说明的标准应用程序类 CWinApp 继承出了新的应用程序类 CHelloApp。该新类是为了要重载 CWinApp 中的 InitInstance 成员函数。InitInstance 是一个应用程序开始执行时要调用的可重载函数。在第10行中,说明了应用程序作为全局变量的一个事例。该实例是

    15、很重要的,因为它要影响到程序的执行。当应用程序被装入内存并开始执行时,全局变量的建立会执行 CWinApp 类的缺省构造函数。该构造函数会自动调用在18至26行定义的 InitInstance 函数。在第11至17中,CHelloWindow 类是从 MFC 中的 CFrameWnd 类继承来的。CHelloWindow 是作为应用程序在屏幕上的窗口。建立新的类以便实现构造函数、析构函数和数据成员。第18至26行实现了 InitInstance 函数。该函数产生一个 CHelloWindow 类的事例,因此会执行第27行至41行中类的构造函数。它也会把新窗口放到屏幕上。第27至41实现了窗口的

    16、构造函数。该构造函数实际是建立了窗口,然后在其中建立一个静态文本控制。要注意的是,在该程序中没有 main 或 WinMain 函数,也没有事件循环。然而我们从上一讲在执行中知道它也处理了事件。窗口可以最大或最小化、移动窗口等等。所有这些操作都隐藏在主应用程序类 CWinApp 中,并且我们不必为它的事件处理而操心,它都是自动执行、在 MFC 中不可见的。下一节中,将详细介绍程序的各部分。你可能不能马上全都理解得很好: 但你最好先读完它以获得第一印象。在下一讲中,会介绍一些特殊的例子,并偶把各片段组合在一起,有助于你能更好的理解。程序对象用 MFC 建立的每个应用程序都要包括一个单一从 CWi

    17、nApp 类继承来的应用程序对象。该对象必须被说明成全局的(第10行),并且在你的程序中只能出现一次。从 CWinApp 类继承的对象主要是处理应用程序的初始化,同时也处理应用程序主事件循环。CWinApp 类有几个数据成员和几个成员函数。在上面的程序中,我们只重载了一个 CWinApp 中的虚拟函数 InitInstance。应用程序对象的目的是初始化和控制你的程序。因为 Windows 允许同一个应用程序的多个事例在同时执行,因此 MFC 把初始化过程分成两部分并使用两个函数 InitApplication 和 InitInstance 来处理它。此处,我们只使用了一个 InitInsta

    18、nce 函数,因为我们的程序很简单。当每次调用应用程序时都会调用一个新的事例。第3至8行的代码建立了一个称为 CHelloApp 的类,它是从 CWinApp 继承来的。它包含一个新的 InitInstance 函数,是从 CWinApp 中已存在的函数(不做任何事情)重载来的:3 / Declare the application class4 class CHelloApp : public CWinApp5 6 public:7 virtual BOOL InitInstance();8 ;在重载的 InitInstance 函数内部,第18至26行,程序使用 CHelloApp 的数据

    19、成员 m_pMainWnd 来建立并显示窗口:18 / The InitInstance function is called each19 / time the application first executes.20 BOOL CHelloApp:InitInstance()21 22 m_pMainWnd = new CHelloWindow();23 m_pMainWnd-ShowWindow(m_nCmdShow);24 m_pMainWnd-UpdateWindow();25 return TRUE;26 InitInstance 函数返回 TRUE 表示初始化已成功的完成。如果

    20、返回了FALSE,则表明应用程序会立即终止。在下一节中我们将会看到窗口初始化的详细过程。当应用程序对象在第10行建立时,它的数据成员(从 CWinApp 继承来的) 会自动初始化。例如,m_pszAppName、m_lpCmdLine 和 m_nCmdShow 都包含有适当的初始化值。你可参见 MFC 的帮助文件来获得更详细的信息。我们将使用这些变量中的一个。窗口对象MFC 定义了两个类型的窗口: 1) 框架窗口,它是一个全功能的窗口,可以改变大小、最小化、最大化等等; 2) 对话框窗口,它不能改变大小。框架窗口是典型的主应用程序窗口。 在下面的代码中,从 CFrameWnd 中继承了一个新的

    21、类 CHelloWindow:11 / Declare the main window class12 class CHelloWindow : public CFrameWnd13 14 CStatic* cs;15 public:16 CHelloWindow();17 ;它包括一个新的构造函数,同时还有一个指向程序中所使用的唯一用户界面控制的数据成员。你多建立的每个应用程序在主窗口中都会有唯一的一组控制。因此,继承类将有一个重载的构造函数以用来建立主窗口所需要的所有控制。典型情况下,该类会包含有一个析构函数以便在窗口关闭时来删除他们。我们这里没有使用析构函数。在第四讲中,我们将会看到继承

    22、窗口类也会说明一个消息处理函数来处理这些控制在响应用户事件所产生的消息。典型地,一个应用程序将有一个主应用程序窗口。因此,CHelloApp 应用程序类定义了一个名为 m_pMainWnd 成员变量来指向主窗口。为了建立该程序的主窗口,InitInstance 函数(第18至26行)建立了一个 CHelloWindow 事例,并使用 m_pMainWnd 来指向一个新的窗口。我们的 CHelloWindow 对象是在第22行建立的:18 / The InitInstance function is called each19 / time the application first execu

    23、tes.20 BOOL CHelloApp:InitInstance()21 22 m_pMainWnd = new CHelloWindow();23 m_pMainWnd-ShowWindow(m_nCmdShow);24 m_pMainWnd-UpdateWindow();25 return TRUE;26 只建立一个简单的框架窗口是不够的。还要确保窗口能正确地出现在屏幕上。首先,代码必须要调用窗口的 ShowWindow 函数以使窗口出现在屏幕上(第23行)。其次,程序必须要调用 UpdateWindow 函数来确保窗口中的每个控制和输出能正确地出现在屏幕上(第24行)。你可能奇怪,S

    24、howWindow 和 UpdateWindow 函数是在哪儿定义的。例如,如果你要查看以便了解它们,你可能要查看 MFC 的帮助文件中的 CFrameWnd 定义部分。但是 CFrameWnd 中并不包含有这些成员函数。CFrameWnd 是从 CWnd 类继承来的。你可以查看 MFC 文档中的 CWnd,你会发现它包含有200多个不同的成员函数。显然,你不能在几分钟内掌握这些函数,但是你可以掌握其中的几个,如 ShowWindow 和UpdateWindow。现在让我们花几分钟来看一下 MFC 帮助文件中的 CWnd:ShowWindow 函数。为此,你你可以单击帮助文件中的 Search

    25、 按钮,并输入“ShowWindow”。找到后,你会注意到,ShowWindow 只有一个参数,你可以设置不同的参数值。我们把它设置成我们程序中 CHelloApp 的数据成员变量 m_nCmdShow (第23行)。m_nCmdShow 变量是用来初始化应用程序启动的窗口显示方式的。例如,用户可能在程序管理器中启动应用程序,并可通过应用程序属性对话框来告知程序管理器应用程序在启动时要保持最小化状态。m_nCmdShow 变量将被设置成 SW_SHOWMINIMIZED,并且应用程序会以图标的形式来启动,也就是说,程序启动后,是一个代表该程序的图标。m_nCmdShow 变量是一种外界与应用程

    26、序通讯的方式。如果你愿意,你可以用不同的 m_nCmdShow 值来试验 ShowWindow 的效果。但要重新编译程序才能看到效果。 第22行是初始化窗口。它为调用 new 函数分配内存。在这一点上,程序在执行时会调用CHelloWindow的构造函数。该构造函数在每次带类的事例被分配时都要调用。在窗口构造函数的内部,窗口必须建立它自己。它是通过调用 CFrameWnd 的 Create 成员函数来实现的(第31行):27 / The constructor for the window class28 CHelloWindow:CHelloWindow()29 30 / Create th

    27、e window itself31 Create(NULL, 32 Hello World!, 33 WS_OVERLAPPEDWINDOW,34 CRect(0,0,200,200);建立函数共传递了四个参数。通过查看 MFC 文档,你可以了解不同类型。NULL 参数表示使用缺省的类名。第二个参数为出现在窗口标题栏上的标题。第三个参数为窗口的类型属性。该程序使用了正常的、可覆盖类型的窗口。在下一讲中将详细介绍类型属性。第四个参数指出窗口应该放在屏幕上的位置和大小,左上角为(0,0), 初始化大小为 200200个象素。如果使用了 rectDefault,则 Windows 会为你自动放置窗口

    28、及大小。因为我们的程序太简单了,所以它只在窗口中建立了一个静态文本控制。见第35至40行。下面将详细介绍。静态文本控制程序在从 CFrameWnd 类中继承 CHelloWindow 类时(第11至17行)时,说明了一个成员类型 CStatic及其构造函数。正如在前面所见到的,CHelloWindow 构造函数主要做两件事情。第一是通过调用Create函数(第31行)来建立应用程序的窗口。然后分配和建立属于窗口的控制。在我们的程序中,只使用了一个控制。在 MFC 中建一个对象总要经过两步。第一是为类的事例分配内存,然后是调用构造函数来初始化变量。下一步,调用 Create 函数来实际建立屏幕上

    29、的对象。代码使用这两步分配、构造和建立了一个静态文本对象(第36至40行):27 / The constructor for the window class28 CHelloWindow:CHelloWindow()29 30 / Create the window itself31 Create(NULL, 32 Hello World!, 33 WS_OVERLAPPEDWINDOW,34 CRect(0,0,200,200); 35 / Create a static label36 cs = new CStatic();37 cs-Create(hello world,38 WS_C

    30、HILD|WS_VISIBLE|SS_CENTER,39 CRect(50,80,150,150),40 this);41 CStatic 构造函数是在为其分配内存时调用的,然后就调用了 Create 函数来建立 CStatic 控制的窗口。Create 函数所使用的参数与窗口建立函数所使用的参数是类似的(第31行)。第一个参数指定了控制中所要显示的文本内容。第二个参数指定了类型属性。类型属性在下一讲中将详细介绍。在次我们使用的是子窗口类型(既在别的窗口中显示的窗口),还有它是可见的,还有文本的显示位置是居中的。第三个参数决定了控制的大小和位置。第四参数表示该子窗口的父窗口。已经建立了一个静态控制,


    注意事项

    本文(Visual++MFC.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开