博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于mfc的复习
阅读量:4320 次
发布时间:2019-06-06

本文共 1546 字,大约阅读时间需要 5 分钟。

mfc干什么的?      

     要说mfc,先说winows程序,winows程序设计是事件驱动,即做了什么事,发送一个消息出去,对应的:接收到一个消息,得做什么事。通过Windows应用程序和操作系统的交互,以及操作系统和设备交互完成我们所需要的功能。mfc封装了大量Windows API,方便我们开发。

通常来说,我们开发的是窗口应用程序,窗口应用程序怎么诞生的?

这里我们采用跟踪方法发现,主要分为下面几步:

设计一个窗口:就是我们想要什么样的窗口,比如光标什么样,就是通过这个阶段来确定。

注册窗口:注册窗口类以后同一类窗口都用一套WindowProc,有统一的行为。在我们构造一个窗口类结构后,我们需要将这个类结构指针加入到system atom table 即SAT中,这样系统就可以通过查找这张表来找到用户自定义的窗口类。注册好窗口类之后就可以用FindWindow函数来找到这个窗口类并获得其句柄,然后即可以向该窗口发送消息。

创建一个窗口,显示窗口,更新窗口,消息循环

这里说下句柄,这个词汇比较难以理解,我们可以理解为编码或者设备上下文。

mfc封装了上述步骤,由定义全局变量theApp开始初始化,这里值得一提的是单文档的注册窗口类较早,在子类的->initInstance后就开始。正常是在PreCreateWindow中调用。另外单文档程序之所以有DOC类和View类是实现数据和显示分离。

下面是菜单编程:

mfc菜单消息传递顺序:View类--Doc类--CMainFrame类--App类。每个类接收消息后会吞掉消息。

消息的分类:标准消息,命令消息,通告消息。

标准消息:除WM_COMMAND之外,所有以WM_开头的消息。

命令消息:来自菜单、加速键或工具栏按钮的消息。这类消息都以WM_COMMAND呈现。

在MFC中,通过菜单项的标识(ID)来区分不同的命令消息。

通告消息:由控件产生的消息,例如,按钮的单击,列表框的选择等均产生此类消息,为的是向其父窗口(通常是对话框)通知事件的发生。这类消息也是以WM_COMMAND形式呈现。

说明:

1)从CWnd派生的类,都可以接收到[标准消息]。

2)从CCmdTarget派生的类,都可以接收到[命令消息]和[通告消息]。

下面是对话框编程:

对话框的基类为CDialog 类,对话框分为模态对话框与非模态对话框,模态对话框在应用程序能进行其它操作之前必须关闭,非模态的对话框允许不关闭对话框而进行应用程序操作。

创建非模式对话框时要注意:父类onok并不销毁窗口,而是隐藏。

对话框控件的七种访问方式:

1.   GetDlgItem()->Get(Set)WindowText()

2.   GetDlgItemText()/SetDlgItemText()
3.   GetDlgItemInt()/SetDlgItemInt()
4.   将控件和整型变量相关联
5.    将控件和控件变量相关联
6.    SendMessage()
7.   SendDlgItemMessage()

这里要说下Windows网络编程:

这里用套接字实现,套接字在计算机网络中了解过,这里和当初的区别是使用WSAStartup加载对应的库,而以前上实验课是采用包含头文件方式。具体流程引用一个图:

 

多线程编程:

对于单核cpu的电脑来说,线程都在自己的时间片中运行,单位时间内,系统只能运行一个线程,交替运行;对于多核cpu或多cpu的电脑来说,才是真正意义上的单位时间内运行多个线程。我们可以使用sleep来实现。

这里主要注意使用锁保护资源。

 

转载于:https://www.cnblogs.com/dinglan/p/6582571.html

你可能感兴趣的文章
牛客网暑期ACM多校训练营(第一场) - J Different Integers(线段数组or莫队)
查看>>
(转)AS3 面相对象 高级话题
查看>>
Missile
查看>>
关于kindedit和 Uedit后者兼容前者
查看>>
微软BI 之SSIS 系列 - 利用 SSIS 模板快速开发 SSIS Package
查看>>
eclipse中使用git上传到githup,报401 Authorization Required
查看>>
基于Golang打造一款开源的WAF网关
查看>>
POJ 2955 Brackets
查看>>
Python: execute an external program (zz)
查看>>
在T-SQL语句中访问远程数据库(openrowset/opendatasource/openquery)
查看>>
闭包2
查看>>
轮播图组件及vue-awesome-swiper的引入
查看>>
Java 笔记07
查看>>
POJ 3041 Asteroids (二分匹配)
查看>>
响应式布局
查看>>
缺陷跟踪系统Mantis之安装篇(转载)
查看>>
UI1_UITableViewHomeWork
查看>>
简单解析依赖注入(控制反转)在Spring中的应用
查看>>
NoSQL 简介及什么是AICD
查看>>
hibernate+mysql的连接池配置
查看>>