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