我正在創建一個實用程序,它使用全局掛鉤在桌面上的其他窗口上繪製一些(用戶可定製的)圖標。由於位圖對象是特定於某個進程的,因此我在繪製它們之前爲每個進程中的這些圖標創建單獨的HBITMAP對象,並且所有這些句柄都存儲在dll中的共享段中。我可以刪除在另一個進程中創建的HBITMAP對象嗎?
現在,當我的程序(由用戶)刪除一個圖標時,應刪除這些不同進程中的所有HBITMAP對象。我可以在我的主程序中使用DeleteObject()來做到這一點,還是必須刪除創建過程中的每個句柄?
我正在創建一個實用程序,它使用全局掛鉤在桌面上的其他窗口上繪製一些(用戶可定製的)圖標。由於位圖對象是特定於某個進程的,因此我在繪製它們之前爲每個進程中的這些圖標創建單獨的HBITMAP對象,並且所有這些句柄都存儲在dll中的共享段中。我可以刪除在另一個進程中創建的HBITMAP對象嗎?
現在,當我的程序(由用戶)刪除一個圖標時,應刪除這些不同進程中的所有HBITMAP對象。我可以在我的主程序中使用DeleteObject()來做到這一點,還是必須刪除創建過程中的每個句柄?
當然,你必須從創建它們的進程中刪除它們 - 即使它適用於你,對於不同的Windows版本它可能不會。
處理GDI對象通常是一個私有過程。無論如何你可以檢查DeleteObject的返回值。
我只是在猜測這個......
你應該使用一個鉤子來鉤住不同的窗口。