2015-06-02 25 views
-1

這次又一個簡單的問題是:我的DLL處理UI的東西有一個uninit() function that should be called before the program terminates that frees all resources(取消註冊窗口類,刪除私人堆等)。什麼是要求卸載IDI_APPLICATIONIDC_ARROW,以及其他系統圖標和加載了LoadIcon/Cursor(NULL, IDI/IDC_WHATEVER)的光標?我可以從MSDN收集的最接近DeleteObject()不應該在這些圖標上調用;在那種情況下,沒有這種功能嗎?謝謝。如何釋放標準圖標和遊標(LoadIcon/Cursor(NULL,IDI/IDC_WHATEVER))?

+3

如果是系統加載的,則不需要'DeleteObject()',如果您使用自己的,則在完成後刪除。 –

+0

感謝你們倆。 @KenWhite我已經立即釋放了臨時性的東西;此函數用於在DLL啓動時初始化並且必須在DLL的整個生命週期中保持活動的事件,即私有窗口,窗口類,GDI字體對象和DLL的私有堆。 – andlabs

回答

0

您不會卸載系統定義的圖標或光標。該documentation for DestroyIcon,例如,具體說(加上強調):

它是隻需要調用DestroyIcon爲具有以下功能創建的圖標和光標:CreateIconFromResourceEx(好象叫不LR_SHARED標誌),CreateIconIndirectCopyIcon請勿使用此功能銷燬共享圖標。只要加載的模塊保留在內存中,共享圖標就是有效的。以下功能獲取共享圖標。

  • LoadIcon
  • 的LoadImage(如果使用LR_SHARED標誌)
  • CopyImage(如果使用LR_COPYRETURNORG標誌和畫佳參數是共享圖標)
  • CreateIconFromResource
  • CreateIconFromResourceEx(如果使用LR_SHARED標誌)

上面清楚的是sta測試你使用LoadIcon()獲得的圖標不應該被銷燬。同樣是在documentation for DestroyCursor說:

銷燬光標,並釋放光標所佔用的內存。 請勿使用此功能銷燬共享光標。

+0

是的,我看到了;我想知道是否還有其他一些我錯過的信息。感謝您的確認! – andlabs