Lesson 1 详解Win32

       详细的讲解了Win32的编程原理和Windows编程中的消息机制。

Lesson 2 C++概要

       大致的描述了一下C++面向对象编程的特性,主要阐述了封装,继承和多态性的概念。当然,这样远远不能将C++的其它特性描述清楚。必须参看其它书籍,才能彻底的描述清楚C++

Lesson 3 MFC机制剖析

    讲解了MFC是如何封装Win32的各个要素,通过剖析MFC的源代码,将MFC运行的机制彻彻底底的说明了。因为C++面向对象的封装性,所以不能轻易的看清楚里面到底是如何运行的,这一章就清楚的说明了这一点。

Lesson 4 MFC消息机制

消息映射的机制

MFC封装的CDC的用法,有CPEnCBrush等。

使用一个画图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一样方便。

143

手动加菜单,必须原先设计好菜单的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的使用,ComboBoxListBoxCheckBox

CPropertyPageCPropertySheet的组合使用,剖析了CPropertyPage的几个事件响应如InitSetActive等等。

MFCGUI编程,与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.创建兼容DC3.将位图选入到兼容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的特性。

每一个文档产生,会有一个ViewFrame对象随之产生,与之对应。

DocumentView架构 重新编写图画程序。

 

Lesson 14 网络编程

计算机网络,IP,协议和端口号。

ISO/OSI七层通讯。

必须一层一层的提供服务,才能传递。

 

TCP/IP模型,时上面7层模型的简化。

 

端口的范围 1024-655351024以下的预留给预定义的服务使用。

socket,通信协议的操作系统的调用。

 

基于TCPSocket编程

服务器端:

1.创建Socket

2.bind特定的地址与端口

3.listen,准备接受客户请求

4.accept返回一个连接的Socket

5.利用返回的socket,与客户端(send/recv)通信(一次只能与一个客户端通信)

6.返回,等待另一客户的请求

7.关闭套接字

客户端:

1.创建socket

2.connect服务器

3.send/recv)通信

4.关闭套接字

 

基于UDPsocket编程

接收端(服务器)

1.创建socket

2.bindIP和端口

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控件的编写,如何为控件安排属性,方法,事件

,属性页,持久性存储,控件如何通知容器自身属性的改变。如何注册控件与取消控件注

册。在VBVC中访问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类似,需要下载不同数据库的驱动。

 

147 VC ;连接数据库

导入ADO库,一个DLL

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐