Handles? Was kann ich mir darunter vorstellen?



  • Also ein Handel ist meistens ein INT Wert, für eine Resource oder ein Window.
    Doch was passiert intern mit dem INT Wert?

    Z.b. lade ich ein Icon mit:

    HICON myIcon = ExtractIcon(hInstance,"icon1.ico",0);
    

    Wenn ich an dieser Stelle ein Breakpoint mache und mir den "MemoryDump" (keine Ahnung wie ich das nennen soll, aber ich glaube ihr wißt was ich meine)
    anschaue, steht für die Variable "myIcon" der Wert:

    0x0012FE30 02050745
    ^Addresse ^Wert

    Also ein Zeiger auf eine andere Adresse kann der Wert->02050745 nicht sein.
    Denn dort ist der Speicher undefiniert. Wo stehen aber denn dann die Daten für mein Icon? Was fängt Windows mit dem Wert 02050745(Dezimal=33883973) an?



  • Afaik hat Windows intern eine Tabelle, mit der die ganzen Ressourcen verwaltet werden - und um da deine gewünschte Ressource rauszusuchen braucht Windows eben diesen Index 😉



  • Und wo wird dann das im Speicher hingeladen? Also wo kopiert die Funktion
    ExtractIcon() die Daten hin die es von "icon1.ico" gelesen hat?
    Bekomm ich da irgendwie ein Pointer drauf? Plus eventuell Länge der Daten?



  • Mit den Handles werden die unterschiedlichsten Klamotten innerhalb von Windows referenziert. Als Adresse sind sie nicht brauchbar, jedoch gibt es immer eine Reihe von Funktionen, um an die entsprechenden Informationen zu kommen.

    Was Du hier suchst ist vielleicht die Funktion

    BOOL GetIconInfo(
      HICON hIcon,          // icon handle
      PICONINFO piconinfo   // icon structure
    );
    

    Die Struktur PICONINFO liefert die folgenden Daten:

    typedef struct _ICONINFO { 
      BOOL    fIcon; 
      DWORD   xHotspot; 
      DWORD   yHotspot; 
      HBITMAP hbmMask; 
      HBITMAP hbmColor; 
    } ICONINFO;
    

    Mit den Bitmap-Handles kommst Du dann vermutlich weiter (siehe MSDN).


Anmelden zum Antworten