可能在敏感区创建窗口会更好些,如果图形过于复杂,Sniper兄的方法运行速度可能会降低很多。个人看法,欢迎讨论。

解决方案 »

  1.   

    判断鼠标坐标的方法比较好,有很多多媒体的播放软件界面就是这么做的。如果图形复杂,创建窗口的系统开销要比判断鼠标位置大的多,引起屏幕闪烁,而且系统GUI资源有限。
      

  2.   

    Sniper和 GoldenLion兄的方法一样,其实我也同意这么做 
      

  3.   

    感谢各位的关注:每人先入帐some 分
    Sniper的方法简单易行,却会影响很关键的速度,
    而且如果是像NetXray那样用线条表征链接和流量,
    一旦鼠标经过直线便响应相关信息,颇为理想,
    不知道哪位高手知道其实现细节?
        
            请赐教!
      

  4.   

    sealbox兄所说的创建窗口的不足之处GoldenLion已经提了一点。还有一点,由于地图上的敏感区形状比较复杂,用窗口方式许多形状描述起来很痛苦。另一方面,用窗口实现时,实际上运算的开销仍存在,只不过向系统完成就是了。
    在我提出的方案中,我只说了一个矩形,实际上可以实现一个基类CBase,包含判断鼠标位置在不在本敏感区进行判断等虚函数。然后由CBase导出各种敏感区的实现类,重载基类中的虚函数,比如矩形、椭圆、圆等,实现线段时比较麻烦,但原理是一样的,只是判断的算法不同。如果你有足够的耐心和时间,你也可以实现多边形等非规则的敏感区。接着实现一个CBase对象的链表。在鼠标移动时用坐标为参数调用相应方法就搞定了。
      

  5.   

    GoldenLion及Sniper兄分析的很正确。
    如果采用矩形区域,实现方法恐怕还需改进,应该考虑建立空间索引,以防止数据量太大时速度大幅度降低。
    另外,昨天做了一个试验,想看看能够创建多少个窗口,结果在什么都没有运行的情况下共能创建16000多个窗口。想请教一下Windows的各种资源限制,哪位兄弟能够详细讲解一下?谢谢!
      

  6.   

    use display list callback mode.
    jansen zhu. (an opengl fan)