1。消息映射机制: 在MFC中消息的路由没有采用虚函数表机制(因为类派生的层次很多,空间浪费大),而是采用MFC消息映射机制:在每个能接受消息的类中,定义一个消息和处理消息函数的静态映射表,即消息映射表。在映射表中,消息和对应的消息处理函数是成对出现的,当有消息需要处理时,程序只需要查看消息映射表,如果有此消息,调用相应的处理函数,否则,跳过。 在一个类中添加一个消息响应函数,在其源文件中共修改了三处地方:
1), in the header file
{
AFX_MSG(CDrawView)
afx_msg void OnLButtonDown(UINT nFlags, CPoint point)
}
AFX_MSG DELARE_MESSAGE_MAP()
其中afx_msg限定符 表示是消息出来函数的声明
安装sql server数据库没到 2), in the source file
BEGIN_MESSAGE_MAP(CDrawView) ON_WM_LBUTTONDOWN() ON_COMMAND(ID_FILE_PRINT,CView::OnFilePrint) END_MESSAGE_MAP()
此处代码中,两个宏(BEGIN_MESSAGE_MAP和END_MESSAGE_MAP)之间的为此类消息映射表,ON_WM_LBUTTONDOWN宏的就是把消息(WM_LBUTTONDOWN)和消息的处理函数相互联系起来。
3)第三处为消息的定义。
2。消息的分类:
1)标准消息:除WM_COMMAND之外,所以以WM开头的消息都属于标准消息,从CWnd类派生的类都能相应该消息。
2)命令消息:如菜单、工具、快捷键(右键鼠标出现的)产生的消息为命令消息,这类消息以
WM_COMMAND形式出现,通过ID来区别不同的消息,从CCmdTarget类派生的类都能处理该消息。
3)控件消息: 如点击按钮,选择框等产生的消息,通过是告诉其父类消息,也是以WM_COMMAND形式出现,从CCmdTarget派生的类都能接受到此消息。
(上图中只有一个关闭按钮,这个按钮有一个唯一ID区别于其他控件,在将按钮进行消息绑
定后,当这个关闭按钮被点下去时,会触发程序中事先写好的 CDialog::OnCancel(); 语句 ,将当前这个“你的课表”这个对话框退出,完成整个消息映射机制)
MFC的映射 实际上指的是 当一个事件发生时 调用哪个函数处理。映射表,就是 事件 -- 函数 对应表。
消息映射就是建立一个消息和函数的对应表,当收到消息时查表,如果表中有相应的消息,就将消息交给相应的函数处理。
通俗点讲,消息映射表就是一个记录了消息号和相应处理函数的数组。当然表中还有其他信息。其中消息映射表中的每个元素都是一个结构体变量,他的成员很多,最主要的就是消息号和相对应的消息处理函数。
关于消息映射表的查,是通过虚函数实现的,通过父类的虚函数查父类及其层层子类定义的消息映射表。如果不到,就交给默认的窗口处理函数处理。 如果一个类的消息映射表中定义了一个消息处理,那么就不再继续查子类或者子类的子类,从而实现了覆盖。
***************************************************************************
数据库部分:
⏹
SQL Server 是一个关系数据库管理系统。它最初是由Microsoft Sybase 和Ashton-Tate三家公司共同开发的,于1988 年推出了第一个OS/2 版本。在Windows NT 推出后,Microsoft与Sybase 在SQL Server 的开发上就分道扬镳了,Microsoft 将SQL Server 移植到Windows NT系统上,专注于开发推广SQL Server 的Windows NT 版本。Sybase 则较专注于SQL Server在UNIX 操作系统上的应SQL Server安装界面用。
SQL SERVER2005 数据库与MFC连接步骤:
1. 安装sql server 2005.
2. 新建一个sql native 数据源
3. 打开SQL Server Management Studio,建立一个数据库,并按照事先的分析,在此数据库中创建各种需要的表,并初始必要的数据。
4.在VC 6.0中添加一个基于对话框的工程,到系统的系统的msado15.dll文件并导入。
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
#include <afxdb.h>
5.在try catch模块中按照以下的步骤,可以和数据库取得连接并执行DDL操作。
CDatabase coal_database; //先定义一个数据库变量
CRecordset rs(&coal_database);//定义一个结果集
coal_database.OpenEx("DSN=text;UID=sa;PWD=sasa;CDatabase::noOdbcDiglog");
CString sql ;//定义一个CString型字符串
sql.Format("select * from admin_INFO "); // 要查询的语句
rs.Open(CRecordset::dynaset,sql);
while(!rs.IsEOF())
{
CString fieldvalue;
rs.GetFieldValue(4,fieldvalue);
rs.MoveNext();
rs.MoveNext();
}
其中:text 为创建的数据源,uid为数据库用户,pwd为数据库用户的密码,第四项默认不变
sql.Format("select * from admin_INFO "); // 要查询的语句
rs.Open(CRecordset::dynaset,sql)
(上图是当此对话框初始化事对数据库进行访问,将查询到的数据依次正确的显示在对话框的文本控件中)
⏹
关系数据库介绍
关系数据结构
单一的数据结构----关系现实世界的实体以及实体间的各种联系均用关系来表示数据的逻辑结构----二维表从用户角度,关系模型中数据的逻辑结构是一张二维表。
1)常用的关系操作
◇查询:选择、投影、连接、除、并、交、差
◇数据更新:插入、删除、修改查询的表达能力是其中最主要的部分
2)关系操作的特点集合操作方式,即操作的对象和结果都是集合。
关系完整性约束
1)实体完整性通常由关系系统自动支持
2)参照完整性早期系统不支持,目前大型系统能自动支持
3)用户定义的完整性反映应用领域需要遵循的约束条件,体现了具体领域中的语义约束用户定义后由系统支持
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论