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来实现。
这里主要注意使用锁保护资源。