Windows是怎么做-it test的?過去一直依賴于現(xiàn)成框架中提供的各種包裝好的Control來做開發(fā),很方便。各種交互事件都已經(jīng)幫開發(fā)者封裝好了,但是現(xiàn)在由于項目需要,需要自此從頭來實現(xiàn)這些機制。目前比較頭疼的是-it test的問題。在一個矩形區(qū)域內(nèi)有很多小的矩形(可能有重疊),當(dāng)鼠標(biāo)在其上移動的時候,我的程序必須快速判斷出鼠標(biāo)現(xiàn)在位于哪個矩形上,進而產(chǎn)生出相應(yīng)的消息去通知該矩形。已知的解決方案:如果矩形的位置、大小變化不頻繁,而且內(nèi)存空間不是太捉襟見肘,可以生成一個Bit-p來實現(xiàn)O(1)復(fù)雜度的-it test判斷。性能恐怕不會有比這個更好的了。但問題是由于這些矩形可能頻繁變化位置和大?。▌赢嫞?,因此實時生成這樣的Bit-p會對性能造成影響。似乎不太可行。另外一些解決方案有的人提到了RTree。我也查閱了一些資料,似乎性能很好。但是我還沒有深入閱讀。-it test對于游戲開發(fā)人員,和圖形程序開發(fā)人員來說應(yīng)該是很常見很成熟的一個技術(shù)了。非常想聽聽你們的意見和建議。最后,和標(biāo)題一樣,很好奇Windows是怎么做-it test的?1 個答案
答案 1:
簡單來說所有窗口組成一個樹形結(jié)構(gòu),同一個parent的所有子窗口做z排序。檢測的時候從上往下做point-rect檢測,如果不在rect內(nèi)就直接跳過整棵子樹。具體實現(xiàn)上還需要處理很多細節(jié),例如當(dāng)窗口不可見的時候可以直接跳過。但基本思路就是這樣,復(fù)雜度大概為O(logN),N為窗口的數(shù)量。 很多開源的UI庫可以參考的,例如:Qt, CEGUI, MyGUI