- UID
- 314097
- 积分
- 55
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2005-8-27
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
今天学习的是事件驱动编程.包含内容:
1,状态机概念
2,事件驱动编程
3, 通过异步函数修改MS的缺省行为
最后,当然是练习了.
一,状态机概念
说起状态机,肯定就是MS事件状态改变的机制了.想起来很重要,但DOC的描述主要就是通过一个图.包含了这么几个步骤:
状态输入处理->输入消息队列->任务分发->状态分发->根据状态不同分为(DATA, RESET,...KEYIN等).
以做一个CELL为例子,你首先输入的KEYIN命令,那么就进入START命令状态,这个时候MS在等候你的吩咐,你用鼠标点一个点,则进入DATAPOINT状态(如果你启动了DYNAMIC,则你鼠标移动的时候,始终有个DYNAMIC状态).如果命令结束,点鼠标右键,进入RESET状态,就OK.这就是状态机的基本概念.
说起来比较简单,在MDL里,它们是怎么实现呢?
MDL通过命令表(COMMAND TABLE)建立命令函数之间的联系.这样,而每个命令表又通过命令号(COMAND NUMBER)来识别,每个命令号和对话框的条目(ITEM)联系,这样当点了对话框之后,自动进行消息触发,从而调用函数,实现想实现的功能.
二,事件驱动编程
事件驱动编程的基本步骤就是
建立命令表->根据命令编号对应实现函数(HOOK).启动的时候,
载入命令表.然后就可以实现.
三,通过异步函数改变MS的缺省行为
通过修改钩子函数,并利用mdlXXX_setFunction,替换原来的实现钩子函数,便可以想怎么实现就怎么实现.
接下来就该是找个例子学习拉.
MyApp够复杂,很多方面都包含了.如果完全掌握这个例子,我想就基本能够动手写MDL了吧.
这个例子包含了如下内容:
1,命令表
2,消息列表
3,基础对话框概念
4基本命令
5元素定位
6元素修改
一 命令表
命令表其实也就是定义在资源文件中的数据.可以通过手工写一个ASCII文本文件,以.R为扩展名.当然,MS也提供了其资源定义工具.RDE,MS可以帮你配置.
配置工具调用:MDL LOAD RDE.就可以调用RDE,看看基本就知道该怎么配置了.不过确实不怎么好用.我看DOC里确实说MS有一个MDE环境,而且上面也有界面图,可就是不知道怎么配置出来.听说BENTLEY的支持工程师蒋先生也说在产品中自带有的,可不知道怎么调用出来?哪个高手来讲讲?
二,消息列表
其实也就是定义消息的一些ID,和对应的HOOK一起实现钩子函数.这样MS知道怎么去派发这些消息到实现函数中去了.
三对话框概念
可以将对话框想象成一个容器(从编程角度),从功能上来说,是和用户进行交互的窗口.对话框提供按狃,文本,菜单,菜单项,这些都通过资源进行定义,每个资源条目,对应相应的实现钩子函数.通过MS的消息派发,就实现了你想要实现的功能了,从而满足了用户和系统的交互.
四基本命令(Primitive command)
就是状态机的几个方面罗.
mdlState_startPrimite(函数1, 函数, ID1, ID2),指定了DATA和RESET的函数,在DATA和RESET里实现钩子.一切OK
五 元素定位和修改
其实这两个还没怎么看呢.不过MSElement和MSElementDesc基本有个了解.前者是一个元素的结构,最大为768个WORD,后者是元素在内存中的元素描述,可以通过next,previous等来访问不同的元素,
笨蛋和懒人就是没办法,写的太马虎拉 |
|