MFC创建选项
复合文档支持的各选项功能如下:
◆ 无复合文档支持:即无OLE(Object Linking and Embedding,对象连接与嵌入)支持。
◆ 容器支持:将对象嵌入或链接至文档,以便用户编辑。
◆ 袖珍服务器:表示应用程序可创建和管理复合文档对象。不能独立运行并且仅支持嵌入项。
◆ 完全服务器:表示应用程序可创建和管理复合文档对象。能够独立运行,并且既支持链接项也支持嵌入项。
◆ 容器/完全服务器:表示应用程序可以既是容器又是服务器。容器是可将嵌入项或者链接项并入自己的文档中的应用程序。服务器是可创建供容器应用程序使用的自动化项的应用程序。 其他支持包括:
◆ 自动化:允许应用程序向脚本工具和其他应用程序公开对象。
◆ ActiveX控件:应用程序能够将ActiveX控件包含在内。
MAPI支持:可以从应用程序直接调用MAPI函数。
MAPI”表示“消息传递应用程序接口”。它是电子邮件等应用程序的消息传递结构和客户接口组件。如果双方应用程序都启用“MAPI”,就可以相互共享邮件信息,为多个应用程序提供一致接口。
◆ Windows套接字:启用适当的头文件、库和MFC Windows Socket规范,使应用程序支持TCP/IP网络协议。
说你对Windows消息机制的理解
Windows系统是一个消息驱动的操作系统。什么是消息呢?下面从不同的几个方面进行讲解:
1)消息的组成:一个消息由一个消息名称(UINT)和两个参数(WPARAM,LPARAM)组成。当用户进行了输入或是窗口的状态发生改变时系统都会发送消息到某一个窗口。例如,当菜单选择之后会有WM_COMMAND消息发送,WPARAM的高字节中(HIWORD(wParam))是命令的ID号,对菜单来讲就是菜单ID。当然,用户也可以定义自己的消息名称,也可以利用自定义消息来发送通知和传送数据。
2)谁将收到消息:一个消息必须有一个窗口接收。在窗口过程(WNDPROC)中可以对消息进行分析,对自己感兴趣的消息进行处理。例如,希望对菜单选择进行处理,那么可以定义对WM_COMMAND进行处理的代码,如果希望在窗口中进行图形输出,则就必须对WM_PAINT进行处理。
3)未处理的消息到哪里去了:Microsoft为窗口编写了默认的窗口过程,这个窗口过程将负责处理那些没有被处理的消息。正因为有了这个默认窗口过程,我们才可以利用Windows的窗口进行开发而不必过多关注窗口各种消息的处理。例如,窗口在被拖动时会有很多消息发送,而我们都可以不予理睬而让系统自己去处理。
4)窗口句柄:说到消息就不能不说窗口句柄,系统通过窗口句柄在整个系统中唯一标识一个窗口,发送一个消息时必须指定一个窗口句柄表明该消息由哪个窗口接收。而每个窗口都会有自己的窗口句柄,所以用户的输入就会被正确地处理。例如,有两个窗口共用一个窗口过程代码,在窗口1上按下鼠标时消息就会通过窗口1的句柄被发送到窗口1而不是窗口2。
系统将会维护一个或多个消息队列,所有产生的消息都会被放入或插入队列中。系统会在队列中取出每一条消息,根据消息的接收句柄而将该消息发送给拥有该窗口程序的消息循环。每一个运行的程序都有自己的消息循环,在循环中得到属于自己的消息并根据接收窗口的句柄调用相应的窗口过程。而在没有消息时消息循环就将控制权交给系统,所以Windows可以同时进行多个任务。
数据库编程基础
- ODBC数据库链接:可以学到在VC 6.0中使用ODBC进行数据库链接。
- ADO数据库链接:可以学到在VC 6.0中使用ADO进行数据库链接。
OLE DB
OLE DB模板是活动模板库(ATL)的一部分,它们通过提供实现许多常用OLE DB接口的类来使得高性能OLE DB数据库技术使用起来很简单。模板库中附带有创建OLE DB起始应用程序的向导支持。 模板库包含两部分:
- OLE DB使用者模板:用于实现OLE DB客户(使用者)应用程序。
OLE DB提供程序模板:用于实现OLE DB服务器(提供程序)应用程序。
OLE DB数据使用者模板是由一些模板组成的。下面对一些常用类做一些介绍。
(1)CDataSource类 CDataSource类与OLE DB的数据源对象相对应。这个类代表了OLE DB数据提供程序和数据源之间的连接,即主要负责数据源对象。只有当数据源的连接被建立之后,才能产生会话对象,可以调用Open()函数来打开数据源的连接。
- (2)CSession类 CSession所创建的对象代表了一个单独的数据库访问的会话,该类负责管理数据源和应用程序进程的会话。一个用CDataSource类产生的数据源对象可以创建一个或者多个会话,要在数据源对象上产生一个会话对象,需要调用Open()函数来打开。同时,会话对象还可用于创建事务的操作。
- (3)CEnumeratorAccessor类CEnumeratorAccessor类是用来访问枚举器查询后所产生的行集中可用数据提供程序的信息的访问器,可提供当前可用的数据提供程序和可见的访问器。
访问器类用于管理与访问相关的操作。常用的访问器类如下。
- (1)CAcessor类 CAccessor类代表与访问器的类型。当用户知道数据库的类型和结构时,可以使用此类。它支持对一个行集采用多个访问器,并且存放数据的缓冲区是由用户分配的。
- (2)CDynamicAccessor类 CDynamicAccessor类用来在程序运行时动态地创建访问器。当系统运行时,可以动态地从行集中获得列的信息,可根据此信息动态地创建访问器。
- (3)CManualAccessor类 CManualAccessor类用来在程序运行时将列与变量绑定或者将参数与变量绑定。
行集类用于管理以行为单位的数据集。常用的行集类如下。
- (1)CRowSet类 CRowSet类封装了行集对象和相应的接口,并且提供了一些方法用于查询、设置数据等。可以用Move()等函数进行记录移动,用GetData()函数读取数据,用Insert()、Delete()、SetData()来更新数据。
- (2)CBulkRowset类 CBulkRowset类用于在一次调用中取回多个行句柄或者对多个行进行操作。
- (3)CArrayRowset类 CArrayRowset类提供用数组下标进行数据访问。
命令类包括以下两类。
- (1)CTable类 CTable类用于对数据库的简单访问,用数据源的名称得到行集,从而得到数据。
- (2)CCommand类 CCommand类用于支持命令的数据源。
可以用Open()函数来执行SQL命令,也可以用Prepare()函数先对命令进行准备,对于支持命令的数据源,可以提高程序的灵活性和健壮性。 注意 如果使用OLE DB进行数据库程序设计,则应该使用OLE DB类,在使用OLE DB类的过程中,也可以和其他数据库连接方式的类兼容。