WNDCLASSEX: LoadCursor/LoadIcon - Wo wird das freigegeben?



  • Hi,

    beim Befüllen der WNDCLASSEX Struktur findet man ja häufig folgenden Code:

    wndclassex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wndclassex.hCursor = LoadCursor(NULL, IDC_ARROW);
    

    Ich habe bis jetzt noch nie einen Source-Code gesehen wo diese Handles wieder freigegeben wurden. Werden diese automatisch freigegeben? Wenn ja, wo genau ist das dokumentiert? Habe nix gefunden. 🤡



  • Hmmmm,
    das ist ja mal ne Frage wo selbst ich husten muß!
    kann es sein das diese daten die Speicher belegen in einer Struct sitzen und somit freigegeben werden wenn die Struct nicht mehr Exestiert? Ich mein da ich ja nicht mit "new" was erstellt habe was ich mit delete wieder löschen muß.
    Ach oder macht das Windows wenn ich PostQuitMessage(0); sende und er die installierte Klasse löscht?

    Oder steht die Lösung sogar in der MSDN?

    Fragen über Fragen, ich bin Überfragt. 😃



  • It is only necessary to call DestroyIcon for icons and cursors created with the following functions: CreateIconFromResourceEx (if called without the LR_SHARED flag), CreateIconIndirect, and CopyIcon. Do not use this function to destroy a shared icon. A shared icon is valid as long as the module from which it was loaded remains in memory. The following functions obtain a shared icon.

    LoadIcon
    LoadImage (if you use the LR_SHARED flag)
    CopyImage (if you use the LR_COPYRETURNORG flag and the hImage parameter is a shared icon)
    CreateIconFromResource
    CreateIconFromResourceEx (if you use the LR_SHARED flag)

    The DestroyCursor function destroys a nonshared cursor. Do not use this function to destroy a shared cursor. A shared cursor is valid as long as the module from which it was loaded remains in memory. The following functions obtain a shared cursor:

    LoadCursor
    LoadCursorFromFile
    LoadImage (if you use the LR_SHARED flag)
    CopyImage (if you use the LR_COPYRETURNORG flag and the hImage parameter is a shared cursor)



  • @*HUST*
    Und was sagt uns das, denn ich blick da nicht durch 😞 zu viel English 😕



  • So nun aber mal Spass bei Seite, das ist ja schon ne gute Frage wenn sich jemand gedanken über die Speicherfreigaben macht.

    LoadIcon() und LoadCursor() laden ehr indirekt, also ein shared Object das von Windows verwaltet wird da er den Cursor und so Zeichnet.
    Dieses Object bleibt so lange gültig bis die Anwendug beendet wird, oder ein anderer zur Laufzeit geladen wird. Somit übernimmt Windows diese Aufgabe und du brauchst dich darum nicht zu Kümmern.

    Achso, das gild auch für LoadImage(), daher giebt man auch ein HBITMAP nicht wieder frei nach dem es mit LoadImage geladen wurde. EDIT: Natürlich muß das " LR_SHARED" Flag mit angegeben werden wie man oben in dem MSDN Ausschnitt sieht und unten liest, sorry hatte ich vergessen mit an zu geben.



  • MiC++ha schrieb:

    Achso, das gild auch für LoadImage(), daher giebt man auch ein HBITMAP nicht wieder frei nach dem es mit LoadImage geladen wurde.

    *HUST*

    Aber nur,

    MSDN schrieb:

    if you use the LR_SHARED flag

    🙄



  • MiC++ha bitte ändere deinen Satz. Das sollen nicht alzu viele lesen. 🙄


Anmelden zum Antworten