我正在尋找一些C++代碼來讓我快速移動窗口周圍的位圖,在移動時恢復背景。目前,我在應用程序初始化期間將窗口內容捕獲到位圖中,並在OnPaint()中繪製該位圖,然後繪製覆蓋位圖。我雙緩衝油漆。覆蓋的位圖位置隨着使窗口無效的鼠標移動。在C++中快速圍繞窗口移動位圖
這工作正常,除非它太慢,當背景窗口很大(認爲Windows桌面)和PC是慢的。我的猜測是,每次鼠標移動時重繪大背景位圖都是瓶頸。必須有更好更快的方式來做到這一點,但我的搜索沒有找到我需要的答案。
我正在尋找一些C++代碼來讓我快速移動窗口周圍的位圖,在移動時恢復背景。目前,我在應用程序初始化期間將窗口內容捕獲到位圖中,並在OnPaint()中繪製該位圖,然後繪製覆蓋位圖。我雙緩衝油漆。覆蓋的位圖位置隨着使窗口無效的鼠標移動。在C++中快速圍繞窗口移動位圖
這工作正常,除非它太慢,當背景窗口很大(認爲Windows桌面)和PC是慢的。我的猜測是,每次鼠標移動時重繪大背景位圖都是瓶頸。必須有更好更快的方式來做到這一點,但我的搜索沒有找到我需要的答案。
也許你最快的方法是將你的可移動圖像存儲在一個位圖中,然後在內存中保留第二個相同大小的臨時位圖。要在主圖像上繪製可移動位圖,首先使用BitBlt API函數將要繪製可移動位圖的區域複製到臨時位圖中,然後將可移動位圖BitBlt複製到主圖像上。當你移動可移動位圖時,你將1)BitBlt臨時位圖到其原始位置,然後2)BitBlt新位置到臨時位圖,然後3)BitBlt移動圖像到主位圖中的新位置。
您應該看看Image Lists其中dragging效果。
Win32 API包括 在屏幕上拖動圖像的功能。拖動功能可平滑移動圖像 ,以彩色方式移動光標並且不會有任何 閃爍。兩者都被屏蔽了 和未被屏蔽的圖像可以被拖動。
當然,用戶實際上並不需要拖動圖像。 你通過改變圖像位置來做到這一點。
是的,我正在考慮這些方面,但我曾嘗試過這樣的事情,結果沒有我希望的那麼快。所以我想知道是否有更好的方法。 我正在使用GDI +,我認爲從我的閱讀中回落到GDI可能會更好,因爲視頻硬件加速不支持GDI +。 – nevf 2009-10-25 22:37:43
BitBlt應該幾乎是瞬間的,所以我不確定爲什麼這不適合你。 – MusiGenesis 2009-10-25 22:40:18