找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2505|回复: 0
打印 上一主题 下一主题
收起左侧

MFC 程序

[复制链接]
跳转到指定楼层
楼主
ID:60266 发表于 2014-8-18 01:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MFC中,各控件的类都是从窗口类CWnd派生出来的,所以控件是一窗口的一种;

[size=133%]Ø什么是对话框?
Ø对话框就是一个Dialog控件,和其他的控件不同的是,Dialog控件有自己的消息循环和Dialog回调处理程序。




Win32的应用程序有一条很明确的主线:  1:进入WinMain函数
  2:设计窗口类、注册窗口类
  3:产生窗口、显示窗口、更新窗口
  4:进入消息循环,将消息路由到窗口过程函数(xxxProc)中去处理;
在消息处理函数中,根据消息的类型与各控件的属性,点缀整个窗口;

在MFC程序设计中,为了设计的方便,在MFC的“底层框架类”中封装了每一个窗口应用程序都需要的各步骤;

窗口的创建: CWnd类的CreateEx函数实现【CFrameWnd类的Create函数 调用 CreateEx函数; CFrameWnd类的LoadFrame函数调用Create函数】,CWnd类派生出CFrameWnd类。

Wnd对象与Windows的窗口不同,但是两者有紧密联系。CWnd对象是由CWnd的构造函数析构函数创建或销毁的。另一方面,Windows的窗口是Windows的一种内部数据结构,它是由CWnd的Create成员函数创建的,而由CWnd的虚拟析构函数销毁。DestroyWindow函数销毁Windows的窗口,但是不销毁对象。


显示窗口与更新窗口:ShowWindow(SW_SHOW);
                UpdateWindow();
    【UpdateWindow 将WM_PAINT消息直接发送给窗口过程处理函数进行处理,对窗口进行刷新;当窗口从无到有、改变尺寸、最小化后再恢复、被其他窗口遮盖后再显示时,窗口的客户区都将变为无效,此时系统会给应用程序发送WM_PAINT消息,我们也可以手动调用UpdateWindow函数(该函数会发送),我们呢也可以调用Invalidate(使整个窗口的客户区或者窗口上的某个控件无效,具体的名字与参数因场合不同 可能有不同)

【CFrameWnd类派生于CWnd类】
【各控件类CEdit、CBotton等都是派生于CWnd,所以控件其实也是窗口,所以他们其实也是通过Create函数创建,创建的过程是类似的】

消息循环:CWinThread类的Run函数就是完成消息循环这一任务;该函数的主要结构是一个for循环,该循环在接收到一个WM_QUIT消息时退出。

窗口过程函数:

CWnd类:CWnd是MFC窗口类的基类,提供了微软基础类库中所有窗口类的基本功能。CWnd对象与Windows的窗口不同,但是两者有紧密联系。CWnd对象是由CWnd的构造函数和析构函数创建或销毁的。另一方面,Windows的窗口是Windows的一种内部数据结构,它是由CWnd的Create成员函数创建的,而由CWnd的虚拟析构函数销毁。DestroyWindow函数销毁Windows的窗口,但是不销毁对象。
CFrameWnd类:CFrameWnd类往往用于创建应用程序的主窗口,因为它能很好地支持系统菜单和控制条(工具条、状态条等),为此定义了大量的成员函数和变量。在编写文档/视图结构的应用程序时,CFrameWnd作为主窗口管理视图和文档对象。视图对象和控制条都成为CFrameWnd的子窗口,它们分享客户区,其位置被CFrameWnd有效地排列。CFrameWnd直接支持单文档界面(SDI),对于多文档界面(MDI),使用其派生类CMDIFrameWnd和CMDIChildWnd。该类定义了两个成员函数用于创建主窗口,即Create()和LoadFrame()。前者主要通过CWnd::CreateEx()创建窗口;而后者首先组织参数,再调用前者。它们的定义如下:


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表