■〓纯自绘界面的问题〓■
Windows 是基于消息的,当有事件发生时,Windows 就把消息发送到相应的程序。
这里讨论界面与鼠标消息的问题。
Windows 提供了许多内建的控件 (Edit box, Combo box 等等,控件都是子窗口),实际上所有控件都是画出来的,所有的控件在屏幕上占据一块区域(实际由内部结构定义),当鼠标在屏幕上移动时,系统通过查找鼠标光标位于哪个区域上,然后把消息发到对应的窗口相关联的窗口过程(以回调的方式),我在这部分的理解上有一些不明确的地方,就是,如果屏幕上有数百上千个窗口(或控件),那是不是每移动一下鼠标,它都要遍历一遍所有的这些窗口,看鼠标光标到底落在哪个窗口上?这样的开销是不是太大了?Windows 在内部到底是怎么做的?
如果我要实现完全自绘的界面,除了主窗口外,其他所有的界面元素都是自绘的(即不使用 Windows 提供的任何控件),应该是类似于 DirectUI 这种方式吧,我怎么检测鼠标光标落在我的哪个自绘界面元素上呢?除了把所有自绘界面元素遍历一遍进行对比的方法外有没有其他方法呢?没理由每移动一下鼠标都要遍历一遍吧?我总觉得这是一种很笨且效率低下的办法。
在这个问题上能不能使用哈希算法解决?
大家讨论一下