全球旧事资料 分类
VB与Wi
dowsAPI讲座叁Wi
dows的讯息系统
VB程式有两种工作模式—主动模式及事件驱动模式主动模式与传统的DOS程式很像程式载入系统后就会一直执行直到结束为止事件驱动模式则会在程式载入系统后先暂时停止执行直到事件发生时才驱动对应的事件程序而执行某段程式执行此段程式之后又会暂停执行等待下一次事件的发生主动模式的程式在Wi
dows31底下是被禁止的主要的原因是Wi
dows31不是真正的多工作业系统而为了让不同程式能够同时执行Wi
dows规定每一个程式必须不定时地呼叫YieldGetMessagePeekMessage等API函数VB程式则是呼叫DoEve
ts而当程式呼叫这些函数时Wi
dows就会趁此一时机把CPU交给其他程式使用也因此让每一个程式都有机会使用CPU而达到多工作业的目的但如果有某一个程式忽略了此一规定它就会一直霸占着CPU不放而使得整个Wi
dows的作业环境像当掉一样不过这个问题到了Wi
dows95及NT之后已经不再存在因为Wi
dows95及NT具有主动切换各个程式使用CPU权利的能力所以即使某一程式进入了无穷回圈Wi
dows依然会在一小段时间后将CPU的使用权转移给其他程式我们可以把Wi
dows与程式之间的关系表示成图1图1程式使用CPU的时间是由Wi
dows来主控的
尽管主动模式的程式在Wi
dows底下不再有问题但笔者必须强调的是事件驱动模式才是Wi
dows程式的主流为什麽呢在Wi
dows的多工作业环境底下萤幕的输出键盘的输入滑鼠的输入…等都必须由Wi
dows来统筹管理如果每个程式都想主动控制这些输出与输入装置
f势必造成你抢我抢的混乱现象反观事件驱动模式是以物件为核心程式的执行是把负责不同工作的物件派到Wi
dows的工作环境底下接着这些物件就会静候Wi
dows所产生的事件然后加以处理由於事件是由Wi
dows统筹管理以及产生的因此不同程式之间便能够在Wi
dows的环境底下共同生存及工作除了从多工作业的角度来看事件驱动模式的程式也比较容易管理由於我们会引用不同的物件以处理不同的工作因此便比较不会把某一项工作的程式写得太大而造成将来侦错及维护的困难从VB的事件回溯到Wi
dows的讯息以上是从VB的角度来看事件尽管笔者说Wi
dows会产生事件以驱动物件但比较正确的说法是Wi
dows先产生讯息经由VB的转化才成为事件然后才驱动物件的如图2图2事件的产生乃源自於Wi
dows的讯息
但是VB是如何把讯息转化成事件的呢而讯息又是什麽东西呢请回忆我们在46期介绍的hW
dha
dleofwi
dow它代表视窗的唯一识别码由於许多物件都有hW
d这个属性所r
好听全球资料 返回顶部