-------------------------------------------------------------------------------------
上一章叙述了QBWIN的运作原理,这一章就要说一下QBWIN的功能实现过程与算法:
1。如果写过鼠标界面的朋友都碰到过一个同样的问题,就是当我们在屏幕上显示图形或什么,刚好位置就在
鼠标指示器的位置时,鼠标一移开该位置,屏幕上显示的内容就被破坏掉了。这样情况相信朋友们都有同感。解决的
方法大家都知道只有在对屏幕刷新前Hide鼠标,刷新后再Show鼠标。但当Hide与Show使用频密时就会出现闪烁现象。
如果我们每刷新一个控件的显示都Hide,Show鼠标。可想而知鼠标指示器的闪烁是如此的频密,由于我们的鼠标操作
不可能在多个目标进行。所以其它目标的控件刷新时就没有必要再对鼠标指示器进行Hide,Show。这样闪烁就会减至
最低,界面看起来也顺畅可观得多。要实现这个过程就要判断鼠标的位置是否在操作目标或刷新控件目标的位置范围
内,只有鼠标位置在目标范围内刷新显示时才进行Hide,Show处理。具体的算法是怎么样?看下面的源代码:
SUB GotPrint (V, X, Y, W, H, Win AS Windows) ‘判断子程序
MouseINT 3, 0, MX, My ’给出当前Mouse位置坐标
ML = MX - 16: MT = My - 16
MR = MX + 16: MB = My + 16
’我们都知道DOS下的鼠标图形是16x16的当击点(热点)在16,16的位置时,范围就不同了,所以我们预定
‘范围在32x32之间。
GL = X + Win.X - 5: GT = Win.Y + Y - 5 ‘这里的Win类是窗体的相对位置
GR = GL + W + 10: GB = GT + H + 10
V = NOT (ML > GR OR MR < GL OR MT > GB OR MB < GT) ‘判断范围并返回V的真假
END SUB