Was bedeuten die Zahlen?



  • Hallo,

    Ich frag mich schon längere Zeit, was die Zahlen zB hier:

    #define ID_MYICON [b]123[/b]
    

    bedeuten.

    Die stehn ja oft in 'ner Headerdatei für Ressourcen..

    Müssen das bestimmte Zahlen sein und wozu sind die überhaupt gut?

    Und woher weiss man, welche Zahlen man nehmen muss?

    Danke schonmal.



  • Das ist IIRC egal, welche Zahlen das sind. Sie müssen nur eindeutig und im vorgegebenen Rahmen sein. Die Defines erleichtern dir nur zu sehen, was hinter welcher Zahl steckt. Der Ressource-Compiler erzeugt mit der rc und der resource.h eine res-Datei in der die Ressourcen mit Nummern identifizierbar sind. Und wenn du im Code eine lädst, dann musst du die Nummer kennen. Einfacher ist es, wenn du einen Namen hast über den du die Ressource identifizieren kannst.



  • Ich nehme mal an, deine Frage bezieht sich auf WinAPI Ressourcen?

    Nun, die werden dafür verwendet, um Dialog Elemente, wie zB Buttons, Edit Felder, Listboxen, etc.pp zu identifizieren. Du schreibst im Programm zB

    GetDlgItemText(dlg, id, dest, 100);
    

    und die Funktion liefert dir dann den Text in 'dest' zurück, welches das Element im Dialog 'dlg' mit der Kennung 'id' hat. Damit das korrekt funktioniert, sollte also jede ID pro Dialog nur einmal vergeben werden. Eine Ausnahme bildet hier der Wert -1, der praktisch soviel sagt, dass das Element keine Kennung besitzt.

    Warum wird das nun so gemacht? Das hat einfach technische Hintergründe. Normalerweise hat jedes Element eine eindeutige Zuordnung durch sein Handle (HWND). Dieses wird jedoch erst zur Laufzeit erzeugt, und ist somit auch erst dann verfügbar. Du müsstest praktisch jeden Dialog mit all seinen Elementen manuell erstellen (was ja durchaus möglich ist), damit du jedes Handle kennst und dann gezielt darauf zugreifen kannst. Mit einem Dialog Editor ist die Erstellung allerdings weitaus praktischer, du hast nun aber keinen Zugriff mehr auf das Handle. Deshalb ist als "Ersatz" solch eine ID verfügbar.

    Man kann übrigens auch aus der ID das Handle ermitteln:

    handle = GetDlgItem(dlg, id);
    

    Der umgekehrte Weg ist ebenfalls möglich

    id = GetDlgCtrlID(handle);
    

    Ansonsten sind die ID's relativ frei wählbar. Einige sind allerdings bereits vordefiniert, zB IDOK und IDCANCEL.



  • Danke für die ausführlichen Erklärungen!



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten