Lesson 1 详解Win32
详细的讲解了Win32的编程原理和Windows编程中的消息机制。
Lesson 2 C++概要
大致的描述了一下C++面向对象编程的特性,主要阐述了封装,继承和多态性的概念。当然,这样远远不能将C++的其它特性描述清楚。必须参看其它书籍,才能彻底的描述清楚C++。
Lesson 3 MFC机制剖析
讲解了MFC是如何封装Win32的各个要素,通过剖析MFC的源代码,将MFC运行的机制彻彻底底的说明了。因为C++面向对象的封装性,所以不能轻易的看清楚里面到底是如何运行的,这一章就清楚的说明了这一点。
Lesson 4 MFC消息机制
消息映射的机制
MFC封装的CDC的用法,有CPEn,CBrush等。
使用一个画图Demo,讲了消息的例子
Lesson 5 字体操作
字的操作
CString 相当于STL中的string
如果各个时间之间需要通信,定义私有变量。
Timer定时后,而一段时间发送Timer消息。可以实现文本的移动。
孙鑫Lesson 6 菜单应用
消息分三类
1)标准消息:除WM_COMMAND以外的所有以WM_开头的消息。从CWnd派生的类都可以接受。
2)命令消息:WM_COMMAND消息,CCmdTarget派生类都给可以接受
3)通告消息:控件产生的消息。CCmdTarget派生类都可以接受。
菜单项的命令更新:
CN_UPDATE_COMMAND_UI消息,更新对象。
轮询所有的菜单项,通过CCmdUI对象,跟新对应的菜单项。
次机制,可以方便的控制菜单项的更新。仅应用与弹出式菜单。
弹出式菜单
加入控件,就好像VS 2005一样方便。
1:43
手动加菜单,必须原先设计好菜单的ID,菜单项的处理函数和消息映射,否者加上的菜单无法做任何事情,记住,需要Detach来使Windows对象与窗口资源断绝关系。动态加载的好处,使可以在某些界面使用一部分菜单,而在另一些界面使用另一部分菜单,但是只有需要一个主菜单,这样就可以带到重用。
****动态添加任意多的菜单项,并将响应其消息。
菜单消息的路由
Lesson 7 对话框1
静态文本框响应事件,需要修改ID,同时将Style中的Notify复选框勾上。
CWnd::UpdateData (TRUE),从相关的地方取值,在最前面调用。
CWnd::UpdateData (FALSE),将值写入相关的地方,在最后调用。
资源与控件关联
介绍了7中控件访问的方式
1.GetDlgItem()->Get(Set)WindowText() **十分重要
2.GetDlgItemText()/SetDlgItemText()
3.GetDlgItemInt()/SetDlgItemInt()
4.将控件和整型变量相关联 **
5.将控件和控件变量相关联 **
6.SendMessage() MFC用的少
7.SendDlgItemMessage() MFC用的少
设置窗口焦点
对话框扩展和收缩
回车焦点设置,tab序号的设置
void CMyDialog::OnOK()
{
GetNextDlgTabItem(GetFocus())->SetFocus();
}
被设为默认的按钮的函数是事件处理的默认的函数
Lesson 8 对话框2
资源与类关联
向导与属性页的设置
Radio Button的使用,ComboBox,ListBox和CheckBox
CPropertyPage和CPropertySheet的组合使用,剖析了CPropertyPage的几个事件响应如Init,SetActive等等。
MFC的GUI编程,与C#的GUI编程多了一个自己手动将GUI资源与类绑定的步骤。
属性表单与视图类的数据交换,因为属性表单是接受一系列用户的输入,所以接受的数据需要给视图类,一边进行显示。
Lesson 9 窗体外观
此节课的许多要素,可能会用到,但是都不太困难,到时候温习一下就可以了。
应用程序外观的改变,窗口创佳之前修改外观,PreCreateWindow函数修改外观。
窗口创建之前修改:
窗口的图标,贯标和背景修改,也是在PreCreateWindow中修改。
在框架窗口修改图标,而光标和背景在View中修改,因为View会遮挡MainFram。
*简单的修改窗口方法,AfxRegisterWndClass,MSDN有详细描述。
窗口创建之后改变:
SetWindowLong来修改
SetClassLong(this->m_hWnd,GCL_HBRBACKGROUND,(LONG)GetStockObject(BLACK_BRUSH));
工具栏编程:
工具栏将菜单命令,编程按钮的形式,方便使用,所以菜单的相的名称和工具栏相的名称相同,他们是一一对应的关系。
会菜单,就相当于会工具栏。
做出与MFC内置的工具栏一模一样的效果。
状态栏编程:
状态栏的时钟和进度栏的大小,通过Timer来定时的修改其状态。应为状态是一个时间的变量。
将进度栏移动到制定的窗格。
设置启动画面,
Lesson 10 绘图程序1——绘图
绘图程序,透明brush。颜色对话框的使用。字体对话框的使用。
BN_CHANGE消息。
在窗口中,显示位图。(1.创建位图;2.创建兼容DC;3.将位图选入到兼容DC中;4。将兼容DC中的位图贴到当前DC中)主要是为了显示超过256位色的位图。
Lesson 11绘图程序2——保存
图形的保存和重绘
坐标系统:世界坐标系,窗口坐标系,设备坐标系和物理坐标系。
设备的矩形为视口,逻辑的矩形为窗口。通常视口和客户区是相同的。
Lesson 12 MFC的文件操作
讲解了
C的文件操作
C++的文件操作
win32的文件操作
MFC的文件操作
文本->ASCII码:换行(10)-> 回车换行(13-10)
ASCII码->文本:回车换行(13-10) -> 换行(10)
不同文件,都有相应的读取方法,如文本文件和位图文件,13-10在位图文
件中,就不是换行符。但是不同的文件,写入的方式都是相同的。
将整数存储到文件中,又要用记事本打开显示,那么就要将整数以ASCII的
形式存储。
讲了一些关于注册表的操作,如添加,删除,修改和查找。注册表主要用
于应用程序的初始化。
Lesson 13 文档与串行化
将对象存储到持久存储设备,称之为“对象串行化”
CArchive将对象串行化
对于串行化读取时的顺序一定要与写入数据时相同。
IDR_MAINREAM字符串资源中7个字段的意义,主要用于设置文档模板。
讲述了CDoc的特性。
每一个文档产生,会有一个View和Frame对象随之产生,与之对应。
DocumentView架构 重新编写图画程序。
Lesson 14 网络编程
计算机网络,IP,协议和端口号。
ISO/OSI七层通讯。
必须一层一层的提供服务,才能传递。
TCP/IP模型,时上面7层模型的简化。
端口的范围 1024-65535,1024以下的预留给预定义的服务使用。
socket,通信协议的操作系统的调用。
基于TCP的Socket编程
服务器端:
1.创建Socket
2.bind特定的地址与端口
3.listen,准备接受客户请求
4.accept返回一个连接的Socket
5.利用返回的socket,与客户端(send/recv)通信(一次只能与一个客户端通信)
6.返回,等待另一客户的请求
7.关闭套接字
客户端:
1.创建socket
2.connect服务器
3.(send/recv)通信
4.关闭套接字
基于UDP的socket编程
接收端(服务器)
1.创建socket
2.bind到IP和端口
3.等待接受数据(recvFrom)
4.关闭socket
发送者(客户端)
1.创建套接字
2.将请求sentto服务器
3.关闭socket
Win32 socket编程:TCP 和 UDP
基于文字界面的聊天程序,使用UDP协议,因为实时性较高,TCP虽然好,但是效率低。
Lesson 15 多线程与聊天室程序
线程,进程的关系与使用,基于WIn32的。
主线程结束,其子线程都结束。
Win32创建子线程后,需要释放子线程的句柄资源,但是子线程并没有被killed,仍然执行。线程函数执行完,线程结束。
竞争条件,互斥锁。多线程访问统一资源,需要同步线程。
互斥对象的计数器可以累计拥有。
有可能会死锁,不释放互斥锁。
一个应用程序的实例。
Lesson 16 异步Socket和线程同步
事件对象实现线程同步(与互斥对象作用类似)。
自动重置,人工重置。
“当人工重置的事件得到通知时,等待该事件的所有线程均变为可调度线程”(此段话在
11分钟时得到验证)。
自动重置的事件对象,实现线程间的同步。
关键代码段的线程间的同步。
死锁的实现。
三种同步的区别:
1。互斥对象和事件对象属于内核对象,利用内核对象进行线程同步,速度较慢,但利用互
斥对象和事件对象这样的内核对象,可以在多个进程中的各个线程间进行同步。
2.关键代码段是工作在用户方式下,同步速度较快,但在使用关键代码段时,很容易进入
死锁状态,因为在等待进入关键代码段时无法设定超时值。
基于移步的套接字编程:
1.阻塞模式
2.非阻塞模式,提高应用程序性能。
异步,提高性能移步套接字,编写聊天程序。
Lesson 17 进程间的通信
由于此项目不需要多进程的编程,由于时间有限,所以不看,但是项目结束后,一定要看
看,并同时回顾一下operation system中的进程的有关的概念。
Lesson 18 ActiveX 控件
ActiveX控件的应用与工作原理。ActiveX控件的编写,如何为控件安排属性,方法,事件
,属性页,持久性存储,控件如何通知容器自身属性的改变。如何注册控件与取消控件注
册。在VB和VC中访问ActiveX控件。
与本项目的关系不太大,所以暂时不看,项目结束后在看。
Lesson 19 动态链接库
动态链接库通常都不能直接运行,也不能接收消息。它们是一些独立的文件,其中包含能
被可执行程序或其它DLL调用来完成某项工作的函数。只有在其它模块调用动态链接库中的
函数时,它才发挥作用。
静态库lib:函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。在使用静态库的情
况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序
的其它模块组合起来创建最终的可执行文件(.EXE文件)。
动态库dll:往往提供两个文件:一个引入库lib和一个DLL。引入库包含被DLL导出的函数
和变量的符号名,DLL包含实际的函数和数据。在编译链接可执行文件时,只需要链接引入
库,DLL中的函数代码和数据并不复制到可执行文件中,在运行的时候,再去加载DLL,访
问DLL中导出的函数。
动态链接库的优点:
1.可以采用多种编程语言来编写。
2.增强产品的功能。
3.提供二次开发的平台。
4.简化项目管理。
5.可以节省磁盘空间和内存。
6.有助于资源的共享。
7.有助于实现应用程序的本地化
动态链接库的两种加载方式:
隐式链接
显示加载
动态链接库不一定要头文件,但是头文件是为了使用动态链接库的方便。
次视频将动态链接库讲的很透彻,有函数还有类的。
名字改编问题。
Lesson 20 Hook和数据库编程
钩子:屏蔽和捕捉自己感兴趣的消息。
1小时 19分钟开始数据库。
ODBC 与 JDBC类似,需要下载不同数据库的驱动。
1:47 VC ;连接数据库
导入ADO库,一个DLL