我正在考慮用C++針對Windows 7(使用Windows api)創建一個允許在同一臺PC上使用第二個鼠標指針的軟件,所以我的問題是Windows的女巫部分是處理鼠標的渲染指針? 我相信,理解它的實際工作方式將允許我模仿它以呈現第二個鼠標指針。 謝謝。鼠標指針渲染器
Q
鼠標指針渲染器
0
A
回答
4
Windows的窗口系統只支持一個「true」光標:它是2D圖形芯片組的低級功能(這就是爲什麼光標不顯示在屏幕截圖中)。 Windows將保留光標位圖的獨立視頻內存區域設置爲獨立區域:具有AND/XOR通道(用於索引的不透明度和顏色反轉)的DDB(設備相關位圖),或用於透明度爲alpha的32bpp RGBA表面遊標(這是如何實現「顯示光標陰影」功能)。我的理解是,光標被應用於實際的輸出圖像,因爲它由輸出設備「掃描」(例如DAC用於VGA輸出或任何DVI和HDMI使用),所以它在幀緩衝區中從不存在 - 這就是光標在我們合成窗口管理器之前的幾天就工作過了,並且無需讓應用程序在光標所在的位置重繪自己。
對於光標使用這個特殊的技巧也是必要的,以保持延遲最小。如果你編寫一個繪製到窗口表面的程序(例如使用GDI甚至通過OpenGL或Direct3D),你會發現它比真實光標滯後幾毫秒,這對用戶來說很容易知道(這就是爲什麼現代RTS遊戲使用這個硬件遊標功能而不是自己重新實現)。
我沒有辦法擴展這個功能,我知道 - 你將不得不成爲反彙編之神來修改Windows和圖形驅動程序來實現繪製多個遊標的能力。
這就是事物的表現方面。對多個遊標的實際應用程序級支持也很棘手 - 請記住,光標移動對應於各種與鼠標相關的窗口消息發送給hWnds。兩個遊標的問題是這些消息會衝突,儘管理論上它應該工作,只要它們被正確地序列化到一個隊列中即可。應用程序會出現問題,很多人會假設,例如,只有一個控件可以一次處於Hover狀態,如果您有多個遊標,那麼應用程序只會尊重最新的遊標消息。
我可能會建議您看看Windows 7中引入的多點觸控支持,它支持多個同時「遊標」,雖然它只針對手指而不是鼠標。
相關問題
- 1. 渲染鼠標懸停
- 2. WebRTC鼠標指針
- 3. 油污2D:渲染空指針異常
- 4. 隱藏鼠標指針
- 5. 鼠標指針插入
- 6. 移動鼠標指針
- 7. UWP MapControl鼠標/指針在
- 8. 多個鼠標指針?
- 9. 使鼠標指針圖像
- 10. Collada模型渲染鼠標移動
- 11. linux:雙鼠標 - 有多個鼠標指針的多個鼠標?
- 12. Android openGL渲染器返回空指針異常
- 13. 使用鼠標指針標記邊緣
- 14. 如何將鼠標指針更改爲手指指針?
- 15. 「服務器端渲染」是指雙方渲染?
- 16. 指向多個渲染目標
- 17. 畫布:基於指針的視口/包含鼠標指針
- 18. XNA使用鼠標旋轉播放器而不移動鼠標指針
- 19. Javascript/Onclick - 鼠標移動時鼠標指針
- 20. 獲取鼠標指針下的DIV列表(鼠標事件)
- 21. 如何更改鼠標指針上的鼠標懸停分手?
- 22. 沒有鼠標指針CentOs7與協同
- 23. 在鼠標指針下獲取文字
- 24. Java Swing中的鼠標指針問題
- 25. QT QML鼠標指針旋轉
- 26. QTextEdit:在鼠標指針下得到字
- 27. 獲取鼠標指針下的文本
- 28. 動畫/交互式鼠標指針
- 29. Gtk +鼠標指針離開事件
- 30. 將鼠標指針改爲R(Shiny
謝謝您的評論和建議。我不認爲這很複雜。 – sifadil 2013-04-24 00:56:20
順便說一下,屏幕錄製軟件實際上能夠記錄鼠標光標,所以他們只是在視頻上放置假的光標形狀? – sifadil 2013-04-24 01:08:52
@Dai:應用程序可以通過使用[原始輸入](http://msdn.microsoft.com/en-us/library/windows/desktop/ms645536.aspx)API來支持多個鼠標而不用擔心碰撞。這是因爲你必須註冊你感興趣的特定設備,然後通知消息告訴你哪個設備正在發送通知。 MSDN甚至提到了這種可能性:「即使應用程序來自同一類型的設備,應用程序也可以區分輸入源**例如,兩個鼠標設備**」 – 2013-04-24 01:14:58